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.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/bin/taf +23 -2
  3. data/lib/taf.rb +48 -0
  4. data/lib/taf/browser.rb +103 -0
  5. data/lib/taf/cmd_line.rb +74 -0
  6. data/lib/taf/create_directories.rb +53 -0
  7. data/lib/taf/json_parser.rb +48 -0
  8. data/lib/taf/junit_report.rb +73 -0
  9. data/lib/taf/my_log.rb +21 -0
  10. data/lib/taf/parser.rb +37 -0
  11. data/lib/taf/report.rb +110 -0
  12. data/lib/taf/report_summary.rb +56 -0
  13. data/lib/taf/screenshot.rb +30 -0
  14. data/lib/taf/test_engine.rb +82 -0
  15. data/lib/taf/test_steps.rb +38 -0
  16. data/lib/taf/test_steps/handlers/base.rb +90 -0
  17. data/lib/taf/test_steps/handlers/base/browser_back.rb +21 -0
  18. data/lib/taf/test_steps/handlers/base/browser_forward.rb +21 -0
  19. data/lib/taf/test_steps/handlers/base/browser_open.rb +21 -0
  20. data/lib/taf/test_steps/handlers/base/browser_quit.rb +21 -0
  21. data/lib/taf/test_steps/handlers/base/browser_refresh.rb +21 -0
  22. data/lib/taf/test_steps/handlers/base/capture_alert.rb +22 -0
  23. data/lib/taf/test_steps/handlers/base/check_box.rb +22 -0
  24. data/lib/taf/test_steps/handlers/base/check_boxdata.rb +35 -0
  25. data/lib/taf/test_steps/handlers/base/check_browser_title.rb +21 -0
  26. data/lib/taf/test_steps/handlers/base/check_logs.rb +25 -0
  27. data/lib/taf/test_steps/handlers/base/check_screendata.rb +23 -0
  28. data/lib/taf/test_steps/handlers/base/check_url.rb +22 -0
  29. data/lib/taf/test_steps/handlers/base/click_button.rb +33 -0
  30. data/lib/taf/test_steps/handlers/base/execute_system_command.rb +23 -0
  31. data/lib/taf/test_steps/handlers/base/handle_browser_window.rb +23 -0
  32. data/lib/taf/test_steps/handlers/base/ipause.rb +21 -0
  33. data/lib/taf/test_steps/handlers/base/list_all_dropdowns_values.rb +23 -0
  34. data/lib/taf/test_steps/handlers/base/login.rb +59 -0
  35. data/lib/taf/test_steps/handlers/base/open_url.rb +22 -0
  36. data/lib/taf/test_steps/handlers/base/ping_test.rb +27 -0
  37. data/lib/taf/test_steps/handlers/base/radio_button.rb +24 -0
  38. data/lib/taf/test_steps/handlers/base/select_dropdown.rb +24 -0
  39. data/lib/taf/test_steps/handlers/base/send_special_keys.rb +22 -0
  40. data/lib/taf/test_steps/handlers/base/write_box_data.rb +35 -0
  41. data/lib/taf/version.rb +5 -0
  42. metadata +41 -43
  43. data/lib/functions/handlers.rb +0 -6
  44. data/lib/functions/handlers/base_handler.rb +0 -91
  45. data/lib/functions/handlers/browser_back.rb +0 -21
  46. data/lib/functions/handlers/browser_forward.rb +0 -21
  47. data/lib/functions/handlers/browser_quit.rb +0 -21
  48. data/lib/functions/handlers/browser_refresh.rb +0 -21
  49. data/lib/functions/handlers/capture_alert.rb +0 -22
  50. data/lib/functions/handlers/check_box.rb +0 -21
  51. data/lib/functions/handlers/check_boxdata.rb +0 -35
  52. data/lib/functions/handlers/check_browser_title.rb +0 -21
  53. data/lib/functions/handlers/check_logs.rb +0 -23
  54. data/lib/functions/handlers/check_screendata.rb +0 -21
  55. data/lib/functions/handlers/check_url.rb +0 -22
  56. data/lib/functions/handlers/click_button.rb +0 -33
  57. data/lib/functions/handlers/execute_system_command.rb +0 -23
  58. data/lib/functions/handlers/handle_browser_window.rb +0 -23
  59. data/lib/functions/handlers/ipause.rb +0 -21
  60. data/lib/functions/handlers/list_all_dropdowns_values.rb +0 -23
  61. data/lib/functions/handlers/login.rb +0 -59
  62. data/lib/functions/handlers/open_url.rb +0 -35
  63. data/lib/functions/handlers/ping_test.rb +0 -27
  64. data/lib/functions/handlers/radio_button.rb +0 -22
  65. data/lib/functions/handlers/select_dropdown.rb +0 -24
  66. data/lib/functions/handlers/send_special_keys.rb +0 -22
  67. data/lib/functions/handlers/write_box_data.rb +0 -35
  68. data/lib/main.rb +0 -31
  69. data/lib/parser/json_parser.rb +0 -50
  70. data/lib/parser/parser.rb +0 -49
  71. data/lib/report/junit_report.rb +0 -74
  72. data/lib/report/report.rb +0 -116
  73. data/lib/report/report_summary.rb +0 -53
  74. data/lib/taf_config.rb +0 -46
  75. data/lib/utils/browser.rb +0 -98
  76. data/lib/utils/cmd_line.rb +0 -71
  77. data/lib/utils/create_directories.rb +0 -50
  78. data/lib/utils/exceptions.rb +0 -7
  79. data/lib/utils/logger.rb +0 -21
  80. data/lib/utils/screenshot.rb +0 -30
  81. data/lib/utils/test_engine.rb +0 -77
  82. data/lib/utils/test_steps.rb +0 -38
  83. data/lib/version.rb +0 -21
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base_handler'
4
-
5
- module TestSteps
6
- module Handlers
7
- # Select Dropdown function.
8
- class SelectDropdown < Base
9
- register :select_dropdown
10
-
11
- def perform
12
- ele = Browser.b.select_list("#{@locate}": @value)
13
-
14
- ele.wait_until(&:exists?)
15
- ele.option("#{@locate2}": @value2.to_s).select
16
- MyLog.log.info("Dropdown item: #{@value2} has been selected")
17
- true
18
- rescue StandardError
19
- MyLog.log.warn("Dropdown item: #{@value2} has NOT been selected")
20
- false
21
- end
22
- end
23
- end
24
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base_handler'
4
-
5
- module TestSteps
6
- module Handlers
7
- # Send a Special Key function.
8
- class SendSpecialKeys < Base
9
- register :send_special_keys
10
-
11
- def perform
12
- Browser.b.send_keys :"#{@value}"
13
- sleep 1
14
- MyLog.log.info("Browser Sent key: :#{@value} successfully")
15
- true
16
- rescue StandardError
17
- MyLog.log.warn("Browser Failed to Send key: :#{@value}")
18
- false
19
- end
20
- end
21
- end
22
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base_handler'
4
-
5
- module TestSteps
6
- module Handlers
7
- # Write box data function.
8
- class WriteBoxdata < Base
9
- register :write_box_data
10
-
11
- def perform
12
- txt = @value2
13
- txt = ENV[txt.to_s] if ENV[txt.to_s]
14
- elms = %i[textarea text_field iframe]
15
-
16
- found_box = elms.map do |elm|
17
- Browser.b.send(elm, "#{@locate}": @value).exists?
18
- end.compact
19
-
20
- raise 'Multiple matches' if found_box.select { |i| i }.empty?
21
-
22
- index = found_box.index(true)
23
- return unless index
24
-
25
- Browser.b.send(elms[index], "#{@locate}": @value)
26
- .wait_until(&:exists?).send_keys txt
27
- MyLog.log.info("Textbox: #{@value} has correct value: #{txt}")
28
- true
29
- rescue StandardError
30
- MyLog.log.warn("Textbox: #{@value} does not exist")
31
- false
32
- end
33
- end
34
- end
35
- end
data/lib/main.rb DELETED
@@ -1,31 +0,0 @@
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
- # main.rb - Framework Driver Script
10
- module Main
11
- require_relative './taf_config.rb'
12
-
13
- # parses the cmd line imput into the taf
14
- CMDLine.cmdline_input
15
-
16
- # get the overall test suite end time
17
- ts_start_time = Report.current_time
18
-
19
- # process the test files to execute the tests
20
- total_passes, total_failures, total_skipped = TestEngine.process_testfiles
21
- total_metrics = [total_passes, total_failures, total_skipped]
22
- # get the overall test suite end time
23
- ts_end_time = Report.current_time
24
-
25
- # output the overall test summary
26
- ReportSummary.overall_test_summary(ts_start_time, ts_end_time, total_metrics)
27
- JunitReport.test_summary_junit(ts_start_time, ts_end_time, total_metrics)
28
-
29
- # Exit status code.
30
- Process.exit(total_failures.zero? ? 0 : 1)
31
- end
@@ -1,50 +0,0 @@
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
- # json_parser.rb - json parser functions
10
- module JsonParser
11
- require_relative '../taf_config.rb'
12
-
13
- def self.parse_test_header_data(parse_json)
14
- # get the number of test steps in the file
15
- number_test_steps = parse_json['steps'].count
16
- # get the remaining test data
17
- @test_id = parse_json['testId']
18
- @project_id = parse_json['projectId']
19
- test_des = parse_json['testDescription']
20
- MyLog.log.info "Number of test steps: #{number_test_steps}"
21
- MyLog.log.info "Test Description: #{test_des}"
22
- MyLog.log.info "TestID: #{@test_id} \n"
23
- end
24
-
25
- def self.test_id
26
- @test_id
27
- end
28
-
29
- def self.project_id
30
- @project_id
31
- end
32
-
33
- # parseTestStepData
34
- def self.parse_test_step_data(parse_json)
35
- parsed_step = {
36
- testdesc: parse_json['description'],
37
- testFunction: parse_json['function'].downcase,
38
- testvalue: parse_json['value0'],
39
- locate: parse_json['value1'] || 'id',
40
- testvalue2: parse_json['value2'],
41
- locate2: parse_json['value3'] || 'id',
42
- skipTestCase: parse_json['skipTestCase'] == 'yes'
43
- }
44
-
45
- parsed_step
46
- # if an error reading the test step data then re-raise the exception
47
- rescue StandardError => e
48
- raise e
49
- end
50
- end
data/lib/parser/parser.rb DELETED
@@ -1,49 +0,0 @@
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
- # parser.rb - basic parser functions
10
- module Parser
11
- require_relative '../taf_config.rb'
12
-
13
- def self.test_files
14
- @test_files ||= Dir.glob("#{CMDLine.tests_folder}/*.json").reject do |file|
15
- File.basename(file).start_with?('~$')
16
- end.sort
17
- end
18
-
19
- # readTestData
20
- def self.read_test_data(test_file_name)
21
- # get the file type
22
- file_type = File.extname(test_file_name)
23
- if file_type.casecmp('.json').zero?
24
- MyLog.log.info "Processing test file: #{test_file_name}"
25
- json = File.read(test_file_name)
26
- parse_json = JSON.parse(json)
27
-
28
- JsonParser.parse_test_header_data(parse_json)
29
- return parse_json
30
- else
31
- # if unable to read the test file list then construct a custom error
32
- # message and raise an exception.
33
- MyLog.log.info 'Not a valid JSON File Type' if test_file_name != 'JSON'
34
- error_to_display = "Test File Name: '#{test_file_name}' " \
35
- 'type not recognised (must be .xslx or .json)'
36
- raise IOError, error_to_display
37
- end
38
-
39
- # if an error occurred reading the test file list then
40
- # re-raise the exception.
41
- rescue StandardError => e
42
- raise IOError, e
43
- end
44
-
45
- # parseTestStepData
46
- def self.parse_test_step_data(parse_json)
47
- JsonParser.parse_test_step_data(parse_json)
48
- end
49
- end
@@ -1,74 +0,0 @@
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
- # junit_report.rb - methods for writing to the summary xml junit report.
10
- module JunitReport
11
- require_relative '../taf_config.rb'
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(
27
- tc_end, tc_start
28
- ).in_seconds
29
- }
30
- end
31
-
32
- def self.test_summary_junit(ts_start_time, ts_end_time, total_metrics)
33
- # output to XML file format for Junit for CI.
34
- builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
35
- testsuite_attrs = {
36
- 'classname' => CMDLine.tests_folder.to_s,
37
- 'name' => CMDLine.tests_folder.to_s,
38
- 'tests' => total_metrics[0].to_s,
39
- 'failures' => total_metrics[1].to_s,
40
- 'timestamp' => ts_start_time.to_s,
41
- 'skipped' => total_metrics[2].to_s,
42
- 'time' => TimeDifference.between(ts_end_time, ts_start_time)
43
- .in_seconds
44
- }
45
- xml.testsuites(testsuite_attrs) do |testsuites|
46
- @test_step_report_summary2.each do |test_step_report_summary2|
47
- testsuites.testsuite(test_step_report_summary2) do |testsuite|
48
- $testStep_xml[test_step_report_summary2['name']]
49
- .each do |test_step_idx, test_step_xml|
50
- testsuite.testcase(test_step_xml) do |testcase|
51
- failure = $failtestStep_xml
52
- &.[](test_step_report_summary2['name'])&.[](test_step_idx)
53
- skipped = $skiptestStep_xml
54
- &.[](test_step_report_summary2['name'])&.[](test_step_idx)
55
- testcase.failure(failure) if failure
56
- testcase.skipped(skipped) if skipped
57
- end
58
- end
59
- end
60
- end
61
- end
62
- end
63
-
64
- # the test suite summary is a XML report generated will be called
65
- # 'report_uuid.xml'
66
- project_id = JsonParser.project_id.delete(' ')
67
- xml_dir = File.join('Results', project_id)
68
- ts_xml_file = "#{xml_dir}/report_#{SecureRandom.uuid}.xml"
69
-
70
- ts_summary_file_xml = File.open(ts_xml_file, 'w')
71
- ts_summary_file_xml.write builder.to_xml
72
- ts_summary_file_xml.close
73
- end
74
- end
data/lib/report/report.rb DELETED
@@ -1,116 +0,0 @@
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
- # report.rb - methods for outputting console.
10
- module Report
11
- require_relative '../taf_config.rb'
12
-
13
- # get the current time in the format Day - Month - Date - Time (HH:MM:SS)
14
- def self.current_time
15
- Time.new.strftime('%a %b %d %H:%M:%S %Z')
16
- end
17
-
18
- # print the test Step info to the test results file
19
- def self.print_test_step_header(test_file_name, test_step_idx, test_desc)
20
- @test_start_time = current_time
21
- MyLog.log.info "Test step: #{test_step_idx} : #{test_desc}"
22
-
23
- step = {
24
- 'id' => test_step_idx,
25
- 'classname' => "SuiteID: #{JsonParser.test_id}" \
26
- " Test Step: #{test_step_idx} #{test_desc}",
27
- 'name' => test_desc,
28
- 'file' => test_file_name
29
- }
30
- # output to console to show test step
31
- # puts step
32
-
33
- return unless test_file_name
34
-
35
- $testStep_xml ||= {}
36
- $testStep_xml[test_file_name] ||= {}
37
- $testStep_xml[test_file_name][test_step_idx] = step
38
- end
39
-
40
- # print the Pass / Fail status of a test to the test results file
41
- def self.test_pass_fail(pass_fail, test_file_name, test_step_idx, metrics)
42
- if pass_fail == true
43
- @current_test_fail = false
44
- metrics.stepPasses += 1
45
- MyLog.log.info "Test #{test_step_idx} has Passed ".green
46
- elsif pass_fail == false
47
- @current_test_fail = true
48
- metrics.stepFailures += 1
49
- MyLog.log.info "Test #{test_step_idx} has FAILED ".red
50
- sc_file_name = Screenshot.save_screenshot(test_step_idx)
51
- failstep = {
52
- 'message' => "SuiteID: #{JsonParser.test_id}" \
53
- " Test Step: #{test_step_idx} Test has" \
54
- " FAILED - Check logs, see Screenshot: #{sc_file_name}",
55
- 'type' => 'FAILURE',
56
- 'file' => test_file_name
57
- }
58
- # output to console to show test step failure
59
- # puts failstep
60
-
61
- return unless test_file_name
62
-
63
- $failtestStep_xml ||= {}
64
- $failtestStep_xml[test_file_name] ||= []
65
- $failtestStep_xml[test_file_name][test_step_idx] = failstep
66
- else
67
- @current_test_fail = false
68
- metrics.stepSkipped += 1
69
- MyLog.log.info "Test #{test_step_idx} no checks performed ".blue
70
- skipstep = {
71
- 'message' => "SuiteID: #{JsonParser.test_id}" \
72
- " Test Step: #{test_step_idx} No" \
73
- ' checks performed - Check logs',
74
- 'type' => 'SKIPPED',
75
- 'file' => test_file_name
76
- }
77
- # output to console to show test step failure
78
- # puts skipstep
79
-
80
- return unless test_file_name
81
-
82
- $skiptestStep_xml ||= {}
83
- $skiptestStep_xml[test_file_name] ||= []
84
- $skiptestStep_xml[test_file_name][test_step_idx] = skipstep
85
- end
86
- test_end_time = current_time
87
-
88
- test_duration = TimeDifference.between(
89
- test_end_time, @test_start_time
90
- ).humanize || 0
91
- MyLog.log.info "Test step duration: #{test_duration} \n"
92
- end
93
-
94
- # check if the test failure threshold has been reached for total failures
95
- # or consecutive failures.
96
- # If a certain number of consecutive tests fail then throw an exception
97
- def self.check_failure_threshold(test_file_name)
98
- consecutive_fail_threshold = 5
99
- if @current_test_fail
100
- @consecutive_test_fail += 1
101
- else
102
- @consecutive_test_fail = 0
103
- end
104
-
105
- return if @consecutive_test_fail < consecutive_fail_threshold
106
-
107
- # write info to stdout
108
- MyLog.log.warn "Terminating the current test file: #{test_file_name} as" \
109
- " the test failure threshold (#{@consecutive_test_fail}) has been" \
110
- ' reached.'
111
- MyLog.log.warn '...continuing with the next test file (if there is one)'
112
-
113
- raise FailureThresholdExceeded,
114
- "test failure threshold (#{@consecutive_test_fail}) has been reached"
115
- end
116
- end
@@ -1,53 +0,0 @@
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
- # report_summary.rb - methods for writing to the test summary report file
10
- module ReportSummary
11
- require_relative '../taf_config.rb'
12
- # holds printable test report summary for all the executed tests
13
- @test_step_report_summary = []
14
- # output the test results summary for the current test case
15
- def self.test_step_summary(test_file_name, test_file_name_index, metrics)
16
- @test_step_report_summary[test_file_name_index] = <<~TEXT
17
- Test file executed: #{test_file_name}
18
- Browser Type: #{CMDLine.browser_type}
19
- Browser Version: #{Browser.browser_version}
20
- There are: #{metrics.stepPasses} Passes
21
- There are: #{metrics.stepFailures} Failures
22
- There are: #{metrics.stepSkipped} Skipped Tests \n
23
- TEXT
24
- end
25
-
26
- # output the overall test results summary
27
- def self.overall_test_summary(ts_start_time, ts_end_time, total_metrics)
28
- # output to the console
29
-
30
- MyLog.log.info 'Finished processing all test files ' \
31
- "from the following test folder: #{CMDLine.tests_folder}"
32
- MyLog.log.info "Overall Test Summary: \n"
33
- @test_step_report_summary.each do |test_step_report_summary|
34
- test_step_report_summary.each_line do |line|
35
- MyLog.log.info(line.strip)
36
- end
37
- end
38
-
39
- duration = TimeDifference.between(
40
- ts_end_time, ts_start_time
41
- ).humanize || 0
42
-
43
- MyLog.log.info "Total Tests started at: #{ts_start_time}"
44
- MyLog.log.info "Total Tests finished at: #{ts_end_time}"
45
- MyLog.log.info "Total Tests duration: #{duration}"
46
- MyLog.log.info "Total Tests Passed: #{total_metrics[0]}".green
47
- MyLog.log.info "Total Tests Failed: #{total_metrics[1]}".red
48
- MyLog.log.info "Total Tests Skipped: #{total_metrics[2]}".blue
49
- total_tests = [total_metrics[0], total_metrics[1],
50
- total_metrics[2]].sum
51
- MyLog.log.info "Total Tests: #{total_tests}\n"
52
- end
53
- end