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
         |