itriagetestrail 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/itriagetestrail/pool.rb +0 -2
- data/lib/itriagetestrail/testrail_binding.rb +4 -4
- data/lib/itriagetestrail/version.rb +1 -1
- data/lib/itriagetestrail.rb +98 -87
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e4b34fc68615740cb5247064b7635c603149c7e
|
4
|
+
data.tar.gz: 08b07991a0d6917d176e1fe72f209e3f2527ff18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ef107f0a6f489c7d4bab0f85ccc176d124316ab9dce714a6667b81990a890e63b97fe3e6ac8d66cb591d1b61179dac96da9db8b4ee30aa3aa23e245b2c94e55
|
7
|
+
data.tar.gz: 443c46a032847a4779671bd61e82696d28b130b92cc536f4d66b793f5ab4548f4752a6938005504b548c675106fc9000df0bc69e8cd90383901151083aae48a6
|
data/lib/itriagetestrail/pool.rb
CHANGED
@@ -24,9 +24,8 @@ module TestRail
|
|
24
24
|
attr_accessor :password
|
25
25
|
|
26
26
|
def initialize(base_url)
|
27
|
-
|
28
|
-
|
29
|
-
end
|
27
|
+
valid_regex = %r{/\/$/}
|
28
|
+
base_url += '/' unless valid_regex.match(base_url)
|
30
29
|
@url = base_url + 'index.php?/api/v2/'
|
31
30
|
end
|
32
31
|
|
@@ -63,6 +62,7 @@ module TestRail
|
|
63
62
|
end
|
64
63
|
|
65
64
|
private
|
65
|
+
|
66
66
|
def make_connection(url)
|
67
67
|
conn = Net::HTTP.new(url.host, url.port)
|
68
68
|
if url.scheme == 'https'
|
@@ -105,7 +105,7 @@ module TestRail
|
|
105
105
|
error = 'No additional error message received'
|
106
106
|
end
|
107
107
|
|
108
|
-
|
108
|
+
fail APIError, "TestRail API returned HTTP #{response.code} #{error}"
|
109
109
|
end
|
110
110
|
result
|
111
111
|
end
|
data/lib/itriagetestrail.rb
CHANGED
@@ -1,29 +1,34 @@
|
|
1
|
-
require
|
2
|
-
require_relative
|
3
|
-
require_relative
|
4
|
-
#require 'testrail-rails'
|
5
|
-
|
1
|
+
require 'itriagetestrail/version'
|
2
|
+
require_relative 'itriagetestrail/testrail_binding'
|
3
|
+
require_relative 'itriagetestrail/pool'
|
6
4
|
|
7
5
|
module Itriagetestrail
|
8
6
|
class TestRailInterface
|
9
|
-
# code goes here...
|
10
7
|
attr_accessor :client
|
11
8
|
attr_accessor :sections
|
12
9
|
attr_accessor :test_cases
|
13
10
|
attr_accessor :test_case_ids
|
14
11
|
attr_accessor :run_id
|
15
12
|
attr_accessor :execute
|
16
|
-
attr_reader :results
|
17
|
-
attr_reader :external_results
|
18
13
|
attr_accessor :pool
|
19
14
|
attr_accessor :batch_size
|
15
|
+
attr_reader :results
|
16
|
+
attr_reader :external_results
|
20
17
|
|
21
|
-
def initialize(
|
18
|
+
def initialize(testrail_config, origin)
|
22
19
|
@run_id = 0
|
23
20
|
@setup = false
|
24
21
|
@testrail_config = testrail_config
|
25
22
|
@project_id = @testrail_config['project_id']
|
26
|
-
@
|
23
|
+
@milestone_name = normalize_milestone(origin)
|
24
|
+
|
25
|
+
if @testrail_config['send_local_results?'] && @milestone_name == 'Local'
|
26
|
+
@execute = true
|
27
|
+
elsif @milestone_name == 'Local'
|
28
|
+
@execute = false
|
29
|
+
else
|
30
|
+
@execute = true
|
31
|
+
end
|
27
32
|
end
|
28
33
|
|
29
34
|
def setup?
|
@@ -47,6 +52,8 @@ module Itriagetestrail
|
|
47
52
|
# Get the test rail ids
|
48
53
|
testrail_ids
|
49
54
|
|
55
|
+
@milestone_id = fetch_milestone(@milestone_name)
|
56
|
+
|
50
57
|
add_testrail_run
|
51
58
|
|
52
59
|
@pool = Pool.new(1)
|
@@ -67,25 +74,52 @@ module Itriagetestrail
|
|
67
74
|
|
68
75
|
def testrail_section_id(section_title)
|
69
76
|
res = -1
|
70
|
-
@sections.each
|
77
|
+
@sections.each do |section|
|
78
|
+
res = section['id'] if section['name'] == section_title
|
79
|
+
end
|
80
|
+
res
|
81
|
+
end
|
71
82
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
83
|
+
def normalize_milestone(origin)
|
84
|
+
case origin
|
85
|
+
when 'local', ''
|
86
|
+
'Local'
|
87
|
+
when 'master'
|
88
|
+
'Master'
|
89
|
+
else
|
90
|
+
'Dev Branch'
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def fetch_milestone(requested_milestone_name)
|
95
|
+
milestones = @client.send_get("get_milestones/#{@project_id}")
|
96
|
+
res = -1
|
97
|
+
milestones.each do |milestone|
|
98
|
+
res = milestone['id'] if milestone['name'] == requested_milestone_name
|
99
|
+
end
|
100
|
+
|
101
|
+
if res == -1
|
102
|
+
# We need to add the milestone to TestRail
|
103
|
+
|
104
|
+
body = {
|
105
|
+
name: requested_milestone_name
|
106
|
+
}
|
107
|
+
|
108
|
+
res = @client.send_post("add_milestone/#{@project_id}", body)['id']
|
109
|
+
end
|
76
110
|
res
|
77
111
|
end
|
78
112
|
|
79
113
|
def add_testrail_section(section_title)
|
80
114
|
body = {
|
81
|
-
:
|
115
|
+
name: section_title
|
82
116
|
}
|
83
117
|
|
84
118
|
res = @client.send_post("add_section/#{@project_id}", body)
|
85
119
|
|
86
120
|
testrail_section = res['id']
|
87
121
|
|
88
|
-
#re-establish sections
|
122
|
+
# re-establish sections
|
89
123
|
testrail_sections
|
90
124
|
|
91
125
|
testrail_section
|
@@ -93,68 +127,65 @@ module Itriagetestrail
|
|
93
127
|
|
94
128
|
# TestRail Cases
|
95
129
|
def testrail_ids
|
96
|
-
|
97
130
|
@test_cases = @client.send_get("get_cases/#{@project_id}&type_id=3")
|
98
131
|
|
99
132
|
@test_case_ids = []
|
100
133
|
|
101
|
-
@test_cases.each { |test_case| @test_case_ids <<
|
134
|
+
@test_cases.each { |test_case| @test_case_ids << test_case['id'] }
|
102
135
|
end
|
103
136
|
|
104
137
|
def testrail_test_case_id(external_id)
|
105
|
-
|
106
138
|
res = -1
|
107
|
-
@test_cases.each
|
108
|
-
|
139
|
+
@test_cases.each do |test_case|
|
109
140
|
if test_case['custom_external_case_id'] == external_id
|
110
141
|
res = test_case['id']
|
111
142
|
end
|
112
|
-
|
143
|
+
end
|
113
144
|
res
|
114
145
|
end
|
115
146
|
|
116
147
|
def associate_result(external_id)
|
117
|
-
|
118
148
|
test_case_id = testrail_test_case_id(external_id)
|
119
|
-
#store the test case id with the local result
|
120
|
-
@results[:results].each
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
149
|
+
# store the test case id with the local result
|
150
|
+
@results[:results].each do |result|
|
151
|
+
next unless result['external_id'] == external_id
|
152
|
+
@external_results['results'] << { case_id: test_case_id,
|
153
|
+
status_id: result['status_id'],
|
154
|
+
comment: result['comment'] }
|
155
|
+
end
|
126
156
|
end
|
127
157
|
|
128
158
|
# add the test case if it doesn't exist
|
129
159
|
def add_testrail_test_case(scenario_title, external_id, scenario_steps, section_id)
|
130
160
|
body = {
|
131
|
-
:
|
132
|
-
:
|
133
|
-
:
|
134
|
-
:
|
161
|
+
title: scenario_title,
|
162
|
+
custom_external_case_id: external_id,
|
163
|
+
custom_steps: scenario_steps,
|
164
|
+
type_id: 3
|
135
165
|
}
|
136
166
|
|
137
167
|
@client.send_post("add_case/#{section_id}", body)
|
138
168
|
|
139
|
-
#refresh test case ids
|
169
|
+
# refresh test case ids
|
140
170
|
testrail_ids
|
141
171
|
end
|
142
172
|
|
143
173
|
# open a test run to submit test results
|
144
174
|
def add_testrail_run
|
145
|
-
|
146
|
-
if @testrail_config['include_all?'] then
|
175
|
+
if @testrail_config['include_all?']
|
147
176
|
|
148
177
|
body = {
|
149
|
-
:
|
150
|
-
:
|
178
|
+
name: "POC Regression on #{Time.zone.now}",
|
179
|
+
include_all: true,
|
180
|
+
milestone_id: @milestone_id
|
151
181
|
}
|
152
182
|
else
|
153
183
|
|
154
184
|
body = {
|
155
|
-
:
|
156
|
-
:
|
157
|
-
:
|
185
|
+
name: "POC Regression on #{Time.zone.now}",
|
186
|
+
include_all: false,
|
187
|
+
case_ids: @test_case_ids,
|
188
|
+
milestone_id: @milestone_id
|
158
189
|
}
|
159
190
|
end
|
160
191
|
|
@@ -164,79 +195,59 @@ module Itriagetestrail
|
|
164
195
|
end
|
165
196
|
|
166
197
|
def send_results_to_testrail
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
send = {:
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
res = @client.send_post("add_results_for_cases/#{@run_id}", send)
|
178
|
-
puts res
|
179
|
-
rescue Exception => e
|
180
|
-
raise e
|
181
|
-
end
|
182
|
-
# end
|
183
|
-
|
184
|
-
# @results[:results] = @results[:results] - send[:results]
|
198
|
+
return unless @results[:results].size == 0
|
199
|
+
# copy what is in the results
|
200
|
+
@submitted[:results] << @results[:results]
|
201
|
+
|
202
|
+
begin
|
203
|
+
send = { results: @results[:results] }
|
204
|
+
res = @client.send_post("add_results_for_cases/#{@run_id}", send)
|
205
|
+
puts res
|
206
|
+
rescue StandardError => e
|
207
|
+
raise e
|
185
208
|
end
|
186
209
|
end
|
187
210
|
|
188
211
|
def update_test_suite(scenario_title, external_id, scenario_steps)
|
189
|
-
|
190
|
-
# establish variables
|
191
|
-
#@external_id = result['external_id']
|
192
|
-
|
193
212
|
feature = external_id.split(';')[0]
|
194
213
|
|
195
214
|
section_id = testrail_section_id(feature)
|
196
215
|
|
197
|
-
#if the testrail section does not exist, update sections
|
198
|
-
if section_id == -1
|
216
|
+
# if the testrail section does not exist, update sections
|
217
|
+
section_id = add_testrail_section(feature) if section_id == -1
|
199
218
|
|
200
|
-
|
201
|
-
end
|
202
|
-
|
203
|
-
#if the testrail case does not exist, update cases
|
219
|
+
# if the testrail case does not exist, update cases
|
204
220
|
if testrail_test_case_id(external_id) == -1
|
205
221
|
|
206
|
-
|
222
|
+
# @scenario_title = result['scenario_title']
|
207
223
|
|
208
224
|
add_testrail_test_case(scenario_title, external_id, scenario_steps, section_id)
|
209
225
|
sleep 1
|
210
226
|
end
|
211
227
|
|
212
|
-
#store the case id associated with the external_id
|
228
|
+
# store the case id associated with the external_id
|
213
229
|
associate_result(external_id)
|
214
230
|
end
|
215
231
|
|
216
|
-
|
217
232
|
def store_result(scenario_title, external_id, scenario_steps, status_id, comment)
|
218
|
-
|
219
233
|
update_test_suite scenario_title, external_id, scenario_steps
|
220
234
|
|
221
235
|
case_id = testrail_test_case_id(external_id)
|
222
236
|
|
223
|
-
@results[:results] << {
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
237
|
+
@results[:results] << {
|
238
|
+
case_id: case_id,
|
239
|
+
scenario_title: scenario_title,
|
240
|
+
external_id: external_id,
|
241
|
+
scenario_steps: scenario_steps,
|
242
|
+
status_id: status_id,
|
243
|
+
comment: comment
|
244
|
+
}
|
231
245
|
end
|
232
246
|
|
233
247
|
def shutdown
|
234
248
|
@pool.shutdown
|
235
249
|
|
236
|
-
if @testrail_config['close_run?']
|
237
|
-
@client.send_post("close_run/#{@run_id}", {})
|
238
|
-
end
|
250
|
+
@client.send_post("close_run/#{@run_id}", {}) if @testrail_config['close_run?']
|
239
251
|
end
|
240
|
-
|
241
252
|
end
|
242
253
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itriagetestrail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- a801069
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|