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