taf 0.3.7 → 0.3.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/taf +23 -2
- data/lib/taf.rb +48 -0
- data/lib/taf/browser.rb +103 -0
- data/lib/taf/cmd_line.rb +74 -0
- data/lib/taf/create_directories.rb +53 -0
- data/lib/taf/json_parser.rb +48 -0
- data/lib/taf/junit_report.rb +73 -0
- data/lib/taf/my_log.rb +21 -0
- data/lib/taf/parser.rb +37 -0
- data/lib/taf/report.rb +110 -0
- data/lib/taf/report_summary.rb +56 -0
- data/lib/taf/screenshot.rb +30 -0
- data/lib/taf/test_engine.rb +82 -0
- data/lib/taf/test_steps.rb +38 -0
- data/lib/taf/test_steps/handlers/base.rb +90 -0
- data/lib/taf/test_steps/handlers/base/browser_back.rb +21 -0
- data/lib/taf/test_steps/handlers/base/browser_forward.rb +21 -0
- data/lib/taf/test_steps/handlers/base/browser_open.rb +21 -0
- data/lib/taf/test_steps/handlers/base/browser_quit.rb +21 -0
- data/lib/taf/test_steps/handlers/base/browser_refresh.rb +21 -0
- data/lib/taf/test_steps/handlers/base/capture_alert.rb +22 -0
- data/lib/taf/test_steps/handlers/base/check_box.rb +22 -0
- data/lib/taf/test_steps/handlers/base/check_boxdata.rb +35 -0
- data/lib/taf/test_steps/handlers/base/check_browser_title.rb +21 -0
- data/lib/taf/test_steps/handlers/base/check_logs.rb +25 -0
- data/lib/taf/test_steps/handlers/base/check_screendata.rb +23 -0
- data/lib/taf/test_steps/handlers/base/check_url.rb +22 -0
- data/lib/taf/test_steps/handlers/base/click_button.rb +33 -0
- data/lib/taf/test_steps/handlers/base/execute_system_command.rb +23 -0
- data/lib/taf/test_steps/handlers/base/handle_browser_window.rb +23 -0
- data/lib/taf/test_steps/handlers/base/ipause.rb +21 -0
- data/lib/taf/test_steps/handlers/base/list_all_dropdowns_values.rb +23 -0
- data/lib/taf/test_steps/handlers/base/login.rb +59 -0
- data/lib/taf/test_steps/handlers/base/open_url.rb +22 -0
- data/lib/taf/test_steps/handlers/base/ping_test.rb +27 -0
- data/lib/taf/test_steps/handlers/base/radio_button.rb +24 -0
- data/lib/taf/test_steps/handlers/base/select_dropdown.rb +24 -0
- data/lib/taf/test_steps/handlers/base/send_special_keys.rb +22 -0
- data/lib/taf/test_steps/handlers/base/write_box_data.rb +35 -0
- data/lib/taf/version.rb +5 -0
- metadata +41 -43
- data/lib/functions/handlers.rb +0 -6
- data/lib/functions/handlers/base_handler.rb +0 -91
- data/lib/functions/handlers/browser_back.rb +0 -21
- data/lib/functions/handlers/browser_forward.rb +0 -21
- data/lib/functions/handlers/browser_quit.rb +0 -21
- data/lib/functions/handlers/browser_refresh.rb +0 -21
- data/lib/functions/handlers/capture_alert.rb +0 -22
- data/lib/functions/handlers/check_box.rb +0 -21
- data/lib/functions/handlers/check_boxdata.rb +0 -35
- data/lib/functions/handlers/check_browser_title.rb +0 -21
- data/lib/functions/handlers/check_logs.rb +0 -23
- data/lib/functions/handlers/check_screendata.rb +0 -21
- data/lib/functions/handlers/check_url.rb +0 -22
- data/lib/functions/handlers/click_button.rb +0 -33
- data/lib/functions/handlers/execute_system_command.rb +0 -23
- data/lib/functions/handlers/handle_browser_window.rb +0 -23
- data/lib/functions/handlers/ipause.rb +0 -21
- data/lib/functions/handlers/list_all_dropdowns_values.rb +0 -23
- data/lib/functions/handlers/login.rb +0 -59
- data/lib/functions/handlers/open_url.rb +0 -35
- data/lib/functions/handlers/ping_test.rb +0 -27
- data/lib/functions/handlers/radio_button.rb +0 -22
- data/lib/functions/handlers/select_dropdown.rb +0 -24
- data/lib/functions/handlers/send_special_keys.rb +0 -22
- data/lib/functions/handlers/write_box_data.rb +0 -35
- data/lib/main.rb +0 -31
- data/lib/parser/json_parser.rb +0 -50
- data/lib/parser/parser.rb +0 -49
- data/lib/report/junit_report.rb +0 -74
- data/lib/report/report.rb +0 -116
- data/lib/report/report_summary.rb +0 -53
- data/lib/taf_config.rb +0 -46
- data/lib/utils/browser.rb +0 -98
- data/lib/utils/cmd_line.rb +0 -71
- data/lib/utils/create_directories.rb +0 -50
- data/lib/utils/exceptions.rb +0 -7
- data/lib/utils/logger.rb +0 -21
- data/lib/utils/screenshot.rb +0 -30
- data/lib/utils/test_engine.rb +0 -77
- data/lib/utils/test_steps.rb +0 -38
- data/lib/version.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fdf9086f0e77fd7b425360f96cd7ce31eb009af1108cbaf87f2db5074741a247
|
4
|
+
data.tar.gz: b1d008e6ad5536addcfb8968581f5c161d751a4e98688d6f435d2b39fd9cb66b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1983aa74c176c657c4aa4ebf13f49ef401f084f369f738a923102fe3d72cacc4fe054e63fba75fd7557c37739791d906c05a437ea9b0739b916a5ee2a2b3489
|
7
|
+
data.tar.gz: c4062ab7558b5591d8ac095f7f17d1d881d2a2abc56cc29090046732e4a33dfbb25cabe6312e59cf0d402ed7767dcf1f17802d690d7864beef4fe93052ea3746
|
data/bin/taf
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require '
|
5
|
-
|
4
|
+
require 'taf'
|
5
|
+
|
6
|
+
# parses the cmd line imput into the taf
|
7
|
+
Taf::CMDLine.cmdline_input
|
8
|
+
|
9
|
+
# get the overall test suite end time
|
10
|
+
ts_start_time = Taf::Report.current_time
|
11
|
+
|
12
|
+
# process the test files to execute the tests
|
13
|
+
total_passes, total_failures, total_skipped =
|
14
|
+
Taf::TestEngine.process_testfiles
|
15
|
+
total_metrics = [total_passes, total_failures, total_skipped]
|
16
|
+
# get the overall test suite end time
|
17
|
+
ts_end_time = Taf::Report.current_time
|
18
|
+
|
19
|
+
# output the overall test summary
|
20
|
+
Taf::ReportSummary.overall_test_summary(ts_start_time, ts_end_time,
|
21
|
+
total_metrics)
|
22
|
+
Taf::JUnitReport.test_summary_junit(ts_start_time, ts_end_time,
|
23
|
+
total_metrics)
|
24
|
+
|
25
|
+
# Exit status code.
|
26
|
+
Process.exit(total_failures.zero? ? 0 : 1)
|
data/lib/taf.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Taf is the main namespace for this project.
|
4
|
+
module Taf
|
5
|
+
class TafError < StandardError; end
|
6
|
+
class UnknownTestStep < TafError; end
|
7
|
+
class FailureThresholdExceeded < TafError; end
|
8
|
+
class BrowserFailedOpen < TafError; end
|
9
|
+
class LoginTypeFailed < TafError; end
|
10
|
+
|
11
|
+
require 'selenium-webdriver'
|
12
|
+
require 'watir'
|
13
|
+
require 'rubygems'
|
14
|
+
require 'fileutils'
|
15
|
+
require 'logger'
|
16
|
+
require 'net/ping'
|
17
|
+
require 'nokogiri'
|
18
|
+
require 'time_difference'
|
19
|
+
require 'colored'
|
20
|
+
require 'optparse'
|
21
|
+
require 'fileutils'
|
22
|
+
require 'securerandom'
|
23
|
+
require 'json'
|
24
|
+
|
25
|
+
require 'taf/browser'
|
26
|
+
require 'taf/cmd_line'
|
27
|
+
require 'taf/create_directories'
|
28
|
+
require 'taf/json_parser'
|
29
|
+
require 'taf/junit_report'
|
30
|
+
require 'taf/my_log'
|
31
|
+
require 'taf/parser'
|
32
|
+
require 'taf/report'
|
33
|
+
require 'taf/report_summary'
|
34
|
+
require 'taf/screenshot'
|
35
|
+
require 'taf/test_engine'
|
36
|
+
require 'taf/test_steps'
|
37
|
+
require 'taf/test_steps/handlers/base'
|
38
|
+
require 'taf/version'
|
39
|
+
|
40
|
+
# Load all handlers.
|
41
|
+
Dir[File.expand_path('taf/test_steps/handlers/base/*.rb', __dir__)]
|
42
|
+
.each do |f|
|
43
|
+
require f
|
44
|
+
end
|
45
|
+
|
46
|
+
# Watir config. set wait:
|
47
|
+
Watir.default_timeout = 60
|
48
|
+
end
|
data/lib/taf/browser.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Created on 02 Aug 2018
|
4
|
+
# @author: Andy Perrett
|
5
|
+
#
|
6
|
+
# Versions:
|
7
|
+
# 1.0 - Baseline
|
8
|
+
#
|
9
|
+
module Taf
|
10
|
+
# browser_setup.rb - a browser functions
|
11
|
+
module Browser
|
12
|
+
# open_browser function
|
13
|
+
def self.open_browser
|
14
|
+
browser = Taf::CMDLine.browser_type.downcase
|
15
|
+
case browser
|
16
|
+
when 'chrome' then chrome
|
17
|
+
when 'chrome-headless' then chrome_headless
|
18
|
+
when 'firefox' then firefox
|
19
|
+
when 'firefox-headless' then firefox_headless
|
20
|
+
else
|
21
|
+
raise Taf::BrowserFailedOpen,
|
22
|
+
"unable to open selected browser: #{browser}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# chrome browser details
|
27
|
+
def self.chrome
|
28
|
+
@browser = Watir::Browser.new :chrome, switches: %w[
|
29
|
+
--acceptInsecureCerts-true --start-maximized --window-size=1920,1080
|
30
|
+
]
|
31
|
+
end
|
32
|
+
|
33
|
+
# chrome headless browser details
|
34
|
+
def self.chrome_headless
|
35
|
+
@browser = Watir::Browser.new :chrome, switches: %w[
|
36
|
+
--start-maximized --disable-gpu --headless --acceptInsecureCerts-true
|
37
|
+
--no-sandbox --window-size=1920,1080
|
38
|
+
]
|
39
|
+
end
|
40
|
+
|
41
|
+
# firefox browser details
|
42
|
+
def self.firefox
|
43
|
+
caps = Selenium::WebDriver::Remote::Capabilities.firefox
|
44
|
+
caps['acceptInsecureCerts'] = true
|
45
|
+
driver = Selenium::WebDriver.for(:firefox, desired_capabilities: caps)
|
46
|
+
@browser = Watir::Browser.new(driver)
|
47
|
+
browser_full_screen
|
48
|
+
end
|
49
|
+
|
50
|
+
# firefox headless browser details
|
51
|
+
def self.firefox_headless
|
52
|
+
caps = Selenium::WebDriver::Remote::Capabilities.firefox
|
53
|
+
options = Selenium::WebDriver::Firefox::Options.new(args: ['-headless'])
|
54
|
+
caps['acceptInsecureCerts'] = true
|
55
|
+
driver = Selenium::WebDriver.for(:firefox, options: options,
|
56
|
+
desired_capabilities: caps)
|
57
|
+
@browser = Watir::Browser.new(driver)
|
58
|
+
# makes the browser full screen.
|
59
|
+
@browser.driver.manage.window.resize_to(1920, 1200)
|
60
|
+
@browser.driver.manage.window.move_to(0, 0)
|
61
|
+
end
|
62
|
+
|
63
|
+
# makes the browser full screen.
|
64
|
+
def self.browser_full_screen
|
65
|
+
screen_width = @browser.execute_script('return screen.width;')
|
66
|
+
screen_height = @browser.execute_script('return screen.height;')
|
67
|
+
@browser.driver.manage.window.resize_to(screen_width, screen_height)
|
68
|
+
@browser.driver.manage.window.move_to(0, 0)
|
69
|
+
end
|
70
|
+
|
71
|
+
# define browser value
|
72
|
+
def self.b
|
73
|
+
@browser
|
74
|
+
end
|
75
|
+
|
76
|
+
# Check browser version
|
77
|
+
def self.browser_version
|
78
|
+
browser_name = Taf::CMDLine.browser_type.downcase
|
79
|
+
case browser_name
|
80
|
+
when 'chrome', 'chrome-headless'
|
81
|
+
@browser.driver.capabilities[:version]
|
82
|
+
when 'firefox', 'firefox-headless'
|
83
|
+
@browser.execute_script('return navigator.userAgent;').split('/')[-1]
|
84
|
+
end
|
85
|
+
rescue StandardError
|
86
|
+
'No Browser version'
|
87
|
+
end
|
88
|
+
|
89
|
+
# Check platform
|
90
|
+
def self.browser_platform
|
91
|
+
browser_name = Taf::CMDLine.browser_type.downcase
|
92
|
+
case browser_name
|
93
|
+
when 'chrome', 'chrome-headless'
|
94
|
+
@browser.execute_script('return navigator.userAgent;')
|
95
|
+
.split(';')[1].split(')')[0]
|
96
|
+
when 'firefox', 'firefox-headless'
|
97
|
+
@browser.execute_script('return navigator.userAgent;').split(';')[1]
|
98
|
+
end
|
99
|
+
rescue StandardError
|
100
|
+
'No Platform found'
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
data/lib/taf/cmd_line.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Created on 13 May 2019
|
4
|
+
# @author: Andy Perrett
|
5
|
+
#
|
6
|
+
# Versions:
|
7
|
+
# 1.0 - Baseline
|
8
|
+
#
|
9
|
+
module Taf
|
10
|
+
# cmd_line.rb - command line script Script
|
11
|
+
module CMDLine
|
12
|
+
def self.help
|
13
|
+
puts ' Usage: taf [options]'
|
14
|
+
puts '-h --help 2 arguments are required: -b {Browser}'\
|
15
|
+
'-t {Testcase folder}'
|
16
|
+
puts '-v --verision Shows current version'
|
17
|
+
puts '-b --browser browser Supported Browsers: chrome, chrome-headless,'\
|
18
|
+
' firefox, firefox-headless'
|
19
|
+
puts '-t --tests testfolder i.e. tests/*.json'
|
20
|
+
Process.exit
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.browser(browser)
|
24
|
+
@browser_type = browser
|
25
|
+
unless ['chrome', 'chrome-headless', 'firefox', 'firefox-headless']
|
26
|
+
.include?(@browser_type)
|
27
|
+
Taf::MyLog.log.warn 'A valid Browser has not been supplied as a' \
|
28
|
+
' command-line parameter as expected'
|
29
|
+
Process.exit
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.tests(testfolder)
|
34
|
+
@tests_folder = testfolder
|
35
|
+
if Taf::Parser.test_files.size.positive?
|
36
|
+
Taf::MyLog.log.info "There are: #{Taf::Parser.test_files.size}" \
|
37
|
+
" test files to process: #{Taf::Parser.test_files}\n"
|
38
|
+
else
|
39
|
+
Taf::MyLog.log.warn \
|
40
|
+
'A valid Test case location has not been supplied' \
|
41
|
+
' as a command-line parameter as expected, Files should be .JSON'
|
42
|
+
Process.exit
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.taf_version
|
47
|
+
puts "TAF Version: #{Taf::VERSION}"
|
48
|
+
Process.exit
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.browser_type
|
52
|
+
@browser_type
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.tests_folder
|
56
|
+
@tests_folder
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.cmdline_input
|
60
|
+
# check if the test suite file name exists on the command line
|
61
|
+
# allow a user to input 2 arguments in to CMD line the 2 values are:
|
62
|
+
# Testcase Folder and Browser.
|
63
|
+
options = {}
|
64
|
+
ARGV.push('-h') if ARGV.empty?
|
65
|
+
OptionParser.new do |opt|
|
66
|
+
opt.banner = 'Usage: taf [options]'
|
67
|
+
opt.on('-h', '--help') { help }
|
68
|
+
opt.on('-v', '--version') { taf_version }
|
69
|
+
opt.on('-b', '--browser b') { |b| options[:browser] = b, browser(b) }
|
70
|
+
opt.on('-t', '--tests t') { |t| options[:testfolder] = t, tests(t) }
|
71
|
+
end.parse!
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Created on 20 Sept 2017
|
4
|
+
# @author: Andy Perrett
|
5
|
+
#
|
6
|
+
# Versions:
|
7
|
+
# 1.0 - Baseline
|
8
|
+
#
|
9
|
+
module Taf
|
10
|
+
# create_directories.rb - Creates folder structures.
|
11
|
+
module CreateDirectories
|
12
|
+
# create the project directories and open the test results file,
|
13
|
+
# the screenshot will be placed in a unique filename based upon the
|
14
|
+
# testStep.
|
15
|
+
#
|
16
|
+
# A single top-level directory named after the Project ID will be used.
|
17
|
+
# The target sub-directories will be created for each run of the test.
|
18
|
+
# ----> Project directory (working directory)
|
19
|
+
#
|
20
|
+
# -------> directory named after the test run ID UUID
|
21
|
+
|
22
|
+
def self.construct_projectdirs
|
23
|
+
# create top-level directory if it doesn't already exist:
|
24
|
+
# Results/Project_id
|
25
|
+
project_id = Taf::JSONParser.project_id.delete(' ')
|
26
|
+
project_dir = File.join('Results', project_id)
|
27
|
+
|
28
|
+
FileUtils.mkdir_p(project_dir)
|
29
|
+
|
30
|
+
# Generate UUID
|
31
|
+
@run_uuid = SecureRandom.uuid
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.construct_testspecdirs
|
35
|
+
# create directories for each test spec for screenshots:
|
36
|
+
# Results/Project_id/Run_ID_UUID
|
37
|
+
project_id = Taf::JSONParser.project_id.delete(' ')
|
38
|
+
screenshot_dir = File.join('Results', project_id, "Run_ID_#{@run_uuid}")
|
39
|
+
|
40
|
+
abs_path_screenshot_dir = File.absolute_path(screenshot_dir)
|
41
|
+
FileUtils.mkdir_p(abs_path_screenshot_dir)
|
42
|
+
# if any issues then set error message and re-raise the exception
|
43
|
+
rescue StandardError => e
|
44
|
+
# construct the error message from custom text and the actual system error
|
45
|
+
# message (converted to a string)
|
46
|
+
error_to_display = 'Error creating directory:' + e.to_s
|
47
|
+
raise error_to_display
|
48
|
+
else
|
49
|
+
# if no exception then return the screenshot file directory path
|
50
|
+
abs_path_screenshot_dir
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Created on 02 Aug 2018
|
4
|
+
# @author: Andy Perrett
|
5
|
+
#
|
6
|
+
# Versions:
|
7
|
+
# 1.0 - Baseline
|
8
|
+
#
|
9
|
+
module Taf
|
10
|
+
# json_parser.rb - json parser functions
|
11
|
+
module JSONParser
|
12
|
+
def self.parse_test_header_data(parse_json)
|
13
|
+
# get the number of test steps in the file
|
14
|
+
number_test_steps = parse_json['steps'].count
|
15
|
+
# get the remaining test data
|
16
|
+
@test_id = parse_json['testId']
|
17
|
+
@project_id = parse_json['projectId']
|
18
|
+
test_des = parse_json['testDescription']
|
19
|
+
Taf::MyLog.log.info "Number of test steps: #{number_test_steps}"
|
20
|
+
Taf::MyLog.log.info "Test Description: #{test_des}"
|
21
|
+
Taf::MyLog.log.info "TestID: #{@test_id} \n"
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.test_id
|
25
|
+
@test_id
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.project_id
|
29
|
+
@project_id
|
30
|
+
end
|
31
|
+
|
32
|
+
# parseTestStepData
|
33
|
+
def self.parse_test_step_data(parse_json)
|
34
|
+
parsed_step = { testdesc: parse_json['description'],
|
35
|
+
testFunction: parse_json['function'].downcase,
|
36
|
+
testvalue: parse_json['value0'],
|
37
|
+
locate: parse_json['value1'] || 'id',
|
38
|
+
testvalue2: parse_json['value2'],
|
39
|
+
locate2: parse_json['value3'] || 'id',
|
40
|
+
skipTestCase: parse_json['skipTestCase'] == 'yes' }
|
41
|
+
|
42
|
+
parsed_step
|
43
|
+
# if an error reading the test step data then re-raise the exception
|
44
|
+
rescue StandardError => e
|
45
|
+
raise e
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Created on 20 Sept 2017
|
4
|
+
# @author: Andy Perrett
|
5
|
+
#
|
6
|
+
# Versions:
|
7
|
+
# 1.0 - Baseline
|
8
|
+
#
|
9
|
+
module Taf
|
10
|
+
# junit_report.rb - methods for writing to the summary xml junit report.
|
11
|
+
module JUnitReport
|
12
|
+
# holds printable test report summary for all the executed tests
|
13
|
+
@test_step_report_summary2 = []
|
14
|
+
# construct the test suite header for junit
|
15
|
+
def self.test_step_summary_xml(test_file_name, test_file_name_index,
|
16
|
+
tc_start, tc_end, metrics)
|
17
|
+
number_test_steps = [metrics.stepFailures, metrics.stepPasses,
|
18
|
+
metrics.stepSkipped].sum
|
19
|
+
@test_step_report_summary2[test_file_name_index] = {
|
20
|
+
'classname' => test_file_name,
|
21
|
+
'name' => test_file_name,
|
22
|
+
'assertions' => number_test_steps,
|
23
|
+
'failures' => metrics.stepFailures,
|
24
|
+
'tests' => metrics.stepPasses,
|
25
|
+
'skipped' => metrics.stepSkipped,
|
26
|
+
'time' => TimeDifference.between(tc_end, tc_start).in_seconds
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.test_summary_junit(ts_start_time, ts_end_time, total_metrics)
|
31
|
+
# output to XML file format for Junit for CI.
|
32
|
+
builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
33
|
+
testsuite_attrs = {
|
34
|
+
'classname' => Taf::CMDLine.tests_folder.to_s,
|
35
|
+
'name' => Taf::CMDLine.tests_folder.to_s,
|
36
|
+
'tests' => total_metrics[0].to_s,
|
37
|
+
'failures' => total_metrics[1].to_s,
|
38
|
+
'timestamp' => ts_start_time.to_s,
|
39
|
+
'skipped' => total_metrics[2].to_s,
|
40
|
+
'time' => TimeDifference.between(ts_end_time, ts_start_time)
|
41
|
+
.in_seconds
|
42
|
+
}
|
43
|
+
xml.testsuites(testsuite_attrs) do |testsuites|
|
44
|
+
@test_step_report_summary2.each do |test_step_report_summary2|
|
45
|
+
testsuites.testsuite(test_step_report_summary2) do |testsuite|
|
46
|
+
$testStep_xml[test_step_report_summary2['name']]
|
47
|
+
.each do |test_step_idx, test_step_xml|
|
48
|
+
testsuite.testcase(test_step_xml) do |testcase|
|
49
|
+
failure = $failtestStep_xml
|
50
|
+
&.[](test_step_report_summary2['name'])&.[](test_step_idx)
|
51
|
+
skipped = $skiptestStep_xml
|
52
|
+
&.[](test_step_report_summary2['name'])&.[](test_step_idx)
|
53
|
+
testcase.failure(failure) if failure
|
54
|
+
testcase.skipped(skipped) if skipped
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# the test suite summary is a XML report generated will be called
|
63
|
+
# 'report_uuid.xml'
|
64
|
+
project_id = Taf::JSONParser.project_id.delete(' ')
|
65
|
+
xml_dir = File.join('Results', project_id)
|
66
|
+
ts_xml_file = "#{xml_dir}/report_#{SecureRandom.uuid}.xml"
|
67
|
+
|
68
|
+
ts_summary_file_xml = File.open(ts_xml_file, 'w')
|
69
|
+
ts_summary_file_xml.write builder.to_xml
|
70
|
+
ts_summary_file_xml.close
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|