actir 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/actir/parallel_tests/cli.rb +8 -3
- data/lib/actir/parallel_tests/report/html_formatter.rb +10 -10
- data/lib/actir/parallel_tests/report/html_reporter.rb +3 -2
- data/lib/actir/parallel_tests/test/{re_run.rb → rerunner.rb} +19 -10
- data/lib/actir/parallel_tests/test/result.rb +141 -0
- data/lib/actir/parallel_tests/test/runner.rb +4 -42
- data/lib/actir/version.rb +1 -1
- metadata +23 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63484bd91244d1e657e19c9675c8a22169c8b2a4
|
4
|
+
data.tar.gz: 13554f3aaee561ebbe17d5db9024ff503e460bf8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35a527b6b952aef0c789e4d9293dfeec17a5e7b4df8cdf45c2bb60a62cd0d034ef1c1043861dcd2f942eb6c1cea0955644a91d90f7792f811cd2832f30fda5e2
|
7
|
+
data.tar.gz: a65b3aeae8c43de758746b78060c4cf73845bd54aa13a616558e5c43f7eabb0478dc5768446c27ab743ad5966d4c22bfcacfeee3e2318365eea64b739d0dd882
|
@@ -82,7 +82,7 @@ module Actir
|
|
82
82
|
result = run_tests(group, p_num, num_processes, options, address[p_num])
|
83
83
|
#从结果中取出失败用例重跑
|
84
84
|
if ( result[:exit_status] != 0 ) && ( re_run_times > 0 )
|
85
|
-
result =
|
85
|
+
result = re_run_tests(result, p_num, num_processes, options, address[p_num], re_run_times)
|
86
86
|
end
|
87
87
|
result
|
88
88
|
end
|
@@ -106,6 +106,10 @@ module Actir
|
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
|
+
def re_run_tests(result, process_number, num_processes, options, address, re_run_times)
|
110
|
+
Actir::ParallelTests::Test::Rerunner.re_run_tests(result, process_number, num_processes, options, address, re_run_times)
|
111
|
+
end
|
112
|
+
|
109
113
|
def report_output(result, lock)
|
110
114
|
lock.flock File::LOCK_EX
|
111
115
|
$stdout.puts result[:stdout]
|
@@ -268,8 +272,9 @@ module Actir
|
|
268
272
|
|
269
273
|
def load_runner(type)
|
270
274
|
require "actir/parallel_tests/#{type}/runner"
|
271
|
-
require "actir/parallel_tests/#{type}/
|
272
|
-
require "actir/parallel_tests/
|
275
|
+
require "actir/parallel_tests/#{type}/rerunner"
|
276
|
+
require "actir/parallel_tests/#{type}/logger"
|
277
|
+
require "actir/parallel_tests/#{type}/result"
|
273
278
|
runner_classname = type.split("_").map(&:capitalize).join.sub("Rspec", "RSpec")
|
274
279
|
klass_name = "Actir::ParallelTests::#{runner_classname}::Runner"
|
275
280
|
klass_name.split('::').inject(Object) { |x, y| x.const_get(y) }
|
@@ -18,7 +18,7 @@ module Actir
|
|
18
18
|
def print_testsuite_start(testsuite_id, testsuite_name)
|
19
19
|
@file.puts "<div id=\"div_testsuite_#{testsuite_id}\" class=\"testsuite passed\">"
|
20
20
|
@file.puts " <dl>"
|
21
|
-
@file.puts " <dt id=\"testsuite_#{testsuite_id}\" class=\"passed\"
|
21
|
+
@file.puts " <dt id=\"testsuite_#{testsuite_id}\" class=\"passed\">[Testsuite]: #{h(testsuite_name)}</dt>"
|
22
22
|
end
|
23
23
|
|
24
24
|
def print_testsuite_end
|
@@ -28,14 +28,14 @@ module Actir
|
|
28
28
|
|
29
29
|
def print_testcase_passed(testcase_name)
|
30
30
|
@file.puts " <dd class=\"testcase passed\">"
|
31
|
-
@file.puts " <span class=\"passed_spec_name\"
|
31
|
+
@file.puts " <span class=\"passed_spec_name\">[Testcase]: #{h(testcase_name)}</span>"
|
32
32
|
@file.puts " </dd>"
|
33
33
|
end
|
34
34
|
|
35
35
|
def print_testcase_failed(testcase_name, backtrace, failure_number)
|
36
36
|
@file.puts " <dd class=\"testcase failed\">"
|
37
|
-
@file.puts " <span class=\"failed_spec_name\"
|
38
|
-
@file.puts " <div id=\"
|
37
|
+
@file.puts " <span class=\"failed_spec_name\">[testcase]: #{h(testcase_name)}</span>"
|
38
|
+
@file.puts " <div id=\"testtab_#{failure_number}\" style=\"float:right\"><a class=\"expand\" href=\"#\" onClick=\"Effect('failure_#{failure_number}',this.parentNode.id);\" >+</a> </div>"
|
39
39
|
@file.puts " <div class=\"failure\" id=\"failure_#{failure_number}\" style=\"display:none;\">"
|
40
40
|
@file.puts " <div class=\"backtrace\"><pre>#{h(backtrace)}</pre></div>"
|
41
41
|
@file.puts " </div>"
|
@@ -44,7 +44,7 @@ module Actir
|
|
44
44
|
|
45
45
|
def print_summary(testcase_count, failure_count)
|
46
46
|
totals = "#{testcase_count} testcase#{'s' unless testcase_count == 1}, "
|
47
|
-
totals << "#{failure_count} failure#{'s' unless failure_count
|
47
|
+
totals << "#{failure_count} failure#{'s' unless failure_count <= 1 }"
|
48
48
|
|
49
49
|
# formatted_duration = "%.5f" % duration
|
50
50
|
|
@@ -82,7 +82,7 @@ module Actir
|
|
82
82
|
|
83
83
|
<div id="test-header">
|
84
84
|
<div id="label">
|
85
|
-
<h1>Test
|
85
|
+
<h1>UI-Test Report</h1>
|
86
86
|
</div>
|
87
87
|
|
88
88
|
<div id="display-filters">
|
@@ -215,7 +215,7 @@ EOF
|
|
215
215
|
|
216
216
|
GLOBAL_STYLES = <<-EOF
|
217
217
|
#test-header {
|
218
|
-
background: #
|
218
|
+
background: #03b401; color: #fff; height: 4em;
|
219
219
|
}
|
220
220
|
|
221
221
|
.test-report h1 {
|
@@ -265,7 +265,7 @@ dl {
|
|
265
265
|
|
266
266
|
dt {
|
267
267
|
padding: 3px;
|
268
|
-
background: #
|
268
|
+
background: #03b401;
|
269
269
|
color: #fff;
|
270
270
|
font-weight: bold;
|
271
271
|
}
|
@@ -283,8 +283,8 @@ dd .duration {
|
|
283
283
|
}
|
284
284
|
|
285
285
|
dd.testcase.passed {
|
286
|
-
border-left: 5px solid #
|
287
|
-
border-bottom: 1px solid #
|
286
|
+
border-left: 5px solid #03b401;
|
287
|
+
border-bottom: 1px solid #03b401;
|
288
288
|
background: #DBFFB4; color: #3D7700;
|
289
289
|
}
|
290
290
|
|
@@ -24,7 +24,8 @@ module Actir
|
|
24
24
|
testsuite_print(testsuite)
|
25
25
|
end
|
26
26
|
|
27
|
-
summary = {:testcase_count => @testcase_number,
|
27
|
+
summary = {:testcase_count => @testcase_number,
|
28
|
+
:failure_count => @failure_number}
|
28
29
|
summary_print(summary)
|
29
30
|
end
|
30
31
|
|
@@ -39,7 +40,7 @@ module Actir
|
|
39
40
|
@formatter.print_testsuite_start(@testsuite_number, testsuite[:testsuite_name])
|
40
41
|
testcases = testsuite[:testcases]
|
41
42
|
testcases.each do |testcase|
|
42
|
-
if(testcase[:
|
43
|
+
if(testcase[:success] == true)
|
43
44
|
testcase_passed_print(testcase[:testcase_name])
|
44
45
|
else
|
45
46
|
testcase_failed_print(testcase[:testcase_name], testcase[:detail])
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Actir
|
2
2
|
module ParallelTests
|
3
3
|
module Test
|
4
|
-
class
|
4
|
+
class Rerunner < Runner
|
5
5
|
|
6
6
|
class << self
|
7
7
|
|
@@ -75,6 +75,10 @@ module Actir
|
|
75
75
|
log_str = "[re_run_tests]: \n" + result[:stdout]
|
76
76
|
Actir::ParallelTests::Test::Logger.log(log_str, process_number)
|
77
77
|
end
|
78
|
+
|
79
|
+
#从result中获取执行结果用于生成测试报告
|
80
|
+
Actir::ParallelTests::Test::Result.get_testsuite_detail(result, :rerunner)
|
81
|
+
|
78
82
|
return result
|
79
83
|
end
|
80
84
|
|
@@ -86,11 +90,11 @@ module Actir
|
|
86
90
|
testfile = ""
|
87
91
|
result_array.each do |result|
|
88
92
|
#取出执行失败的用例文件名称和用例名称
|
89
|
-
|
90
|
-
when failure_tests_name_reg
|
93
|
+
if (result =~ failure_tests_name_reg) || (result =~ error_tests_name_reg)
|
91
94
|
#范例:"testhehe(TestHehe)"
|
92
95
|
testcase = $1
|
93
|
-
|
96
|
+
end
|
97
|
+
if result =~ failure_tests_file_reg
|
94
98
|
#范例:"testcode/test_tt/test_hehe.rb:8:in `xxxx'"
|
95
99
|
testfile = $1
|
96
100
|
end
|
@@ -126,18 +130,23 @@ module Actir
|
|
126
130
|
|
127
131
|
#判断是否有用例失败
|
128
132
|
def any_test_failed?(result)
|
129
|
-
result
|
133
|
+
Actir::ParallelTests::Test::Result.any_test_failed?(result)
|
130
134
|
end
|
131
135
|
|
132
|
-
|
133
|
-
def
|
134
|
-
|
135
|
-
#/^Loaded\ssuite\s(.+)/
|
136
|
+
#获取错误用例名的正则
|
137
|
+
def error_tests_name_reg
|
138
|
+
Actir::ParallelTests::Test::Result.error_tests_name_reg
|
136
139
|
end
|
137
140
|
|
138
141
|
#获取失败用例名的正则
|
139
142
|
def failure_tests_name_reg
|
140
|
-
|
143
|
+
Actir::ParallelTests::Test::Result.failure_tests_name_reg
|
144
|
+
end
|
145
|
+
|
146
|
+
#获取失败用例文件名的正则
|
147
|
+
def failure_tests_file_reg
|
148
|
+
/(.+\/test.+rb):\d+:in\s`.+'/
|
149
|
+
#/^Loaded\ssuite\s(.+)/
|
141
150
|
end
|
142
151
|
|
143
152
|
#获取失败数据的正则
|
@@ -0,0 +1,141 @@
|
|
1
|
+
module Actir
|
2
|
+
module ParallelTests
|
3
|
+
module Test
|
4
|
+
class Result
|
5
|
+
|
6
|
+
class << self
|
7
|
+
|
8
|
+
#
|
9
|
+
# 通过结果判断测试套的详细信息
|
10
|
+
#
|
11
|
+
# 将测试套和测试用例的详细信息写入全局变量$testsuites中
|
12
|
+
#
|
13
|
+
def get_testsuite_detail(test_result, mode = :runner)
|
14
|
+
$testsuites = [] unless $testsuites
|
15
|
+
if mode == :runner
|
16
|
+
get_run_test_info(test_result)
|
17
|
+
end
|
18
|
+
|
19
|
+
#如果有用例失败,则记录详细信息,否则不需要
|
20
|
+
if any_test_failed?(test_result)
|
21
|
+
failure_detail_hash = get_testfailed_detail(test_result)
|
22
|
+
$testsuites.each do |testsuite|
|
23
|
+
testcases = testsuite[:testcases]
|
24
|
+
testcases.each do |testcase|
|
25
|
+
#标识用例是否执行失败
|
26
|
+
fail_flag = 0
|
27
|
+
failure_detail_hash.each do |testcase_failure, detail|
|
28
|
+
if testcase_failure == testcase[:testcase_name]
|
29
|
+
testcase[:success] = false
|
30
|
+
testcase[:detail] = detail
|
31
|
+
fail_flag = 1
|
32
|
+
#从hash表中移除
|
33
|
+
failure_detail_hash.delete(testcase_failure)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
if fail_flag == 0
|
37
|
+
testcase[:success] = true
|
38
|
+
testcase[:detail] = nil
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_run_test_info(test_result)
|
46
|
+
output = test_result[:stdout]
|
47
|
+
output.scan(/^(\[suite start\])([^\.]*)(\[suite end\])$/).each do |suite|
|
48
|
+
suitename = suite[1].scan(/^(suitname:\s*)([\d\w]*)/)[0][1]
|
49
|
+
cases = suite[1].scan(/^(testcase:\s*)([\d\w]*)/).inject([]) do |cases,testcase|
|
50
|
+
cases << {:testcase_name => testcase[1], :success => true, :detail => nil}
|
51
|
+
end
|
52
|
+
# 如果testsuites中已存在此用例的信息,说明这个用例执行了rerun,就不再次添加了
|
53
|
+
is_case_exist = $testsuites.inject(false) do |is_case_exist, testsuite|
|
54
|
+
if testsuite.has_value?(suitename)
|
55
|
+
is_case_exist = true
|
56
|
+
break
|
57
|
+
end
|
58
|
+
is_case_exist
|
59
|
+
end
|
60
|
+
if(is_case_exist == false)
|
61
|
+
testsuite = {:testsuite_name => suitename, :testcases =>cases}
|
62
|
+
$testsuites << testsuite
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
#
|
68
|
+
# 通过结果判断失败用例,获取失败用例的详细信息
|
69
|
+
#
|
70
|
+
# 将测试套和测试用例的详细信息写入全局变量$testsuites中
|
71
|
+
#
|
72
|
+
def get_testfailed_detail(test_result)
|
73
|
+
result_array = test_result[:stdout].split("\n")
|
74
|
+
failure_detail_hash = {}
|
75
|
+
testcase = ""
|
76
|
+
detail = ""
|
77
|
+
record_detail_switch = 0
|
78
|
+
|
79
|
+
result_array.each do |result|
|
80
|
+
record_detail_switch = 0 if result =~ failure_or_error_switch_off
|
81
|
+
#遇到错误信息,开启记录错误信息开关
|
82
|
+
record_detail_switch = 1 if result =~failure_or_error_switch_on
|
83
|
+
|
84
|
+
if record_detail_switch == 1
|
85
|
+
detail += result + "\n"
|
86
|
+
end
|
87
|
+
|
88
|
+
if (result =~ failure_tests_name_reg) || (result =~ error_tests_name_reg)
|
89
|
+
testcase = $1
|
90
|
+
end
|
91
|
+
|
92
|
+
if testcase != "" && detail != "" && record_detail_switch == 0
|
93
|
+
failure_detail_hash[testcase] = detail
|
94
|
+
testcase = ""
|
95
|
+
detail = ""
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
failure_detail_hash
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
|
104
|
+
#判断是否有用例失败
|
105
|
+
def any_test_failed?(result)
|
106
|
+
result[:exit_status] != 0
|
107
|
+
end
|
108
|
+
|
109
|
+
#获取错误用例名的正则
|
110
|
+
def error_tests_name_reg
|
111
|
+
/^Error:\s(test.+)\(.+\):/
|
112
|
+
end
|
113
|
+
|
114
|
+
#获取失败用例名的正则
|
115
|
+
def failure_tests_name_reg
|
116
|
+
/^Failure:\s(test.+)\(.+\)/
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_info_swtich_on
|
120
|
+
/^\[suite start\]/
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_info_swtich_off
|
124
|
+
/^\[suite end\]/
|
125
|
+
end
|
126
|
+
|
127
|
+
def failure_or_error_switch_on
|
128
|
+
/^Failure:|^Error:/
|
129
|
+
end
|
130
|
+
|
131
|
+
def failure_or_error_switch_off
|
132
|
+
/^===============================================================================$/
|
133
|
+
end
|
134
|
+
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
@@ -48,6 +48,10 @@ module Actir
|
|
48
48
|
log_str = "[run_tests]: \n" + result[:stdout]
|
49
49
|
Actir::ParallelTests::Test::Logger.log(log_str, process_number)
|
50
50
|
end
|
51
|
+
|
52
|
+
#从result中获取执行结果用于生成测试报告
|
53
|
+
Actir::ParallelTests::Test::Result.get_testsuite_detail(result)
|
54
|
+
|
51
55
|
result
|
52
56
|
end
|
53
57
|
|
@@ -97,13 +101,6 @@ module Actir
|
|
97
101
|
end.join(separator)
|
98
102
|
cmd = "#{exports}#{separator}#{cmd}"
|
99
103
|
output = open("|#{cmd}", "r") { |output| capture_output(output, silence) }
|
100
|
-
|
101
|
-
#modify by shanmao
|
102
|
-
#获取执行的测试套详细信息
|
103
|
-
get_testsuite_detail(output)
|
104
|
-
#获取失败的用例的详情
|
105
|
-
get_testfailed_detail(output)
|
106
|
-
|
107
104
|
#modify by Hub
|
108
105
|
#exitstatus = $?.exitstatus
|
109
106
|
#"$?.exitstatus" 返回的值有时有问题,不能明确标示用例执行结果是否成功
|
@@ -147,41 +144,6 @@ module Actir
|
|
147
144
|
end
|
148
145
|
end
|
149
146
|
|
150
|
-
#
|
151
|
-
# 通过结果判断测试套的详细信息
|
152
|
-
# 将测试套和测试用例的详细信息写入全局变量$testsuites中
|
153
|
-
#
|
154
|
-
def get_testsuite_detail output
|
155
|
-
$testsuites = [] unless $testsuites
|
156
|
-
output.scan(/^(\[suite start\])([^\.][^E]*)(\[suite end\])$/).each do |suite|
|
157
|
-
suitename = suite[1].scan(/^(suitname:\s*)([\d\w]*)/)[0][1]
|
158
|
-
cases = suite[1].scan(/^(testcase:\s*)([\d\w]*)/).inject([]) do |cases,testcase|
|
159
|
-
cases << {:testcase_name => testcase[1], :succuss => true, :detail => nil}
|
160
|
-
end
|
161
|
-
# 如果testsuites中已存在此用例的信息,说明这个用例执行了rerun,就不再次添加了
|
162
|
-
is_case_exist = $testsuites.inject(false) do |is_case_exist, testsuite|
|
163
|
-
if testsuite.has_value?(suitename)
|
164
|
-
is_case_exist = true
|
165
|
-
break
|
166
|
-
end
|
167
|
-
is_case_exist
|
168
|
-
end
|
169
|
-
if(is_case_exist == false)
|
170
|
-
testsuite = {:testsuite_name => suitename, :testcases =>cases}
|
171
|
-
$testsuites << testsuite
|
172
|
-
end
|
173
|
-
end
|
174
|
-
# p $testsuites
|
175
|
-
end
|
176
|
-
|
177
|
-
#
|
178
|
-
# 通过结果判断失败用例,获取失败用例的详细信息
|
179
|
-
# 将测试套和测试用例的详细信息写入全局变量$testsuites中
|
180
|
-
#
|
181
|
-
def get_testfailed_detail output
|
182
|
-
|
183
|
-
end
|
184
|
-
|
185
147
|
#
|
186
148
|
# 通过结果判断是否有用例失败
|
187
149
|
# 返回失败用例的数目
|
data/lib/actir/version.rb
CHANGED
metadata
CHANGED
@@ -1,111 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: actir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hub
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-unit
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: watir-webdriver
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.6.11
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.6.11
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: selenium-webdriver
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '2.45'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '2.45'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: parallel
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '1.4'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.4'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: facets
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '2.9'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '2.9'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: bundler
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - ~>
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '1.7'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - ~>
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '1.7'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rake
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - ~>
|
101
|
+
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '10.0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - ~>
|
108
|
+
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '10.0'
|
111
111
|
description: Distribut automated testing framework for Web or App.
|
@@ -117,8 +117,8 @@ executables:
|
|
117
117
|
extensions: []
|
118
118
|
extra_rdoc_files: []
|
119
119
|
files:
|
120
|
-
- .gitignore
|
121
|
-
- .travis.yml
|
120
|
+
- ".gitignore"
|
121
|
+
- ".travis.yml"
|
122
122
|
- CODE_OF_CONDUCT.md
|
123
123
|
- Gemfile
|
124
124
|
- README.md
|
@@ -139,7 +139,8 @@ files:
|
|
139
139
|
- lib/actir/parallel_tests/report/html_formatter.rb
|
140
140
|
- lib/actir/parallel_tests/report/html_reporter.rb
|
141
141
|
- lib/actir/parallel_tests/test/logger.rb
|
142
|
-
- lib/actir/parallel_tests/test/
|
142
|
+
- lib/actir/parallel_tests/test/rerunner.rb
|
143
|
+
- lib/actir/parallel_tests/test/result.rb
|
143
144
|
- lib/actir/parallel_tests/test/runner.rb
|
144
145
|
- lib/actir/remote.rb
|
145
146
|
- lib/actir/script/cookies_baidu.rb
|
@@ -159,17 +160,17 @@ require_paths:
|
|
159
160
|
- lib
|
160
161
|
required_ruby_version: !ruby/object:Gem::Requirement
|
161
162
|
requirements:
|
162
|
-
- -
|
163
|
+
- - ">="
|
163
164
|
- !ruby/object:Gem::Version
|
164
165
|
version: '0'
|
165
166
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
167
|
requirements:
|
167
|
-
- -
|
168
|
+
- - ">="
|
168
169
|
- !ruby/object:Gem::Version
|
169
170
|
version: '0'
|
170
171
|
requirements: []
|
171
172
|
rubyforge_project:
|
172
|
-
rubygems_version: 2.4.
|
173
|
+
rubygems_version: 2.4.3
|
173
174
|
signing_key:
|
174
175
|
specification_version: 4
|
175
176
|
summary: Application Concurrence Test in Ruby.
|