super-test 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGE.txt +9 -0
  3. data/README.txt +13 -0
  4. data/bin/idb +19 -0
  5. data/bin/ii +113 -0
  6. data/bin/istart_mock +36 -0
  7. data/bin/istop_mock +16 -0
  8. data/bin/kk +181 -0
  9. data/bin/rubyatp +42 -0
  10. data/bin/start_mock +36 -0
  11. data/bin/stop_mock +16 -0
  12. data/bin/xgo +45 -0
  13. data/conf/conf.rb +11 -0
  14. data/conf/db03.yml +31 -0
  15. data/conf/db13.yml +37 -0
  16. data/conf/db19.yml +33 -0
  17. data/conf/online.yml +32 -0
  18. data/conf/super_test.yml +40 -0
  19. data/conf/system.yml +26 -0
  20. data/conf/sz00.yml +31 -0
  21. data/conf/sz06.yml +34 -0
  22. data/conf/wise00.yml +11 -0
  23. data/data/case.house +0 -0
  24. data/data/char.house +0 -0
  25. data/data/images/Bluehills.jpg +0 -0
  26. data/data/images/Sunset.jpg +0 -0
  27. data/data/images/Waterlilies.jpg +0 -0
  28. data/data/images/Winter.jpg +0 -0
  29. data/data/query.house +18595 -0
  30. data/data/user.house +8 -0
  31. data/lib/action/module/check_action.rb +58 -0
  32. data/lib/action/module/cnnt_action.rb +161 -0
  33. data/lib/action/module/datacenter_action.rb +48 -0
  34. data/lib/action/module/http_pack_helper.rb +163 -0
  35. data/lib/action/module/httpserver_action.rb +297 -0
  36. data/lib/action/module/inc.rb +21 -0
  37. data/lib/action/module/mcpack_action.rb +57 -0
  38. data/lib/action/module/sql_action.rb +84 -0
  39. data/lib/action/module/ssh_action.rb +37 -0
  40. data/lib/action/system/user_action.rb +180 -0
  41. data/lib/common/appium_helper.rb +217 -0
  42. data/lib/common/atp_helper.rb +74 -0
  43. data/lib/common/atp_report.rb +344 -0
  44. data/lib/common/data_house.rb +405 -0
  45. data/lib/common/data_model.rb +87 -0
  46. data/lib/common/http/assert_helper.rb +343 -0
  47. data/lib/common/http/fix_hpricot.rb +118 -0
  48. data/lib/common/http/html_helper.rb +362 -0
  49. data/lib/common/http/http_helper.rb +469 -0
  50. data/lib/common/http/multipart.rb +81 -0
  51. data/lib/common/isandbox_helper.rb +195 -0
  52. data/lib/common/json_helper.rb +43 -0
  53. data/lib/common/mock_helper.rb +168 -0
  54. data/lib/common/mtop_helper.rb +141 -0
  55. data/lib/common/myconf_helper.rb +49 -0
  56. data/lib/common/mylog_helper.rb +77 -0
  57. data/lib/common/pairwise.rb +121 -0
  58. data/lib/common/query_house.rb +89 -0
  59. data/lib/common/report_helper.rb +97 -0
  60. data/lib/common/robot_helper.rb +85 -0
  61. data/lib/common/socket/check.rb +325 -0
  62. data/lib/common/socket/conf_modifier.rb +149 -0
  63. data/lib/common/socket/context.rb +55 -0
  64. data/lib/common/socket/data.rb +392 -0
  65. data/lib/common/socket/data_helper.rb +41 -0
  66. data/lib/common/socket/env.rb +317 -0
  67. data/lib/common/socket/inc.rb +24 -0
  68. data/lib/common/socket/log.rb +213 -0
  69. data/lib/common/socket/log4s.rb +58 -0
  70. data/lib/common/socket/log_helper.rb +332 -0
  71. data/lib/common/socket/my_sql.rb +77 -0
  72. data/lib/common/socket/net.rb +74 -0
  73. data/lib/common/socket/network.rb +115 -0
  74. data/lib/common/socket/rlib/conf_modifier.rb +130 -0
  75. data/lib/common/socket/rlib/data_helper.rb +33 -0
  76. data/lib/common/socket/rlib/log_helper.rb +303 -0
  77. data/lib/common/socket/rlib/process_helper.rb +91 -0
  78. data/lib/common/socket/stub.rb +276 -0
  79. data/lib/common/socket/util.rb +266 -0
  80. data/lib/patterns/inc.rb +10 -0
  81. data/lib/patterns/mc_base_pattern.rb +474 -0
  82. data/lib/patterns/some_pattern.rb +145 -0
  83. data/lib/super_test.rb +114 -0
  84. data/log/super_test.log +0 -0
  85. data/log/super_test.log.wf +0 -0
  86. data/test/cover_me.rb +6 -0
  87. data/tool/jenny +0 -0
  88. data/tool/mcsend/mcsend2 +0 -0
  89. data/tool/mcsend/mcsend2_shead +0 -0
  90. data/tool/mcserver/conf/mcserver.conf +77 -0
  91. data/tool/mcserver/conf/mcserverauthip +17 -0
  92. data/tool/mcserver/mcserver +0 -0
  93. data/tool/mcserver/mcserver_trans +0 -0
  94. data/tool/mysql +0 -0
  95. data/tool/net/mcsend/mcsend +0 -0
  96. data/tool/net/mcsend/mcsend_trans +0 -0
  97. data/tool/net/mcsend/nshead.data +7 -0
  98. data/tool/net/mcsend/res_nshead.data +7 -0
  99. data/tool/net/my_client/my_client +0 -0
  100. data/tool/net/tsclient/client.tcl +205 -0
  101. data/tool/others/kk +190 -0
  102. data/tool/others/rubyatp +42 -0
  103. data/tool/others/supertest_install.sh +34 -0
  104. data/tool/trip/idb +0 -0
  105. data/tool/ts-agent/nshead.bft +12 -0
  106. data/tool/ts-agent/server.conf +10 -0
  107. data/tool/ts-agent/server.tcl +376 -0
  108. metadata +275 -0
@@ -0,0 +1,81 @@
1
+ # Takes a hash of string and file parameters and returns a string of text
2
+ # formatted to be sent as a multipart form post.
3
+ #
4
+ # Author:: Cody Brimhall <mailto:cbrimhall@ucdavis.edu>
5
+ # Created:: 22 Feb 2008
6
+ # coding: utf-8
7
+
8
+ require 'mime/types'
9
+ require 'cgi'
10
+
11
+
12
+ module Multipart
13
+ VERSION = "1.0.0" unless const_defined?(:VERSION)
14
+
15
+ # Formats a given hash as a multipart form post
16
+ # If a hash value responds to :string or :read messages, then it is
17
+ # interpreted as a file and processed accordingly; otherwise, it is assumed
18
+ # to be a string
19
+ class Post
20
+ # We have to pretend like we're a web browser...
21
+ USERAGENT = "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/523.10.6 (KHTML, like Gecko) Version/3.0.4 Safari/523.10.6" unless const_defined?(:USERAGENT)
22
+ #BOUNDARY = "0123456789ABLEWASIEREISAWELBA9876543210" unless const_defined?(:BOUNDARY)
23
+ BOUNDARY = "--------------01234HELLOSPACE56789" unless const_defined?(:BOUNDARY)
24
+ CONTENT_TYPE = "multipart/form-data; boundary=#{ BOUNDARY }" unless const_defined?(:CONTENT_TYPE)
25
+ HEADER = { "Content-Type" => CONTENT_TYPE, "User-Agent" => USERAGENT } unless const_defined?(:HEADER)
26
+
27
+ def self.prepare_query(params)
28
+ fp = []
29
+
30
+ params.each do |k, v|
31
+ # Are we trying to make a file parameter?
32
+ if v.respond_to?(:path) and v.respond_to?(:read) then
33
+ fp.push(FileParam.new(k, v.path, v.read))
34
+ # We must be trying to make a regular parameter
35
+ else
36
+ fp.push(StringParam.new(k, v))
37
+ end
38
+ end
39
+
40
+ # Assemble the request body using the special multipart format
41
+ query = fp.collect {|p| "--" + BOUNDARY + "\r\n" + p.to_multipart }.join("") + "--" + BOUNDARY + "--\r\n"
42
+ return query, HEADER
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ # Formats a basic string key/value pair for inclusion with a multipart post
49
+ class StringParam
50
+ attr_accessor :k, :v
51
+
52
+ def initialize(k, v)
53
+ @k = k
54
+ @v = v
55
+ end
56
+
57
+ def to_multipart
58
+ return "Content-Disposition: form-data; name=\"#{k}\"\r\n\r\n#{v.to_s.force_encoding('ISO-8859-1')}\r\n"
59
+ end
60
+ end
61
+
62
+ # Formats the contents of a file or string for inclusion with a multipart
63
+ # form post
64
+ class FileParam
65
+ attr_accessor :k, :filename, :content
66
+
67
+ def initialize(k, filename, content)
68
+ @k = k
69
+ @filename = filename
70
+ @content = content
71
+ end
72
+
73
+ def to_multipart
74
+ # If we can tell the possible mime-type from the filename, use the
75
+ # first in the list; otherwise, use "application/octet-stream"
76
+ mime_type = MIME::Types.type_for(filename)[0] || MIME::Types["application/octet-stream"][0]
77
+ return "Content-Disposition: form-data; name=\"#{k}\"; filename=\"#{ filename }\"\r\n" +
78
+ "Content-Type: #{ mime_type.simplified }\r\n\r\n#{ content }\r\n"
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,195 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: utf-8
3
+ #
4
+ # Author:: yzm
5
+ # Date:: 2016-03-01 19:05:44 +0800
6
+ ###########################################
7
+
8
+
9
+
10
+ # 封装访问ios设备沙盒文件的核心模块
11
+ module ISandBoxHelper
12
+ # include ConfigHelper
13
+
14
+ # === 功能:
15
+ # 向非越狱iphone推送一段内容
16
+ #
17
+ # === 参数解释:
18
+ # filename: 只是存储文件名,不带路径,目前mock路径是约定的
19
+ # data: 推送内容,一般是string,其他可以直接写入文件的写可以
20
+ #
21
+ # === Example:
22
+ # Example #1:
23
+ #
24
+ def ipush_data(path, data, filename='')
25
+ mount
26
+ begin
27
+ root_folder = $isandbox_operator.tmp_folder_name + path
28
+ exec_cmd("mkdir #{root_folder}") unless File.directory? root_folder
29
+ filename = root_folder + '/' + filename.to_s.split('/')[-1]
30
+ # 去除可能的 //
31
+ filename.sub(/\/\//, '/')
32
+ File.open(filename, "w+") do |file|
33
+ file.puts data
34
+ end
35
+ rescue
36
+ p "error:#{$!} at:#{$@}"
37
+ ensure
38
+ umount
39
+ end
40
+ end
41
+
42
+ # === 功能:
43
+ # 向非越狱iphone推送一个mock文件
44
+ #
45
+ # === 参数解释:
46
+ # filename: mock文件在MAC上的路径和文件名
47
+ #
48
+ # === Example:
49
+ # Example #1:
50
+ #
51
+ def ipush_file(path, file)
52
+ mount
53
+ begin
54
+ path = $isandbox_operator.tmp_folder_name + path
55
+ path.sub(/\/\//, '/')
56
+ exec_cmd "cp #{file} #{path}"
57
+ rescue
58
+ p "error:#{$!} at:#{$@}"
59
+ ensure
60
+ umount
61
+ end
62
+ end
63
+
64
+ # === 功能:
65
+ # 从非越狱iphone拉取一个文件
66
+ #
67
+ # === 参数解释:
68
+ # path: 文件在iphone上的路径和文件名
69
+ #
70
+ # === Example:
71
+ # Example #1:
72
+ #
73
+ def ipull_file(path)
74
+
75
+ mount
76
+ begin
77
+ exec_cmd "cat #{path}" if File.file? path
78
+ rescue
79
+ p "error:#{$!} at:#{$@}"
80
+ ensure
81
+ umount
82
+ end
83
+ end
84
+
85
+ # === 功能:
86
+ # 从非越狱iphone删除文件
87
+ #
88
+ # === 参数解释:
89
+ # - path: 待删除文件或路径
90
+ #
91
+ # === Example:
92
+ # Example #1:
93
+ #
94
+ def iremove_file(path)
95
+ mount
96
+ begin
97
+ path = $isandbox_operator.tmp_folder_name + path
98
+ if File.directory? path
99
+ path = path + '/*'
100
+ path.sub(/\/\//, '/')
101
+ end
102
+ exec_cmd "rm -rf #{path}"
103
+ rescue
104
+ p "error:#{$!} at:#{$@}"
105
+ ensure
106
+ umount
107
+ end
108
+ end
109
+
110
+ ##########################
111
+ # 以下为内部方法,不建议调用 #
112
+ ##########################
113
+ private
114
+
115
+ # === 功能:
116
+ # 挂载alitrip沙盒
117
+ # === 参数解释:
118
+ #
119
+ # === Example:
120
+ # Example #1:
121
+ #
122
+ def mount
123
+ $isandbox_operator = ISandboxOperator.new if $has_instance.nil?
124
+ $isandbox_operator.mount
125
+ end
126
+
127
+ # === 功能:
128
+ # 卸载alitrip沙盒
129
+ # === 参数解释:
130
+ #
131
+ # === Example:
132
+ # Example #1:
133
+ #
134
+ def umount
135
+ $isandbox_operator.umount
136
+ end
137
+
138
+ # === 功能:
139
+ # 执行shell命令
140
+ # === 参数解释:
141
+ # cmd: shell命令
142
+ # === Example:
143
+ # Example #1:
144
+ #
145
+ def exec_cmd(cmd)
146
+ $isandbox_operator.exec_cmd cmd
147
+ end
148
+
149
+ class ISandboxOperator
150
+
151
+ attr_accessor :tmp_folder_name
152
+ attr_accessor :udid
153
+ attr_accessor :container
154
+
155
+ def initialize
156
+ fail 'ifuse must be install' unless ifuse_exist?
157
+ # @caps = ConfigHelper::CONF["appium_driver"]["caps"]
158
+ # @udid = @caps["udid"]
159
+ @udid = `idevice_id -l`.split(' ')[0]
160
+ @container = 'com.taobao.alitrip'
161
+ $has_instance = self
162
+ self
163
+ end
164
+
165
+ def mount
166
+ @tmp_folder_name = Time.new.to_i.to_s
167
+ exec_cmd "mkdir #{@tmp_folder_name}" unless File.exists? @tmp_folder_name
168
+ exec_cmd "ifuse -u #{@udid} --container #{@container} #{@tmp_folder_name}"
169
+ @flag_folder = @tmp_folder_name + '/tmp'
170
+ while true
171
+ break if File.directory? @flag_folder
172
+ end
173
+ @has_mount = true
174
+ end
175
+
176
+ def umount
177
+ exec_cmd "umount #{@tmp_folder_name}"
178
+ while true
179
+ break unless File.directory? @flag_folder
180
+ end
181
+ exec_cmd "rm -rf #{@tmp_folder_name}"
182
+ end
183
+
184
+ def exec_cmd(cmd)
185
+ system cmd
186
+ end
187
+
188
+ ## 检测用户电脑上是否存在 ifuse
189
+ def ifuse_exist?
190
+ exec_cmd('ifuse -h > /dev/null 2>&1')
191
+ end
192
+
193
+ end
194
+
195
+ end
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: utf-8
3
+ #
4
+ # Author:: hanyu
5
+ # Date:: 2009.12.3
6
+
7
+ # ruby的json库因为只处理utf-8字符,我们用起来很不方便
8
+ # 所以我们使用的是 ruby-json 库
9
+ # 必须 gem install ruby-json
10
+ require 'json'
11
+
12
+ module JsonHelper
13
+
14
+ # === 功能:
15
+ # 封装对JSON的解析
16
+ #
17
+ # === 参数解释:
18
+ # - str JSON字符串
19
+ #
20
+ # === Example:
21
+ # Example #1:
22
+ # puts ({"fs"=>"非技术","xv"=>[3,4,{3=>4},"飞拉萨"],4=>5}).to_json
23
+ # #=> {"fs":"非技术","xv":[3,4,{"3":4},"飞拉萨"],"4":5}
24
+ #
25
+ # h = parse_json('{"fjsl":"方式来快递费",243:42,"ha":[3,4,"方式来开发","fs"],"非技术":"附件"}')
26
+ # p h
27
+ # #=> {"fjsl"=>"方式来快递费", "243"=>42, "ha"=>[3, 4, "方式来开发", "fs"], "非技术"=>"附件"}
28
+ def parse_json(str)
29
+ JSON.parse(str)
30
+ end
31
+ alias from_json parse_json
32
+ alias decode_json parse_json
33
+
34
+ # === 功能:
35
+ # 将对象转成json字符串
36
+ # 本来是不需要的,为了与parse_json对称,特意加的
37
+ def to_json(obj)
38
+ obj.to_json
39
+ end
40
+ alias encode_json to_json
41
+
42
+ end
43
+
@@ -0,0 +1,168 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: utf-8
3
+ #
4
+ # Author:: yzm
5
+ # Date:: 2016-03-25 19:41:22 +0800
6
+ ###########################################
7
+
8
+
9
+
10
+ # 封装mtop结果mock的核心模块
11
+ module MockHelper
12
+
13
+ include JsonHelper
14
+ include ISandBoxHelper
15
+
16
+ # === 功能:
17
+ # 用于alitrip客户端mock数据,推送mock数据到手机,可多次调用,不会冲掉之前的mock
18
+ # === 参数解释:
19
+ # what 此处填string内容/此处填PC上数据文件的路径/Hash
20
+ # === Example:
21
+ # Example #1:
22
+ # mock 'string content'
23
+ # Example #2:
24
+ # mock /filepath/on/PC
25
+ def start_mock(what, fn=nil)
26
+
27
+ system 'adb shell dumpsys activity top trip start mtop_mock_response > /dev/null 2>&1'
28
+ mobile_mock_folder = '/mnt/sdcard/AlitripMockData/'
29
+
30
+ if what.class == String
31
+ begin
32
+ json_data = JSON.parse what.dup
33
+ fail 'api is missing' if (json_data['api'].nil? and fn.nil?)
34
+ if fn
35
+ file_name = fn
36
+ else
37
+ file_name = json_data['api'] + '.json'
38
+ end
39
+
40
+ data = what.to_s
41
+ rescue
42
+ begin
43
+ data = IO.read(what.to_s)
44
+ json_data = JSON.parse data
45
+ fail 'api is missing' if (json_data['api'].nil? and fn.nil?)
46
+ if fn
47
+ file_name = fn
48
+ else
49
+ file_name = json_data['api'] + '.json'
50
+ end
51
+
52
+ rescue
53
+ raise Exception, 'file not exist'
54
+ end
55
+ end
56
+ elsif what.is_a? Hash
57
+ fail 'api is missing' if (what['api'].nil? and fn.nil?)
58
+
59
+ data = what.to_json.to_s
60
+
61
+ if fn
62
+ file_name = fn
63
+ else
64
+ file_name = data['api'] + '.json'
65
+ end
66
+
67
+ end
68
+
69
+ mock_path = mobile_mock_folder + file_name
70
+ begin
71
+ tmp_file = '.mockFile'
72
+ File.open(tmp_file, "w+") do |file|
73
+ file.puts data
74
+ end
75
+ system "adb push #{tmp_file} #{mock_path} > /dev/null 2>&1"
76
+ rescue
77
+ raise Exception, "error:#{$!} at:#{$@}"
78
+ ensure
79
+ system "rm -rf #{tmp_file} > /dev/null 2>&1"
80
+ end
81
+ #
82
+ # push_file mock_path, data
83
+
84
+ end
85
+
86
+ # === 功能:
87
+ # 删除mock数据,只需要调用一次,建议在teardown中调用
88
+ # === 参数解释:
89
+ #
90
+ # === Example:
91
+ # Example #1:
92
+ #
93
+ #
94
+ def stop_mock()
95
+ system 'adb shell dumpsys activity top trip stop mtop_mock_response > /dev/null 2>&1'
96
+ system 'adb shell rm -rf /sdcard/AlitripMockData'
97
+ end
98
+
99
+ # === 功能:
100
+ # iPhone mock数据关键字,可多次调用,不会冲掉上次的mock
101
+ # === 参数解释:
102
+ # what 此处填string内容/此处填PC上数据文件的路径/Hash
103
+ # === Example:
104
+ # Example #1:
105
+ #
106
+ #
107
+ def istart_mock(what, fn=nil)
108
+ @mobile_mock_folder = '/tmp/mtopmock'
109
+ if what.class == String
110
+ begin
111
+ json_data = JSON.parse what.dup
112
+ data = what.to_s
113
+ fail 'api is missing' if json_data['api'].nil?
114
+ if fn
115
+ file_name = fn
116
+ else
117
+ file_name = json_data['api']
118
+ end
119
+
120
+ ipush_data @mobile_mock_folder, data, file_name
121
+ rescue
122
+ begin
123
+ if File.file? what.to_s
124
+ data = IO.read(what.to_s)
125
+ json_data = JSON.parse(data)
126
+ fail 'api is missing' if json_data['api'].nil?
127
+ if fn
128
+ file_name = fn
129
+ else
130
+ file_name = json_data['api']
131
+ end
132
+
133
+ ipush_data @mobile_mock_folder, data, file_name
134
+ else
135
+ fail 'content is illegal'
136
+ end
137
+ rescue
138
+ raise Exception, "error:#{$!} at:#{$@}"
139
+ end
140
+
141
+ end
142
+ elsif what.is_a? Hash
143
+ fail 'api is missing' if what['api'].nil?
144
+ data = what.to_json.to_s
145
+ if fn
146
+ file_name = fn
147
+ else
148
+ file_name = what['api']
149
+ end
150
+
151
+ ipush_data @mobile_mock_folder, data, file_name
152
+ end
153
+ end
154
+
155
+ # === 功能:
156
+ # iPhone 删除mock文件,停止mock数据关键字,只需调用一次,建议在teardown中调用
157
+ # === 参数解释:
158
+ #
159
+ # === Example:
160
+ # Example #1:
161
+ #
162
+ #
163
+ def istop_mock
164
+ @mobile_mock_folder = '/tmp/mtopmock'
165
+ iremove_file @mobile_mock_folder
166
+ end
167
+
168
+ end