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
data/lib/taf_config.rb DELETED
@@ -1,46 +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
- # taf_config.rb - Framework Config file
10
-
11
- # list of all the required gems.
12
- require 'selenium-webdriver'
13
- require 'watir'
14
- require 'rubygems'
15
- require 'fileutils'
16
- require 'logger'
17
- require 'net/ping'
18
- require 'nokogiri'
19
- require 'time_difference'
20
- require 'colored'
21
- require 'optparse'
22
- require 'fileutils'
23
- require 'securerandom'
24
- require 'json'
25
-
26
- # list of all the required files
27
- require_relative './utils/test_steps'
28
- require_relative './report/report'
29
- require_relative './utils/browser'
30
- require_relative './utils/cmd_line'
31
- require_relative './utils/create_directories'
32
- require_relative './utils/logger'
33
- require_relative './utils/test_engine'
34
- require_relative './utils/screenshot'
35
- require_relative './utils/exceptions'
36
- require_relative './report/junit_report'
37
- require_relative './report/report_summary'
38
- require_relative './parser/parser'
39
- require_relative './parser/json_parser'
40
-
41
- # Require all test step handlers, which register themselves with
42
- # TestStep.handlers when the files are required.
43
- require_relative './functions/handlers'
44
-
45
- # Watir config. set wait:
46
- Watir.default_timeout = 60
data/lib/utils/browser.rb DELETED
@@ -1,98 +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
- # browser_setup.rb - a browser functions
10
- module Browser
11
- require_relative '../taf_config.rb'
12
- # open_browser function
13
- def self.open_browser
14
- lc_browser_type = CMDLine.browser_type.downcase
15
- case lc_browser_type
16
- when 'chrome'
17
- chrome
18
- when 'chrome-headless'
19
- chrome_headless
20
- when 'firefox'
21
- firefox
22
- when 'firefox-headless'
23
- firefox_headless
24
- else
25
- MyLog.log.error "unable to open selected browser: #{lc_browser_type}"
26
- raise BrowserFailedOpen
27
- end
28
- rescue BrowserFailedOpen => e
29
- # construct the error message from custom text and the actual system error
30
- # message (converted to a string)
31
- error_text = 'Unable to open'\
32
- "the requested browser: #{lc_browser_type} " + e.to_s
33
- raise error_text
34
- end
35
-
36
- # chrome browser details
37
- def self.chrome
38
- @browser = Watir::Browser.new :chrome, switches: %w[
39
- --acceptInsecureCerts-true --start-maximized --window-size=1920,1080
40
- ]
41
- end
42
-
43
- # chrome headless browser details
44
- def self.chrome_headless
45
- @browser = Watir::Browser.new :chrome, switches: %w[
46
- --start-maximized --disable-gpu --headless --acceptInsecureCerts-true
47
- --no-sandbox --window-size=1920,1080
48
- ]
49
- end
50
-
51
- # firefox browser details
52
- def self.firefox
53
- caps = Selenium::WebDriver::Remote::Capabilities.firefox
54
- caps['acceptInsecureCerts'] = true
55
- driver = Selenium::WebDriver.for(:firefox, desired_capabilities: caps)
56
- @browser = Watir::Browser.new(driver)
57
- browser_full_screen
58
- end
59
-
60
- # firefox headless browser details
61
- def self.firefox_headless
62
- caps = Selenium::WebDriver::Remote::Capabilities.firefox
63
- options = Selenium::WebDriver::Firefox::Options.new(args: ['-headless'])
64
- caps['acceptInsecureCerts'] = true
65
- driver = Selenium::WebDriver.for(:firefox, options: options,
66
- desired_capabilities: caps)
67
- @browser = Watir::Browser.new(driver)
68
- # makes the browser full screen.
69
- @browser.driver.manage.window.resize_to(1920, 1200)
70
- @browser.driver.manage.window.move_to(0, 0)
71
- end
72
-
73
- # makes the browser full screen.
74
- def self.browser_full_screen
75
- screen_width = @browser.execute_script('return screen.width;')
76
- screen_height = @browser.execute_script('return screen.height;')
77
- @browser.driver.manage.window.resize_to(screen_width, screen_height)
78
- @browser.driver.manage.window.move_to(0, 0)
79
- end
80
-
81
- # define browser value
82
- def self.b
83
- @browser
84
- end
85
-
86
- # Check browser version
87
- def self.browser_version
88
- browser_name = CMDLine.browser_type.downcase
89
- case browser_name
90
- when 'chrome', 'chrome-headless'
91
- @browser.driver.capabilities[:version]
92
- when 'firefox', 'firefox-headless'
93
- @browser.execute_script('return navigator.userAgent;').split('/')[-1]
94
- end
95
- rescue StandardError
96
- 'No Browser version'
97
- end
98
- end
@@ -1,71 +0,0 @@
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
- # cmd_line.rb - command line script Script
10
- module CMDLine
11
- require_relative '../taf_config.rb'
12
-
13
- def self.cmdline_input
14
- # check if the test suite file name exists on the command line
15
- # allow a user to input 2 arguments in to CMD line the 2 values are:
16
- # Testcase Folder and Browser.
17
- options = {}
18
- ARGV.push('-h') if ARGV.empty?
19
- OptionParser.new do |parser|
20
- # Whenever we see -b, -t or --browser, or --tests with an
21
- # argument, save the argument.
22
- parser.banner = 'Usage: taf [options]'
23
- parser.on(
24
- '-h',
25
- '--help',
26
- "2 arguments are required: {Browser} {Testcase folder}'"
27
- ) do
28
- puts parser
29
- Process.exit
30
- end
31
-
32
- parser.on(
33
- '-b',
34
- '--browser browser',
35
- 'Supported Browsers: chrome,' \
36
- ' chrome-headless, firefox, firefox-headless'
37
- ) do |b|
38
- options[:browser] = b
39
- @browser_type = options[:browser]
40
- unless ['chrome', 'chrome-headless', 'firefox', 'firefox-headless']
41
- .include?(@browser_type)
42
- MyLog.log.warn 'A valid Browser has not been supplied as a' \
43
- ' command-line parameter as expected'
44
- Process.exit
45
- end
46
- end
47
-
48
- parser.on('-t', '--tests testfolder', 'i.e. tests/') do |t|
49
- options[:testfolder] = t
50
- @tests_folder = options[:testfolder]
51
- if Parser.test_files.size.positive?
52
- MyLog.log.info "There are: #{Parser.test_files.size}" \
53
- ' test files to process'
54
- MyLog.log.info "List of Tests files: #{Parser.test_files} \n"
55
- else
56
- MyLog.log.warn 'A valid Test case location has not been supplied' \
57
- ' as a command-line parameter as expected'
58
- Process.exit
59
- end
60
- end
61
- end.parse!
62
- end
63
-
64
- def self.browser_type
65
- @browser_type
66
- end
67
-
68
- def self.tests_folder
69
- @tests_folder
70
- end
71
- end
@@ -1,50 +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
- # create_directories.rb - Creates folder structures.
10
- module CreateDirectories
11
- # create the project directories and open the test results file,
12
- # the screenshot will be placed in a unique filename based upon the testStep.
13
- # A single top-level directory named after the Project ID will be used and the
14
- # target sub-directories will be created for each run of the test
15
- #
16
- # ----> Project directory (working directory)
17
- #
18
- # ------->directory named after the test run ID UUID
19
-
20
- def self.construct_projectdirs
21
- # create top-level directory if it doesn't already exist:
22
- # Results/Project_id
23
- project_id = JsonParser.project_id.delete(' ')
24
- project_dir = File.join('Results', project_id)
25
-
26
- FileUtils.mkdir_p(project_dir)
27
-
28
- # Generate UUID
29
- @run_uuid = SecureRandom.uuid
30
- end
31
-
32
- def self.construct_testspecdirs
33
- # create directories for each test spec for screenshots:
34
- # Results/Project_id/Run_ID_UUID
35
- project_id = JsonParser.project_id.delete(' ')
36
- screenshot_dir = File.join('Results', project_id, "Run_ID_#{@run_uuid}")
37
-
38
- abs_path_screenshot_dir = File.absolute_path(screenshot_dir)
39
- FileUtils.mkdir_p(abs_path_screenshot_dir)
40
- # if any issues then set error message and re-raise the exception
41
- rescue StandardError => e
42
- # construct the error message from custom text and the actual system error
43
- # message (converted to a string)
44
- error_to_display = 'Error creating directory:' + e.to_s
45
- raise error_to_display
46
- else
47
- # if no exception then return the screenshot file directory path
48
- abs_path_screenshot_dir
49
- end
50
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class TafError < StandardError; end
4
- class UnknownTestStep < TafError; end
5
- class FailureThresholdExceeded < TafError; end
6
- class BrowserFailedOpen < TafError; end
7
- class LoginTypeFailed < TafError; end
data/lib/utils/logger.rb DELETED
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Created on 04 Feb 2019
4
- # @author: Andy Perrett
5
- #
6
- # Versions:
7
- # 1.0 - Baseline
8
- #
9
- # logger.rb - logger file
10
- # Logger function.
11
- module MyLog
12
- require_relative '../taf_config.rb'
13
- def self.log
14
- if @logger.nil?
15
- @logger = Logger.new STDOUT
16
- @logger.level = Logger::DEBUG
17
- @logger.datetime_format = '%Y-%m-%d %H:%M:%S '
18
- end
19
- @logger
20
- end
21
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Created on 07 May 2019
4
- # @author: Andy Perrett
5
- #
6
- # Versions:
7
- # 1.0 - Baseline
8
- #
9
- # screenshot.rb - a screenshot save function
10
- module Screenshot
11
- require_relative '../taf_config.rb'
12
-
13
- # create screenshot filename and save the screenshot if the test has failed.
14
- def self.save_screenshot(test_step_idx)
15
- time = Time.now.strftime('%H%M')
16
- sc_dir = CreateDirectories.construct_testspecdirs
17
-
18
- sc_file_name = "#{sc_dir}/Test_ID-#{JsonParser.test_id.delete(' ')}"\
19
- "_Test_step-#{test_step_idx}_Failed_#{time}.png"
20
-
21
- # Screenshot capture for websites
22
- Browser.b.screenshot.save sc_file_name
23
- MyLog.log.info("Screenshot saved to: #{sc_file_name} \n")
24
- sc_file_name
25
- rescue StandardError => e
26
- # construct the error message from custom text and the actual system
27
- # error message (converted to a string).
28
- MyLog.log.warn("Error saving the screenshot: #{sc_file_name} #{e}")
29
- end
30
- end
@@ -1,77 +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
- # test_engine.rb - controls the iteration through the test suite and specs
10
- module TestEngine
11
- require_relative '../taf_config.rb'
12
-
13
- # process the test files to execute the tests
14
- def self.process_testfiles
15
- total_passes = 0
16
- total_failures = 0
17
- total_skipped = 0
18
-
19
- # loop through all the available test files to execute the tests
20
- Parser.test_files.each_with_index do |test_file_name, test_file_index|
21
- metrics = Struct.new(:stepPasses, :stepFailures, :stepSkipped)
22
- .new(0, 0, 0)
23
-
24
- begin
25
- # read in the test data
26
- tests = Parser.read_test_data(test_file_name)
27
- # if unable to read the test data, show the error and move onto the
28
- # next file (if there is one)
29
- rescue StandardError => e
30
- MyLog.log.warn 'Terminating the current test spec: ' \
31
- "#{test_file_name} #{e}"
32
- MyLog.log.info '...continuing with the next test file (if there is one)'
33
- end
34
-
35
- # create project folders - these only need creating once per test suite
36
- CreateDirectories.construct_projectdirs
37
-
38
- # get the test case start time
39
- tc_start = Report.current_time
40
-
41
- begin
42
- tests['steps'].each_with_index do |test_step, test_step_idx|
43
- test_step_idx += 1
44
-
45
- parsed_steps = Parser.parse_test_step_data(test_step)
46
-
47
- # process the test step data
48
- TestSteps.process_test_steps(test_file_name, test_step_idx,
49
- parsed_steps, metrics)
50
- end
51
- rescue TafError => e
52
- warn e
53
- MyLog.log.warn e
54
- end
55
-
56
- # get the test case end time
57
- tc_end = Report.current_time
58
-
59
- # output the test results summary for the current test case,
60
- # pass in the test file number to save the summary against it's testfile
61
- ReportSummary.test_step_summary(test_file_name, test_file_index, metrics)
62
- JunitReport.test_step_summary_xml(test_file_name, test_file_index,
63
- tc_start, tc_end, metrics)
64
-
65
- # close the browser if created
66
- Browser.b.quit
67
-
68
- # record total passes and failures and reset the failure counters for
69
- # the test steps
70
- total_passes += metrics.stepPasses
71
- total_failures += metrics.stepFailures
72
- total_skipped += metrics.stepSkipped
73
- end
74
-
75
- [total_passes, total_failures, total_skipped]
76
- end
77
- end
@@ -1,38 +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
- # test_steps.rb - process the required test step functions
10
- module TestSteps
11
- require_relative '../taf_config.rb'
12
-
13
- def self.handlers
14
- @handlers ||= {}
15
- end
16
-
17
- # process the test step data by matching the test step functions and
18
- # processing the associated data accordingly
19
- def self.process_test_steps(test_file_name, test_step_idx, step_attributes,
20
- metrics)
21
- # print the test step information
22
- Report.print_test_step_header(test_file_name, test_step_idx,
23
- step_attributes[:testdesc])
24
- runtest = step_attributes[:skipTestCase]
25
- step_function = step_attributes[:testFunction]
26
- handler = handlers[step_function.to_s]
27
-
28
- if handler.respond_to?(:perform)
29
- func = handler.perform(step_attributes) if runtest == false
30
- Report.test_pass_fail(func, test_file_name, test_step_idx, metrics)
31
- Report.check_failure_threshold(test_file_name)
32
- return true
33
- else
34
- MyLog.log.warn "\nUnable to match function: #{step_function}"
35
- raise UnknownTestStep, "Unknown test step: #{step_function}"
36
- end
37
- end
38
- end