testrail-rspec 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9e16041a770eed00286369886e6109acccab1ead3a44cfdb1078cd1605920368
4
+ data.tar.gz: 1f0d38bcce60ef9c7e092db496cd37873824073465baeba07759df968f01904a
5
+ SHA512:
6
+ metadata.gz: 7deaa1684832970b626fc5622dcb69950ae6d219cf169897ccba4e2486edf3d6eb5761507e0eec54d3d227158cf7110b207a26bab1e60466688eeaf56995cd67
7
+ data.tar.gz: df634941c512d418c3c07a8fa20b38386a3fe048c0645552a2a3aa476435cfad93221b30cd33f67c6615e8baf6b9dfb6500be0f28b95a5ce057ec13f9166d07c
@@ -0,0 +1,106 @@
1
+ #
2
+ # TestRail API binding for Ruby (API v2, available since TestRail 3.0)
3
+ #
4
+ # Learn more:
5
+ #
6
+ # http://docs.gurock.com/testrail-api2/start
7
+ # http://docs.gurock.com/testrail-api2/accessing
8
+ #
9
+ # Copyright Gurock Software GmbH. See license.md for details.
10
+ #
11
+
12
+ require 'net/http'
13
+ require 'net/https'
14
+ require 'uri'
15
+ require 'json'
16
+
17
+ module TestRail
18
+ class APIClient
19
+ @url = ''
20
+ @user = ''
21
+ @password = ''
22
+
23
+ attr_accessor :user
24
+ attr_accessor :password
25
+
26
+ def initialize(base_url)
27
+ if !base_url.match(/\/$/)
28
+ base_url += '/'
29
+ end
30
+ @url = base_url + 'index.php?/api/v2/'
31
+ end
32
+
33
+ #
34
+ # Send Get
35
+ #
36
+ # Issues a GET request (read) against the API and returns the result
37
+ # (as Ruby hash).
38
+ #
39
+ # Arguments:
40
+ #
41
+ # uri The API method to call including parameters
42
+ # (e.g. get_case/1)
43
+ #
44
+ def send_get(uri)
45
+ _send_request('GET', uri, nil)
46
+ end
47
+
48
+ #
49
+ # Send POST
50
+ #
51
+ # Issues a POST request (write) against the API and returns the result
52
+ # (as Ruby hash).
53
+ #
54
+ # Arguments:
55
+ #
56
+ # uri The API method to call including parameters
57
+ # (e.g. add_case/1)
58
+ # data The data to submit as part of the request (as
59
+ # Ruby hash, strings must be UTF-8 encoded)
60
+ #
61
+ def send_post(uri, data)
62
+ _send_request('POST', uri, data)
63
+ end
64
+
65
+ private
66
+ def _send_request(method, uri, data)
67
+ url = URI.parse(@url + uri)
68
+ if method == 'POST'
69
+ request = Net::HTTP::Post.new(url.path + '?' + url.query)
70
+ request.body = JSON.dump(data)
71
+ else
72
+ request = Net::HTTP::Get.new(url.path + '?' + url.query)
73
+ end
74
+ request.basic_auth(@user, @password)
75
+ request.add_field('Content-Type', 'application/json')
76
+
77
+ conn = Net::HTTP.new(url.host, url.port)
78
+ if url.scheme == 'https'
79
+ conn.use_ssl = true
80
+ conn.verify_mode = OpenSSL::SSL::VERIFY_NONE
81
+ end
82
+ response = conn.request(request)
83
+
84
+ if response.body && !response.body.empty?
85
+ result = JSON.parse(response.body)
86
+ else
87
+ result = {}
88
+ end
89
+
90
+ if response.code != '200'
91
+ if result && result.key?('error')
92
+ error = '"' + result['error'] + '"'
93
+ else
94
+ error = 'No additional error message received'
95
+ end
96
+ raise APIError.new('TestRail API returned HTTP %s (%s)' %
97
+ [response.code, error])
98
+ end
99
+
100
+ result
101
+ end
102
+ end
103
+
104
+ class APIError < StandardError
105
+ end
106
+ end
@@ -0,0 +1,72 @@
1
+ require_relative 'api-client'
2
+
3
+ module TestrailRSpec
4
+ class UpdateTestRails
5
+ attr_accessor :client
6
+
7
+ def initialize(scenario)
8
+ @scenario = scenario
9
+
10
+ if File.exist? './testrail_config.yml'
11
+ @config = YAML.load_file("./testrail_config.yml")['testrail']
12
+ raise 'TestRail configuration file not loaded successfully' if @config.nil?
13
+ else
14
+ raise 'TestRail configuration file is required'
15
+ end
16
+
17
+ setup_testrail_client
18
+ end
19
+
20
+ def upload_result
21
+
22
+ response = {}
23
+ case_id = @scenario.metadata[:description].split(' ').first.scan(/\d+/).first rescue nil
24
+
25
+ status_id = get_status_id 'passed'.to_sym if @scenario.exception == nil
26
+ status_id = get_status_id 'failed'.to_sym if @scenario.exception != nil
27
+ run_id = @config['run_id']
28
+
29
+ if case_id && run_id
30
+ response = client.send_post(
31
+ "add_result_for_case/#{run_id}/#{case_id}",
32
+ { status_id: status_id }
33
+ )
34
+ else
35
+ raise 'unable to get case id or run id'
36
+ end
37
+
38
+ response
39
+ end
40
+
41
+ def fetch_status_ids
42
+ client.send_get('get_statuses')
43
+ end
44
+
45
+ private
46
+
47
+ def setup_testrail_client
48
+ @client = TestRail::APIClient.new(@config['url'])
49
+ @client.user = @config['user']
50
+ @client.password = @config['password']
51
+ end
52
+
53
+ def get_status_id(status)
54
+ case status
55
+ when :passed
56
+ 1
57
+ when :blocked
58
+ 2
59
+ when :untested
60
+ 3
61
+ when :retest
62
+ 4
63
+ when :failed
64
+ 5
65
+ when :undefined
66
+ raise 'missing step definition'
67
+ else
68
+ raise 'unexpected scenario status passed'
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,3 @@
1
+ module TestrailRspec
2
+ VERSION = '0.1.0'.freeze
3
+ end
@@ -0,0 +1,3 @@
1
+ require 'testrail-rspec/api-client'
2
+ require 'testrail-rspec/update-testrails'
3
+ require 'testrail-rspec/version'
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: testrail-rspec
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Prashanth Sams
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-07-23 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ - sams.prashanth@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/testrail-rspec.rb
21
+ - lib/testrail-rspec/api-client.rb
22
+ - lib/testrail-rspec/update-testrails.rb
23
+ - lib/testrail-rspec/version.rb
24
+ homepage:
25
+ licenses:
26
+ - MIT
27
+ metadata:
28
+ documentation_uri: https://www.rubydoc.info/github/prashanth-sams/testrail-rspec/master
29
+ source_code_uri: https://github.com/prashanth-sams/testrail-rspec
30
+ bug_tracker_uri: https://github.com/prashanth-sams/testrail-rspec/issues
31
+ post_install_message:
32
+ rdoc_options: []
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubygems_version: 3.0.4
47
+ signing_key:
48
+ specification_version: 4
49
+ summary: Sync Rspec test results with your testrail suite
50
+ test_files: []