taf 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
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