cukerail 0.6.4 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/cukerail.rb +0 -1
- data/lib/cukerail/testrail.rb +1 -1
- data/lib/cukerail/version.rb +1 -1
- data/lib/junit_sender.rb +76 -0
- data/lib/tasks/junit.rake +22 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79c53868c8db18616e0ae5bc4dc9d9a46f3b3952
|
4
|
+
data.tar.gz: ad501cb97cac693991fd4f2eb9733f01f5e37f24
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd0882992340a8342fa62b4ab31a40c37508e6172e06ee738860cc13908101a4cc847699d9754039423510a863ca4c9f5f9d1465ca4d5cac640fd396114b3580
|
7
|
+
data.tar.gz: 974b68e15999fc11fa565595cac85829c4644090d13450de562071677b1d6ed36ba30107e87fdb07af0d61ab18555a2b50cefd906d633dbdcc48504b643dfd3d
|
data/lib/cukerail.rb
CHANGED
@@ -66,7 +66,6 @@ module Cukerail
|
|
66
66
|
project_id = /\d+/.match(tags.select{|tag| tag.name =~/project/}.last.name)[0]
|
67
67
|
suite_id = /\d+/.match(tags.select{|tag| tag.name =~/suite/}.last.name)[0]
|
68
68
|
section_id = /\d+/.match(tags.select{|tag| tag.name =~/sub_section/}.last.name)[0]
|
69
|
-
puts section_id
|
70
69
|
title = extract_title(test_case)
|
71
70
|
found_case = testrail_api_client.send_get("get_cases/#{project_id}&suite_id=#{suite_id}§ion_id=#{section_id}").select{|c| c['title'] == title}.first
|
72
71
|
if found_case
|
data/lib/cukerail/testrail.rb
CHANGED
@@ -68,7 +68,7 @@ module TestRail
|
|
68
68
|
|
69
69
|
private
|
70
70
|
def _send_request(method, uri, data)
|
71
|
-
Retriable.retriable multiplier: 3 do
|
71
|
+
Retriable.retriable multiplier: 3,tries: 5 do
|
72
72
|
url = URI.parse(@url + uri)
|
73
73
|
if method == 'POST'
|
74
74
|
request = Net::HTTP::Post.new(url.path + '?' + url.query)
|
data/lib/cukerail/version.rb
CHANGED
data/lib/junit_sender.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
require_relative "cukerail/version"
|
2
|
+
require_relative "cukerail/testrail"
|
3
|
+
require 'awesome_print'
|
4
|
+
module Cukerail
|
5
|
+
|
6
|
+
class JunitSender
|
7
|
+
attr_reader :testrail_api_client,:results,:project_id,:suite_id,:testcases,:run_id
|
8
|
+
def initialize(junit_file)
|
9
|
+
if %w(BASE_URL USER PASSWORD).map{|e| ENV["TESTRAIL_#{e}"]}.any?{|e| e=='' || !e}
|
10
|
+
raise 'You need to setup Testrail environment parameters see https://bbcworldwide.atlassian.net/wiki/display/BAR/Installing+and+Running+Cukerail'
|
11
|
+
end
|
12
|
+
@project_id = ENV['PROJECT_ID']
|
13
|
+
@suite_id = ENV['SUITE_ID']
|
14
|
+
@testrail_api_client = TestRail::APIClient.new(ENV['TESTRAIL_BASE_URL'],ENV['TESTRAIL_USER'],ENV['TESTRAIL_PASSWORD'])
|
15
|
+
@results = Nokogiri::XML(File.read(junit_file))
|
16
|
+
@testcases = Hash.new
|
17
|
+
@run_id = ENV['TESTRUN']
|
18
|
+
end
|
19
|
+
|
20
|
+
def load
|
21
|
+
results.children.each do |child|
|
22
|
+
recurse_down(child)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def recurse_down(element,level=0,parent_id=nil)
|
27
|
+
element.children.select{|n| n.name=='testcase'}.each do |testcase|
|
28
|
+
case_id = get_testcase_id(testcase,parent_id)
|
29
|
+
report_result(case_id,testcase) if run_id
|
30
|
+
end
|
31
|
+
element.children.select{|n| n.name=='testsuite'}.each do |testsuite|
|
32
|
+
section_id = get_section_id(testsuite,parent_id) if testsuite.attributes['name'].value.size > 0
|
33
|
+
recurse_down(testsuite,level+1,(section_id || parent_id))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def get_section_id(testsuite,parent_id=nil)
|
38
|
+
section = sections.detect{|s| s['name'] == testsuite.attributes['name'].value}
|
39
|
+
unless section
|
40
|
+
section = testrail_api_client.send_post("add_section/#{project_id}",{suite_id:suite_id,name:testsuite.attributes['name'].value,parent_id:parent_id})
|
41
|
+
sections << section
|
42
|
+
end
|
43
|
+
section['id']
|
44
|
+
end
|
45
|
+
|
46
|
+
def sections
|
47
|
+
@all_sections ||= get_sections
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_sections
|
51
|
+
sections = testrail_api_client.send_get("get_sections/#{project_id}&suite_id=#{suite_id}")
|
52
|
+
end
|
53
|
+
|
54
|
+
def get_testcase_id(testcase,section_id)
|
55
|
+
unless testcases[section_id]
|
56
|
+
testcases[section_id] = testrail_api_client.send_get("get_cases/#{project_id}&suite_id=#{suite_id}§ion_id=#{section_id}")
|
57
|
+
end
|
58
|
+
unless testcases[section_id].detect{|tc| tc['title'] == testcase.attributes['name'].value}
|
59
|
+
new_tc = testrail_api_client.send_post("add_case/#{section_id}",{title:testcase.attributes['name'].value,type_id:1})
|
60
|
+
testcases[section_id] << new_tc
|
61
|
+
end
|
62
|
+
testcases[section_id].detect{|tc| tc['title'] == testcase.attributes['name'].value}['id']
|
63
|
+
end
|
64
|
+
|
65
|
+
def report_result(case_id,testcase)
|
66
|
+
if testcase.children.any?{|c| c.name=='failure'}
|
67
|
+
failure_text = testcase.children.select{|c| c.name=='failure'}.map{|c| c.text}.join("\n")
|
68
|
+
result = {status_id: 5,comment: failure_text}
|
69
|
+
else
|
70
|
+
result = {status_id: 1,comment: 'passed'}
|
71
|
+
end
|
72
|
+
testrail_api_client.send_post("add_result_for_case/#{run_id}/#{case_id}",result)
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative '../junit_sender'
|
2
|
+
desc "load Junit style xml results into test suite,FILE=results_file, PROJECT_ID=X, SUITE_ID=Y, optional SUB_SECTION=Z"
|
3
|
+
task :load_junit_results_to_test_suite do
|
4
|
+
check_command_line_parameters_are_present
|
5
|
+
junit = Cukerail::JunitSender.new(ENV['FILE'])
|
6
|
+
junit.load
|
7
|
+
end
|
8
|
+
|
9
|
+
desc "load Junit style xml results into tesrun,FILE=results_file, PROJECT_ID=X, SUITE_ID=Y, optional SUB_SECTION=Z, TESTRUN=A"
|
10
|
+
task :load_junit_results_to_test_run do
|
11
|
+
check_command_line_parameters_are_present
|
12
|
+
raise 'TESTRUN is required' unless ENV['TESTRUN']
|
13
|
+
junit = Cukerail::JunitSender.new(ENV['FILE'])
|
14
|
+
junit.load
|
15
|
+
end
|
16
|
+
|
17
|
+
def check_command_line_parameters_are_present
|
18
|
+
raise 'PROJECT_ID is required' unless ENV['PROJECT_ID']
|
19
|
+
raise 'SUITE_ID is required' unless ENV['SUITE_ID']
|
20
|
+
raise 'SUB_SECTION is required' unless ENV['SUB_SECTION']
|
21
|
+
raise 'FILE is required' unless ENV['FILE']
|
22
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cukerail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Small
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cucumber
|
@@ -142,7 +142,9 @@ files:
|
|
142
142
|
- lib/cukerail/testrail.rb
|
143
143
|
- lib/cukerail/version.rb
|
144
144
|
- lib/json_sender.rb
|
145
|
+
- lib/junit_sender.rb
|
145
146
|
- lib/tasks/cukerail.rake
|
147
|
+
- lib/tasks/junit.rake
|
146
148
|
- spec/cukerail_spec.rb
|
147
149
|
- spec/spec_helper.rb
|
148
150
|
homepage: ''
|