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
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