testrailtagging 0.3.8.3 → 0.3.8.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 255ff6aaa6d669963a11e5f9238368685285b6e7
4
- data.tar.gz: e429dc94325ba160713b5a4804d5293100f2e109
3
+ metadata.gz: af7c34382755322b02544cb166a43b304a37e6b5
4
+ data.tar.gz: 3ff0363f332f5144430cd08cf9c9eba4be717c07
5
5
  SHA512:
6
- metadata.gz: 058a42733aa3d316d73f4cc74668e3b300622f308c25cb8025b0fc00b95f01c867b0981e43ad0a40f1511f9788e23c24ed62130d4d3a151235a5ede7d90bb8be
7
- data.tar.gz: ce4d61d0d2ee53baa3f992475ea0d7183f9d56bf76e1e93afb90175d1693812311335c9b7bbb0c32bbdf0f04787d9e3d1e7b8834440abd5f2ff32af334896b3b
6
+ metadata.gz: 64a8c220b778ab6e8f6c634a7bb893576d6fe4211c36207d5338a75f2b6094edb8885f937788a0bebae20bc32c61f828421458de60d6e3d6f95951538462d340
7
+ data.tar.gz: f124e7cb3756f6779f50d2845302675a71c836ff9e2d3e0ee178481355218cd0a860380d79b75824a7c459c3545e7fe252a2e62f4f8e072152f54cf759b1711d
data/README.md CHANGED
@@ -46,6 +46,14 @@ Then you set an environment variable called TESTRAIL_RUN_ID, with that value. Fo
46
46
 
47
47
  `export TESTRAIL_RUN_ID=14153`
48
48
 
49
+ You can also set an optional environment variable to report results in batches, rather than after each test
50
+ case.
51
+ This helps reduce traffic to Testrail and also provides less flakiness in results not being posted when
52
+ something slow down testrail. To do this, add the following variable and set it to whatever number of test
53
+ case results you'd like to have posted at a time:
54
+
55
+ `TESTRAIL_BATCH_SIZE=15`
56
+
49
57
  Next, in your RSpec configuration file (usually spec_helper.rb) you need to call a registration function:
50
58
 
51
59
 
@@ -22,6 +22,8 @@ module TestRailRSpecIntegration
22
22
  class TestRailPlanFormatter
23
23
  RSpec::Core::Formatters.register self, :example_passed, :example_pending, :example_failed, :start, :stop
24
24
  public
25
+ @@cases = []
26
+
25
27
  def initialize(out)
26
28
  @out = out
27
29
  end
@@ -30,6 +32,10 @@ module TestRailRSpecIntegration
30
32
  @@product = product
31
33
  end
32
34
 
35
+ def set_test_run_id(run_id)
36
+ @@run_id = run_id
37
+ end
38
+
33
39
  def test_id_key
34
40
  case @@product
35
41
  when :bridge
@@ -66,6 +72,14 @@ module TestRailRSpecIntegration
66
72
  end
67
73
  end
68
74
 
75
+ # Initialize the batch size for test rail batching based on environment variable.
76
+ # One test is the default, in case people don't want to batch or haven't provided the variable.
77
+ if !ENV["TESTRAIL_BATCH_SIZE"].nil?
78
+ @batch_size = ENV["TESTRAIL_BATCH_SIZE"]
79
+ else
80
+ @batch_size = 1
81
+ end
82
+
69
83
  # Pull down ALL the test cases from testrail. Granted this is more than what rspec will actually
70
84
  # execute. But there is no safe way to append a test case to a test run in a parallel environment.
71
85
  # The Testrail API is just too limited.
@@ -76,9 +90,14 @@ module TestRailRSpecIntegration
76
90
  puts "Count of tests to be run: #{TestRailRSpecIntegration.get_run_count}"
77
91
  puts "Count of tests that entered filter: #{TestRailRSpecIntegration.get_total_count}"
78
92
 
93
+ puts "Batching test results in groups of #{@batch_size}"
79
94
  @test_case_hash = TestRailOperations.get_test_run_cases(@testrail_run_id)
80
95
  # save the test case ID's that were actually executed
81
96
  @executed_test_ids = []
97
+
98
+ # Need a class variable for after suite hooks to post results,
99
+ # since the after suite hooks are defined outside the class
100
+ set_test_run_id(@testrail_run_id)
82
101
  end
83
102
 
84
103
  # This gets called after all tests are run
@@ -108,8 +127,8 @@ module TestRailRSpecIntegration
108
127
  return unless active
109
128
  example = notification.example
110
129
  result = example.execution_result
111
-
112
130
  testrail_ids = example.metadata[test_id_key]
131
+
113
132
  return unless testrail_ids.present?
114
133
  completion_message = ""
115
134
 
@@ -120,21 +139,28 @@ module TestRailRSpecIntegration
120
139
  completion_message.gsub!(/\[(\d)+m/, '')
121
140
  end
122
141
 
123
- cases = [] # the test cases
124
142
  Array(testrail_ids).each do |id|
125
143
  tc = @test_case_hash[id.to_i]
126
144
  next unless tc # A test case ID exists in the rspec file, but not on testrail
127
145
  tc.set_status(result.status, completion_message)
128
- cases << tc
146
+ @@cases << tc
129
147
  @executed_test_ids << id.to_i
130
148
  end
131
149
 
132
- post_results cases
150
+ # Batches together test cases before posting. Relies on environment variable TESTRAIL_BATCH_SIZE to determine
151
+ # batch size.
152
+ # Relies on an 'after suite' hook to capture and post results for any number of remaining test cases less
153
+ # than the batch size
154
+ if @@cases.size >= @batch_size.to_i
155
+ TestRailPlanFormatter.post_results @@cases
156
+ @@cases.clear
157
+ end
133
158
  end
134
159
 
135
160
  # test_cases is an array of TestCase instances
136
- def post_results(test_cases)
161
+ def self.post_results(test_cases)
137
162
  data = []
163
+
138
164
  test_cases.each do |tc|
139
165
 
140
166
  status_value = TestRailOperations.status_rspec_to_testrail(tc.status)
@@ -156,11 +182,11 @@ module TestRailRSpecIntegration
156
182
  end
157
183
 
158
184
  if data.size > 0
159
- TestRailOperations.post_run_results(@testrail_run_id, data)
185
+ TestRailOperations.post_run_results(@@run_id, data)
160
186
  test_case_ids = test_cases.collect { |tc| tc.id }
161
- @out.puts "Successfully posted results for testcases: #{test_case_ids} to test run: #{@testrail_run_id}"
187
+ puts "Successfully posted results for testcases: #{test_case_ids} to test run: #{@@run_id}"
162
188
  else
163
- @out.puts "No results sent to test rail"
189
+ puts "No results sent to test rail"
164
190
  end
165
191
  end
166
192
 
@@ -169,6 +195,7 @@ module TestRailRSpecIntegration
169
195
  alias_method :example_failed, :example_finished
170
196
 
171
197
  private
198
+
172
199
  # For pushing results up to a test plan in TestRail.
173
200
  def is_for_test_rail_plan
174
201
  !ENV["TESTRAIL_RUN"].nil? && !ENV["TESTRAIL_PLAN_ID"].nil? && !ENV["TESTRAIL_ENTRY_ID"].nil? && !ENV["TESTRAIL_ENTRY_RUN_ID"].nil?
@@ -370,6 +397,15 @@ module TestRailRSpecIntegration
370
397
  if add_formatter
371
398
  TestRailRSpecIntegration.add_formatter_for(config)
372
399
  end
400
+
401
+ # Captures and posts results for any remaining test case results in @@cases that don't fill a full batch
402
+ config.after(:suite) do |suite|
403
+ total_cases = TestRailPlanFormatter.class_variable_get(:@@cases)
404
+
405
+ if total_cases.size > 0
406
+ TestRailRSpecIntegration::TestRailPlanFormatter.post_results total_cases
407
+ end
408
+ end
373
409
  end
374
410
 
375
411
  # Registers a callback custom formatter to an rspec. The new test run is created from
data/lib/files/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Testrailtagging
2
- VERSION = "0.3.8.3"
2
+ VERSION = "0.3.8.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: testrailtagging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8.3
4
+ version: 0.3.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Johnson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-01-17 00:00:00.000000000 Z
11
+ date: 2018-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
125
  version: '0'
126
126
  requirements: []
127
127
  rubyforge_project:
128
- rubygems_version: 2.4.5.1
128
+ rubygems_version: 2.5.2.3
129
129
  signing_key:
130
130
  specification_version: 4
131
131
  summary: Utilities for working with testrail.