class TestrailCucumber::UpdateTestRails
Attributes
client[RW]
Public Class Methods
new(scenario)
click to toggle source
# File lib/testrail-cucumber/update-testrails.rb, line 7 def initialize(scenario) @scenario = scenario if File.exist? './testrail_config.yml' @config = YAML.load_file("./testrail_config.yml")['testrail'] @config = @config.transform_values do |e| if e.class != Integer && e.to_s.include?('ENV[') eval(e) else e end end raise 'TestRail configuration file not loaded successfully' if @config.nil? else raise 'TestRail configuration file is required' end return if [@config['allow'].nil?, @config['allow']].all? false setup_testrail_client config_validator if $config_validator.nil? end
Public Instance Methods
fetch_status_ids()
click to toggle source
# File lib/testrail-cucumber/update-testrails.rb, line 55 def fetch_status_ids client.send_get('get_statuses') end
upload_result()
click to toggle source
# File lib/testrail-cucumber/update-testrails.rb, line 30 def upload_result return if [@config['allow'].nil?, @config['allow']].all? false response = {} case_list = [] @scenario.name.split(' ').map do |e| val = e.scan(/\d+/).first next if val.nil? case_list << val end return if case_list.empty? status_id = get_status_id @scenario.status @run_id ||= @config['run_id'] @run_id = @@run_id rescue @@run_id = nil unless @config['run_id'] @run_id = @@run_id = client.create_test_run("add_run/#{@config['project_id']}", { "suite_id": @config['suite_id']}) if @run_id.nil? case_list.map do |case_id| response = client.send_post("add_result_for_case/#{@run_id}/#{case_id}",{ status_id: status_id }) warn("\n###################### \ninvalid #case_id: #{case_id} \n######################") if (response.nil? || response['error'] != nil) && (response.class != Integer) end response end
Private Instance Methods
check_avail(label, id)
click to toggle source
# File lib/testrail-cucumber/update-testrails.rb, line 105 def check_avail(label, id) case label when :project_id warn("\n###################### \ninvalid #project_id: #{id} \n######################") if client.send_get("get_project/#{id}").nil? || client.send_get("get_project/#{id}")['error'] != nil when :suite_id warn("\n###################### \ninvalid #suite_id: #{id} \n######################") if client.send_get("get_suite/#{id}").nil? || client.send_get("get_suite/#{id}")['error'] != nil when :run_id warn("\n###################### \ninvalid #run_id: #{id} \n######################") if client.send_get("get_run/#{id}").nil? || client.send_get("get_run/#{id}")['error'] != nil else p "no config available" end end
cleaner()
click to toggle source
# File lib/testrail-cucumber/update-testrails.rb, line 97 def cleaner test_run_list = client.send_get("get_runs/#{@config['project_id']}") test_run_list.map do |list| next if !@config['skip_testrun_ids'].nil? && @config['skip_testrun_ids'].to_s.delete(' ').split(',').any?(list['id'].to_s) client.send_post("delete_run/#{list['id']}", {"suite_id": @config['suite_id']}) end end
config_validator()
click to toggle source
# File lib/testrail-cucumber/update-testrails.rb, line 67 def config_validator config_hash = {:project_id => @config['project_id'], :suite_id => @config['suite_id'], :run_id => @config['run_id']} config_hash.map do |key, value| next if value.nil? check_avail(key, value) end cleaner if [@config['project_id'], @config['clean_testrun'], @config['run_id'].nil?].all? $config_validator = true end
get_status_id(status)
click to toggle source
# File lib/testrail-cucumber/update-testrails.rb, line 78 def get_status_id(status) case status when :passed 1 when :blocked 2 when :untested 3 when :retest 4 when :failed 5 when :undefined raise 'missing step definition' else raise 'unexpected scenario status passed' end end
setup_testrail_client()
click to toggle source
# File lib/testrail-cucumber/update-testrails.rb, line 61 def setup_testrail_client @client = TestRail::APIClient.new(@config['url']) @client.user = @config['user'] @client.password = @config['password'] end