taf 0.4.1 → 0.4.4
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/lib/taf.rb +8 -8
- data/lib/taf/browser.rb +18 -12
- data/lib/taf/cmd_line.rb +1 -1
- data/lib/taf/test_engine.rb +30 -26
- data/lib/taf/test_steps/handlers/base.rb +3 -1
- data/lib/taf/test_steps/handlers/base/check_boxdata.rb +12 -6
- data/lib/taf/test_steps/handlers/base/generate_token.rb +35 -0
- data/lib/taf/test_steps/handlers/base/login.rb +35 -9
- data/lib/taf/test_steps/handlers/base/ping_test.rb +11 -9
- data/lib/taf/version.rb +1 -1
- metadata +28 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0501ee31ac5742b113c9e33b359bc324dae96b87e7a2caf82495113d6e6a3222
|
4
|
+
data.tar.gz: f9021907fd6dec231fe807e0afd32e2879ce44a9789f0bfd89ab62febb326e05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 527cb4c93cce55d055bf5bb3d28026db1d5733ad8ba11c9bd91e2b091e1cedc3851169f889a2a6f4dc8ea6f932bbeb7f9fd23eb87e1f819c296ce76b106d8596
|
7
|
+
data.tar.gz: 16061dd456c4449a343261651e50b1c9de3509ef982acb965f9778a4f5f3d3bcd4a9abd9f1abeb757bcbdfb5921da21c92418939a898c60632a6ce1125c20d47
|
data/lib/taf.rb
CHANGED
@@ -8,18 +8,18 @@ module Taf
|
|
8
8
|
class BrowserFailedOpen < TafError; end
|
9
9
|
class LoginTypeFailed < TafError; end
|
10
10
|
|
11
|
-
require '
|
12
|
-
require 'watir'
|
13
|
-
require 'rubygems'
|
11
|
+
require 'colored'
|
14
12
|
require 'fileutils'
|
13
|
+
require 'faraday'
|
14
|
+
require 'json'
|
15
15
|
require 'logger'
|
16
|
-
require '
|
17
|
-
require 'time_difference'
|
18
|
-
require 'colored'
|
16
|
+
require 'open3'
|
19
17
|
require 'optparse'
|
20
|
-
require '
|
18
|
+
require 'rubygems'
|
21
19
|
require 'securerandom'
|
22
|
-
require '
|
20
|
+
require 'selenium-webdriver'
|
21
|
+
require 'time_difference'
|
22
|
+
require 'watir'
|
23
23
|
|
24
24
|
require 'taf/browser'
|
25
25
|
require 'taf/cmd_line'
|
data/lib/taf/browser.rb
CHANGED
@@ -9,14 +9,20 @@
|
|
9
9
|
module Taf
|
10
10
|
# browser_setup.rb - a browser functions
|
11
11
|
module Browser
|
12
|
+
# Suppoerted Browser names
|
13
|
+
@chrome_name = 'chrome'
|
14
|
+
@chrome_headless_name = 'chrome-headless'
|
15
|
+
@firefox_name = 'firefox'
|
16
|
+
@firefox_headless_name = 'firefox-headless'
|
17
|
+
|
12
18
|
# open_browser function
|
13
19
|
def self.open_browser
|
14
20
|
browser = Taf::CMDLine.browser_type.downcase
|
15
21
|
case browser
|
16
|
-
when
|
17
|
-
when
|
18
|
-
when
|
19
|
-
when
|
22
|
+
when @chrome_name then chrome
|
23
|
+
when @chrome_headless_name then chrome_headless
|
24
|
+
when @firefox_name then firefox
|
25
|
+
when @firefox_headless_name then firefox_headless
|
20
26
|
else
|
21
27
|
raise Taf::BrowserFailedOpen,
|
22
28
|
"unable to open selected browser: #{browser}"
|
@@ -77,27 +83,27 @@ module Taf
|
|
77
83
|
def self.browser_version
|
78
84
|
browser_name = Taf::CMDLine.browser_type.downcase
|
79
85
|
case browser_name
|
80
|
-
when
|
86
|
+
when @chrome_name, @chrome_headless_name
|
81
87
|
@browser.driver.capabilities[:version]
|
82
|
-
when
|
88
|
+
when @firefox_name, @firefox_headless_name
|
83
89
|
@browser.execute_script('return navigator.userAgent;').split('/')[-1]
|
90
|
+
else
|
91
|
+
'No Browser version'
|
84
92
|
end
|
85
|
-
rescue StandardError
|
86
|
-
'No Browser version'
|
87
93
|
end
|
88
94
|
|
89
95
|
# Check platform
|
90
96
|
def self.browser_platform
|
91
97
|
browser_name = Taf::CMDLine.browser_type.downcase
|
92
98
|
case browser_name
|
93
|
-
when
|
99
|
+
when @chrome_name, @chrome_headless_name
|
94
100
|
@browser.execute_script('return navigator.userAgent;')
|
95
101
|
.split(';')[1].split(')')[0]
|
96
|
-
when
|
102
|
+
when @firefox_name, @firefox_headless_name
|
97
103
|
@browser.execute_script('return navigator.userAgent;').split(';')[1]
|
104
|
+
else
|
105
|
+
'No Platform found'
|
98
106
|
end
|
99
|
-
rescue StandardError
|
100
|
-
'No Platform found'
|
101
107
|
end
|
102
108
|
end
|
103
109
|
end
|
data/lib/taf/cmd_line.rb
CHANGED
@@ -22,7 +22,7 @@ module Taf
|
|
22
22
|
|
23
23
|
def self.browser(browser)
|
24
24
|
@browser_type = browser
|
25
|
-
unless [
|
25
|
+
unless %w[chrome chrome-headless firefox firefox-headless]
|
26
26
|
.include?(@browser_type)
|
27
27
|
Taf::MyLog.log.warn 'A valid Browser has not been supplied as a' \
|
28
28
|
' command-line parameter as expected'
|
data/lib/taf/test_engine.rb
CHANGED
@@ -9,6 +9,34 @@
|
|
9
9
|
module Taf
|
10
10
|
# test_engine.rb - controls the iteration through the test suite and specs
|
11
11
|
module TestEngine
|
12
|
+
def self.get_test_data(test_file_name)
|
13
|
+
# read in the test data
|
14
|
+
tests = Taf::Parser.read_test_data(test_file_name)
|
15
|
+
tests
|
16
|
+
# if unable to read the test data, show the error and move onto the
|
17
|
+
# next file (if there is one)
|
18
|
+
rescue StandardError => e
|
19
|
+
Taf::MyLog.log.warn 'Terminating the current test spec: ' \
|
20
|
+
"#{test_file_name} #{e}"
|
21
|
+
Taf::MyLog.log.info
|
22
|
+
'...continuing with the next test file (if there is one)'
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.get_step_data(test_file_name, tests, metrics)
|
26
|
+
tests['steps'].each_with_index do |test_step, test_step_idx|
|
27
|
+
test_step_idx += 1
|
28
|
+
|
29
|
+
parsed_steps = Taf::Parser.parse_test_step_data(test_step)
|
30
|
+
|
31
|
+
# process the test step data
|
32
|
+
Taf::TestSteps.process_test_steps(test_file_name, test_step_idx,
|
33
|
+
parsed_steps, metrics)
|
34
|
+
end
|
35
|
+
rescue Taf::TafError => e
|
36
|
+
warn e
|
37
|
+
Taf::MyLog.log.warn e
|
38
|
+
end
|
39
|
+
|
12
40
|
# process the test files to execute the tests
|
13
41
|
def self.process_testfiles
|
14
42
|
total_passes = 0
|
@@ -20,37 +48,13 @@ module Taf
|
|
20
48
|
metrics = Struct.new(:stepPasses, :stepFailures, :stepSkipped)
|
21
49
|
.new(0, 0, 0)
|
22
50
|
|
23
|
-
|
24
|
-
# read in the test data
|
25
|
-
tests = Taf::Parser.read_test_data(test_file_name)
|
26
|
-
# if unable to read the test data, show the error and move onto the
|
27
|
-
# next file (if there is one)
|
28
|
-
rescue StandardError => e
|
29
|
-
Taf::MyLog.log.warn 'Terminating the current test spec: ' \
|
30
|
-
"#{test_file_name} #{e}"
|
31
|
-
Taf::MyLog.log.info
|
32
|
-
'...continuing with the next test file (if there is one)'
|
33
|
-
end
|
51
|
+
tests = get_test_data(test_file_name)
|
34
52
|
|
35
53
|
# create project folders - these only need creating once per test suite
|
36
54
|
Taf::CreateDirectories.construct_projectdirs
|
37
55
|
|
38
56
|
Taf::Browser.open_browser
|
39
|
-
|
40
|
-
begin
|
41
|
-
tests['steps'].each_with_index do |test_step, test_step_idx|
|
42
|
-
test_step_idx += 1
|
43
|
-
|
44
|
-
parsed_steps = Taf::Parser.parse_test_step_data(test_step)
|
45
|
-
|
46
|
-
# process the test step data
|
47
|
-
Taf::TestSteps.process_test_steps(test_file_name, test_step_idx,
|
48
|
-
parsed_steps, metrics)
|
49
|
-
end
|
50
|
-
rescue Taf::TafError => e
|
51
|
-
warn e
|
52
|
-
Taf::MyLog.log.warn e
|
53
|
-
end
|
57
|
+
get_step_data(test_file_name, tests, metrics)
|
54
58
|
|
55
59
|
# output the test results summary to console
|
56
60
|
Taf::ReportSummary.test_step_summary(test_file_name, test_file_idx,
|
@@ -9,8 +9,10 @@ module Taf
|
|
9
9
|
def initialize(step_attributes)
|
10
10
|
@value = step_attributes[:testvalue]
|
11
11
|
@value2 = step_attributes[:testvalue2]
|
12
|
+
@value3 = step_attributes[:testvalue3]
|
12
13
|
@locate = step_attributes[:locate]
|
13
14
|
@locate2 = step_attributes[:locate2]
|
15
|
+
@locate3 = step_attributes[:locate3]
|
14
16
|
end
|
15
17
|
|
16
18
|
def self.register(name)
|
@@ -45,7 +47,7 @@ module Taf
|
|
45
47
|
end
|
46
48
|
|
47
49
|
def mem_word_check(user, b_title_sucess)
|
48
|
-
if Taf::Browser.b.title.eql?('Memorable word')
|
50
|
+
if Taf::Browser.b.title.eql?('Memorable word Portal')
|
49
51
|
portal_mem_word(user, b_title_sucess)
|
50
52
|
elsif Taf::Browser.b.title.eql?(b_title_sucess)
|
51
53
|
Taf::MyLog.log.info("User: #{user} has logged in successful.")
|
@@ -27,12 +27,18 @@ module Taf
|
|
27
27
|
ele = Taf::Browser.b.send(@elms[index], "#{@locate}": @value)
|
28
28
|
|
29
29
|
ele.wait_until(&:exists?)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
30
|
+
|
31
|
+
if ele.value == @value2
|
32
|
+
Taf::MyLog.log.info(
|
33
|
+
"Textbox: #{@value} has correct value: #{@value2}"
|
34
|
+
)
|
35
|
+
true
|
36
|
+
else
|
37
|
+
Taf::MyLog.log.warn(
|
38
|
+
"Textbox: got #{ele.value}, expected #{@value2}"
|
39
|
+
)
|
40
|
+
false
|
41
|
+
end
|
36
42
|
end
|
37
43
|
end
|
38
44
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Taf
|
4
|
+
module TestSteps
|
5
|
+
module Handlers
|
6
|
+
# Generate an RSA token for use with 2FA login.
|
7
|
+
class GenerateToken < Base
|
8
|
+
register :generate_token
|
9
|
+
|
10
|
+
def perform
|
11
|
+
raise 'TOKEN_SEED env var not set' unless ENV['TOKEN_SEED']
|
12
|
+
|
13
|
+
# Generate token using the seed from the environment.
|
14
|
+
_, stdout, stderr, wait_thr = Open3.popen3(
|
15
|
+
'stoken', '--file', ENV['TOKEN_SEED']
|
16
|
+
)
|
17
|
+
|
18
|
+
raise stderr.gets unless wait_thr.value.success?
|
19
|
+
|
20
|
+
Taf::Browser.b.send(:text_field, "#{@locate}": @value)
|
21
|
+
.wait_until(&:exists?).send_keys stdout.gets
|
22
|
+
|
23
|
+
stdout.close
|
24
|
+
stderr.close
|
25
|
+
|
26
|
+
true
|
27
|
+
rescue StandardError => e
|
28
|
+
Taf::MyLog.log.warn("Error generating token: #{e}")
|
29
|
+
|
30
|
+
false
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -12,27 +12,40 @@ module Taf
|
|
12
12
|
user = ENV[user.to_s] if ENV[user.to_s]
|
13
13
|
|
14
14
|
login_user(user)
|
15
|
-
rescue StandardError
|
16
|
-
Taf::MyLog.log.error "unable to find login: #{@value}"
|
17
|
-
raise Taf::LoginTypeFailed
|
18
15
|
end
|
19
16
|
|
20
17
|
def login_user(user)
|
21
18
|
case @value.downcase
|
22
|
-
when '
|
23
|
-
|
24
|
-
when '
|
25
|
-
|
19
|
+
when 'admin_portal_login' then admin_portal_login(user)
|
20
|
+
when 'portal_login' then portal_login(user)
|
21
|
+
when 'sint_login' then sint_login(user)
|
22
|
+
when 'sso_login' then sso_login(user)
|
23
|
+
else
|
24
|
+
Taf::MyLog.log.error "unable to find login: #{@value}"
|
25
|
+
raise Taf::LoginTypeFailed
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
private
|
30
30
|
|
31
|
+
def admin_portal_login(user)
|
32
|
+
url = ENV['ADMINL_URL']
|
33
|
+
pass = ENV['ADMIN_USER_PASS']
|
34
|
+
b_title = 'Log in Portal Admin'
|
35
|
+
b_title_sucess = 'Home Admin Portal'
|
36
|
+
user_elm = 'admin_username'
|
37
|
+
pass_elm = 'admin_password'
|
38
|
+
|
39
|
+
Taf::Browser.b.goto(url)
|
40
|
+
login_process(b_title, user_elm, pass_elm, user, pass)
|
41
|
+
login_check(b_title_sucess, user)
|
42
|
+
end
|
43
|
+
|
31
44
|
def portal_login(user)
|
32
45
|
url = ENV['PORTAL_URL']
|
33
46
|
pass = ENV['PORTAL_USER_PASS']
|
34
|
-
b_title = 'Log in'
|
35
|
-
b_title_sucess = 'Home'
|
47
|
+
b_title = 'Log in Portal'
|
48
|
+
b_title_sucess = 'Home Portal'
|
36
49
|
user_elm = 'user_email'
|
37
50
|
pass_elm = 'user_password'
|
38
51
|
|
@@ -53,6 +66,19 @@ module Taf
|
|
53
66
|
login_process(b_title, user_elm, pass_elm, user, pass)
|
54
67
|
login_check(b_title_sucess, user)
|
55
68
|
end
|
69
|
+
|
70
|
+
def sint_login(user)
|
71
|
+
url = ENV['SINT_URL']
|
72
|
+
pass = ENV['SINT_USER_PASS']
|
73
|
+
b_title = 'SINT'
|
74
|
+
b_title_sucess = 'SINT'
|
75
|
+
user_elm = 'user_username'
|
76
|
+
pass_elm = 'user_password'
|
77
|
+
|
78
|
+
Taf::Browser.b.goto(url)
|
79
|
+
login_process(b_title, user_elm, pass_elm, user, pass)
|
80
|
+
login_check(b_title_sucess, user)
|
81
|
+
end
|
56
82
|
end
|
57
83
|
end
|
58
84
|
end
|
@@ -7,19 +7,21 @@ module Taf
|
|
7
7
|
class PingTest < Base
|
8
8
|
register :ping_test
|
9
9
|
|
10
|
-
# TODO: retry every 'x' until timeout reached.
|
11
10
|
def perform
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
tries ||= 20
|
12
|
+
Faraday.get(@value)
|
13
|
+
rescue Faraday::Error
|
14
|
+
if (tries -= 1).positive?
|
15
|
+
sleep 1
|
16
|
+
puts "Failed to ping: #{@value} - Retries left: #{tries}"
|
17
|
+
retry
|
19
18
|
else
|
20
19
|
Taf::MyLog.log.warn("Failed to ping: #{@value}")
|
21
|
-
|
20
|
+
false
|
22
21
|
end
|
22
|
+
else
|
23
|
+
Taf::MyLog.log.info("Pinged successfully: #{@value}")
|
24
|
+
true
|
23
25
|
end
|
24
26
|
end
|
25
27
|
end
|
data/lib/taf/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: taf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Perrett
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-08-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,14 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.02'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.02'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.8'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.8'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler-audit
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,47 +67,47 @@ dependencies:
|
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '1.2'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: faraday
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
75
|
+
version: '0.15'
|
62
76
|
type: :runtime
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
82
|
+
version: '0.15'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: json
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
89
|
+
version: '2.2'
|
76
90
|
type: :runtime
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
96
|
+
version: '2.2'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: logger
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: '2
|
103
|
+
version: '1.2'
|
90
104
|
type: :runtime
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: '2
|
110
|
+
version: '1.2'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: rubygems-update
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -188,6 +202,7 @@ files:
|
|
188
202
|
- lib/taf/test_steps/handlers/base/check_url.rb
|
189
203
|
- lib/taf/test_steps/handlers/base/click_button.rb
|
190
204
|
- lib/taf/test_steps/handlers/base/execute_system_command.rb
|
205
|
+
- lib/taf/test_steps/handlers/base/generate_token.rb
|
191
206
|
- lib/taf/test_steps/handlers/base/handle_browser_window.rb
|
192
207
|
- lib/taf/test_steps/handlers/base/ipause.rb
|
193
208
|
- lib/taf/test_steps/handlers/base/list_all_dropdowns_values.rb
|