taf 0.3.7 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|