Ifd_Automation 2.6 → 2.7
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/generate.rb +21 -3
- data/bin/helper.rb +5 -4
- data/lib/Ifd_Automation/require_libs.rb +9 -6
- data/lib/Ifd_Automation/version.rb +1 -1
- data/lib/helper/{assertion_helpers.rb → assertion_helper.rb} +5 -5
- data/lib/helper/auto_util.rb +164 -0
- data/lib/helper/database_helper.rb +81 -0
- data/lib/helper/file_helper.rb +36 -0
- data/lib/helper/mail_helper.rb +58 -0
- data/lib/helper/rest_helper.rb +91 -0
- data/lib/helper/soap_helper.rb +59 -0
- data/lib/helper/ssh_helper.rb +39 -0
- data/lib/helper/web_steps_helper.rb +447 -0
- data/project/Dockerfile +20 -0
- data/project/Gemfile.lock +176 -0
- data/project/README.md +60 -0
- data/project/cucumber.yml +6 -0
- data/project/docker-compose.yml +7 -0
- data/project/features/TestData/globalData.yml +3 -1
- data/project/features/TestSuite/WebGUI.feature +16 -2
- data/project/features/step_definitions/IFD_Libraries/REST_steps.rb +34 -0
- data/project/features/step_definitions/IFD_Libraries/SOAP_steps.rb +38 -0
- data/project/features/step_definitions/IFD_Libraries/database_steps.rb +44 -0
- data/{lib/Ifd_Automation/dynamic_store_vavue_steps.rb → project/features/step_definitions/IFD_Libraries/dynamic_store_value_steps.rb} +8 -10
- data/project/features/step_definitions/IFD_Libraries/email_steps.rb +36 -0
- data/project/features/step_definitions/IFD_Libraries/file_steps.rb +11 -0
- data/project/features/step_definitions/IFD_Libraries/ssh_steps.rb +20 -0
- data/{lib/Ifd_Automation → project/features/step_definitions/IFD_Libraries}/web_steps.rb +18 -8
- data/project/features/step_definitions/lib_steps/actionwords.rb +14 -10
- data/project/features/step_definitions/lib_steps/steps.rb +6 -0
- data/project/features/step_definitions/repositories/project_object.yml +2 -6
- data/project/features/support/env.rb +18 -18
- data/project/features/support/hooks.rb +22 -59
- metadata +45 -17
- data/lib/Ifd_Automation/REST_steps.rb +0 -90
- data/lib/Ifd_Automation/SOAP_steps.rb +0 -68
- data/lib/Ifd_Automation/database_steps.rb +0 -80
- data/lib/Ifd_Automation/email_steps.rb +0 -72
- data/lib/Ifd_Automation/file_steps.rb +0 -24
- data/lib/Ifd_Automation/ssh_steps.rb +0 -38
- data/lib/helper/auto_utils.rb +0 -67
- data/lib/helper/connection_helpers.rb +0 -15
- data/lib/helper/core.rb +0 -646
- data/lib/helper/mail_helpers.rb +0 -17
- data/lib/helper/web_steps_helpers.rb +0 -176
- data/project/features/step_definitions/lib_steps/test.rb +0 -6
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'action_mailer'
|
2
|
+
# Example:
|
3
|
+
#
|
4
|
+
# Then I send an email with:
|
5
|
+
# """
|
6
|
+
# From: from@example.com
|
7
|
+
# Reply-To: reply-to@example.com
|
8
|
+
# To: anh.pham@infodation.vn
|
9
|
+
# Subject: SUBJECT
|
10
|
+
# Attachments: globalData.yml
|
11
|
+
|
12
|
+
# BODY
|
13
|
+
# """
|
14
|
+
#
|
15
|
+
Then /^I send an e?mail with:$/ do |raw_data|
|
16
|
+
IFD_Email.send_email(raw_data)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Example:
|
20
|
+
#
|
21
|
+
# Then I should receive an email with:
|
22
|
+
# """
|
23
|
+
# From: from@example.com
|
24
|
+
# Reply-To: reply-to@example.com
|
25
|
+
# To: anh.pham@infodation.vn
|
26
|
+
# Subject: SUBJECT
|
27
|
+
# Attachments: globalData.yml
|
28
|
+
|
29
|
+
# BODY
|
30
|
+
# """
|
31
|
+
#
|
32
|
+
|
33
|
+
Then /^I should receive an e?mail with:$/ do |raw_data|
|
34
|
+
IFD_Email.verify_receive_email(raw_data)
|
35
|
+
end
|
36
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Then /^I delete test file "(.*)"$/ do |file_name|
|
2
|
+
IFD_File.delete_file(file_name)
|
3
|
+
end
|
4
|
+
|
5
|
+
Given /^I read data from file "(.*)"$/ do |file_name|
|
6
|
+
IFD_File.read_file(file_name)
|
7
|
+
end
|
8
|
+
|
9
|
+
Given /I execute file "(.*)" from windows server "(.*)"/ do |filename, file_location|
|
10
|
+
IFD_File.execute_windows_file(filename, file_location)
|
11
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
When /^I SSH to "([^\"]*)" with the following credentials:$/ do |hostname, table|
|
2
|
+
IFD_Ssh.connect_to_server_with_credential(hostname, table)
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^I run SSH command "([^\"]*)"$/ do |command|
|
6
|
+
IFD_Ssh.exec_command(command)
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
Then /^show me the SSH output result$/ do
|
11
|
+
IFD_Ssh.print_output
|
12
|
+
end
|
13
|
+
|
14
|
+
Then /^I should see "([^\"]*)" in the SSH output$/ do |string|
|
15
|
+
IFD_Ssh.verify_output(string)
|
16
|
+
end
|
17
|
+
|
18
|
+
When /^I store the result of SSH as "(.*?)"$/ do |var_name|
|
19
|
+
IFD_Ssh.store_result_string(var_name)
|
20
|
+
end
|
@@ -1,8 +1,7 @@
|
|
1
|
-
require_relative 'require_libs'
|
2
1
|
|
3
2
|
# Navigate to a particular page
|
4
3
|
Given(/^I am on the "([^"]*)" page$/) do |url|
|
5
|
-
url = check_dynamic_value
|
4
|
+
url = Utils.check_dynamic_value(url)
|
6
5
|
execute_openbrowser(url)
|
7
6
|
end
|
8
7
|
|
@@ -13,17 +12,17 @@ end
|
|
13
12
|
|
14
13
|
# Finds a button or link by id, text or value and clicks it
|
15
14
|
And /^I click on "([^\"]*)"$/ do |object|
|
16
|
-
|
15
|
+
execute_click(object)
|
17
16
|
end
|
18
17
|
|
19
18
|
# double click on web element
|
20
19
|
Then /^I double click on element "(.*?)"$/ do |element|
|
21
|
-
|
20
|
+
double_click(element)
|
22
21
|
end
|
23
22
|
|
24
23
|
# Fill in a text box or text area with a value
|
25
24
|
And /^I set text on "(.*?)" with "(.*?)"$/ do |object, text|
|
26
|
-
text = check_dynamic_value text
|
25
|
+
text = Utils.check_dynamic_value text
|
27
26
|
execute_settext(object, text)
|
28
27
|
end
|
29
28
|
|
@@ -54,7 +53,7 @@ end
|
|
54
53
|
|
55
54
|
# check property for object
|
56
55
|
Then /^I check property "(.*?)" with "(.*?)" has( | not)? value "(.*?)"$/ do |object, property, negate, value|
|
57
|
-
value = bind_with_dyn_vars value
|
56
|
+
value = Utils.bind_with_dyn_vars value
|
58
57
|
execute_checkproperty(object, property, negate, value)
|
59
58
|
end
|
60
59
|
|
@@ -63,12 +62,10 @@ Then(/^I should see alert text as "(.*?)"$/) do |actual_value|
|
|
63
62
|
check_alert_text(actual_value)
|
64
63
|
end
|
65
64
|
|
66
|
-
# NEW
|
67
65
|
Given /^I move mouse to element "(.*)" and click$/ do |object|
|
68
66
|
execute_mousehoverandclick(object)
|
69
67
|
end
|
70
68
|
|
71
|
-
# NEW
|
72
69
|
And /^remove attribute "(.*)" on object "(.*)"$/ do |attr, object|
|
73
70
|
remove_element_attribute object, attr
|
74
71
|
end
|
@@ -77,3 +74,16 @@ end
|
|
77
74
|
And /^I set state on "(.*?)" with "(.*?)"$/ do |object, state|
|
78
75
|
execute_setstate(object, state)
|
79
76
|
end
|
77
|
+
|
78
|
+
And /I resize window screen to "(.*)","(.*)"/ do |x,y|
|
79
|
+
resize_window_screen(x,y)
|
80
|
+
end
|
81
|
+
|
82
|
+
And /I verify object "(.*)" with "(.*)" has value "(.*)"/ do |object,style,expected_value|
|
83
|
+
actual_value = get_computed_style(object,style)
|
84
|
+
IFD_Assertion.assert_string_equal(expected_value,actual_value)
|
85
|
+
end
|
86
|
+
|
87
|
+
Then /^I should( not)? see page title as (.*)$/ do |present, title|
|
88
|
+
check_title(title, present.empty?)
|
89
|
+
end
|
@@ -1,12 +1,16 @@
|
|
1
1
|
module Actionwords
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
2
|
+
|
3
|
+
def login_to_system
|
4
|
+
step %{I am on the "params='login_page'" page}
|
5
|
+
step %{I set text on "textbox_username" with "params='login_user'"}
|
6
|
+
step %{I set text on "textbox_password" with "params='login_pass'"}
|
7
|
+
step %{I click on "aa"}
|
8
|
+
end
|
9
|
+
#
|
10
|
+
# def send_soap_with_operation_and_data(operation,data)
|
11
|
+
#
|
12
|
+
# # @response = IFD_Soap.call_and_fail_gracefully(@SOAPclient, operation.downcase.to_sym, xml: Utils.eval_with_dyn_vars(data) )
|
13
|
+
# p Utils.eval_with_dyn_vars(data)
|
14
|
+
# end
|
15
|
+
|
12
16
|
end
|
@@ -1,6 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
login.textbox_username: {css_selector: '#login_user'}
|
4
|
-
login.textbox_password: {css_selector: '#login_pass'}
|
5
|
-
login.label_message_error: {css_selector: '.ifd-message-error'}
|
6
|
-
login.button_login: {css_selector: '#wp-submit'}
|
1
|
+
textbox_username: {css_selector: '#userField'}
|
2
|
+
textbox_password: {css_selector: '#passwordField'}
|
@@ -14,12 +14,12 @@ require 'yaml'
|
|
14
14
|
require 'selenium-webdriver'
|
15
15
|
require 'Ifd_Automation'
|
16
16
|
|
17
|
-
if ENV["
|
18
|
-
raise "ERROR***: MISSING BROWSER... Supported Browsers: Chrome/Firefox."
|
17
|
+
if ENV["BROWSER"].nil?
|
18
|
+
raise "ERROR***: MISSING BROWSER... Supported Browsers: Chrome/Firefox. Example: 'BROWSER=chrome'"
|
19
19
|
end
|
20
20
|
|
21
|
-
$_CFWEB['Default Browser'] = ENV["
|
22
|
-
$_CFWEB['Wait Time'] = ENV["wait_time"] ||
|
21
|
+
$_CFWEB['Default Browser'] = ENV["BROWSER"].downcase
|
22
|
+
$_CFWEB['Wait Time'] = ENV["wait_time"] || 10
|
23
23
|
$_CFWEB['Print Log'] = ENV["print_log"]
|
24
24
|
$_CFWEB['Maximize Browser'] = ENV["maximize_browser"] || true
|
25
25
|
$SEND_EMAIL_USERNAME = $PARAMS["send_email_username"]
|
@@ -46,13 +46,10 @@ Mail.defaults do
|
|
46
46
|
}
|
47
47
|
end
|
48
48
|
Capybara.configure do |config|
|
49
|
-
# config.app_host = $_CFWEB['Page Address']
|
50
49
|
config.default_max_wait_time = $_CFWEB['Wait Time']
|
51
|
-
# config.run_server = false
|
52
50
|
config.default_driver = :selenium
|
53
51
|
config.default_selector = :css
|
54
52
|
config.ignore_hidden_elements = true
|
55
|
-
#config.visible_text_only = true
|
56
53
|
end
|
57
54
|
|
58
55
|
def register_selenium_remote_driver(browser)
|
@@ -79,6 +76,8 @@ def register_selenium_remote_driver(browser)
|
|
79
76
|
url: "http://#{ENV["SELENIUM_SERVER"]}:4444/wd/hub",
|
80
77
|
desired_capabilities: caps)
|
81
78
|
end
|
79
|
+
else
|
80
|
+
raise "ERROR: Browser: #{browser} is not supported"
|
82
81
|
end
|
83
82
|
end
|
84
83
|
|
@@ -99,7 +98,7 @@ def register_selenium_local_driver(browser)
|
|
99
98
|
args << "--test-type" #to fix the error of chrome "you are using an unsupported command-line flag ignore-certificate-errors"
|
100
99
|
Capybara::Selenium::Driver.new(app, :browser => browser.to_sym, :prefs => prefs, :args => args)
|
101
100
|
else
|
102
|
-
|
101
|
+
raise "ERROR: Browser: #{browser} is not supported"
|
103
102
|
end
|
104
103
|
end
|
105
104
|
end
|
@@ -107,7 +106,7 @@ end
|
|
107
106
|
case ENV["SELENIUM"]
|
108
107
|
when "remote"
|
109
108
|
if ENV["SELENIUM_SERVER"].nil?
|
110
|
-
raise "ERROR***: MISSING SELENIUM_SERVER IP..."
|
109
|
+
raise "ERROR***: MISSING SELENIUM_SERVER IP... Example: 'SELENIUM_SERVER=localhost'"
|
111
110
|
else
|
112
111
|
register_selenium_remote_driver($_CFWEB['Default Browser'])
|
113
112
|
end
|
@@ -116,12 +115,13 @@ case ENV["SELENIUM"]
|
|
116
115
|
end
|
117
116
|
|
118
117
|
# Available execution environment variables
|
119
|
-
# -
|
120
|
-
# -
|
121
|
-
# -
|
122
|
-
# -
|
123
|
-
# -
|
124
|
-
# -
|
125
|
-
# -
|
126
|
-
# -
|
127
|
-
# -
|
118
|
+
# - SELENIUM = remote
|
119
|
+
# - SELENIUM_SERVER = 10.0.0.1
|
120
|
+
# - BROWSER = "chrome"/"firefox"
|
121
|
+
# - wait_time = 30
|
122
|
+
# - print_log = true/false
|
123
|
+
# - maximize_browser = true/false
|
124
|
+
# - recordVideo
|
125
|
+
# - name
|
126
|
+
# - build
|
127
|
+
# - save_screenshot
|
@@ -1,59 +1,22 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
# end
|
24
|
-
# After('@FF') do
|
25
|
-
# $_CFWEB['Default Browser'] = $_Old_Default_Browser
|
26
|
-
# end
|
27
|
-
#
|
28
|
-
# Before do
|
29
|
-
# begin
|
30
|
-
# browser = Capybara.current_session.driver.browser
|
31
|
-
# browser.manage.delete_all_cookies
|
32
|
-
# rescue StandardError => myStandardError
|
33
|
-
# put_log "\n>>> Error: #{myStandardError}"
|
34
|
-
# end
|
35
|
-
# end
|
36
|
-
#
|
37
|
-
# # After do |scenario|
|
38
|
-
# # file_name = 'failed_%s.png' % rand(1000).to_s
|
39
|
-
# # page.save_screenshot($screenshot+file_name) if scenario.failed?
|
40
|
-
# # begin
|
41
|
-
# # Capybara.page.driver.quit
|
42
|
-
# # Capybara.send(:session_pool).delete_if { |key, value| key =~ /selenium/i }
|
43
|
-
# # rescue StandardError => myStandardError
|
44
|
-
# # put_log "\n>>> Error: #{myStandardError}"
|
45
|
-
# # end
|
46
|
-
# # end
|
47
|
-
# #
|
48
|
-
# # at_exit do
|
49
|
-
# # end
|
50
|
-
#
|
51
|
-
# AfterConfiguration do |config|
|
52
|
-
# end
|
53
|
-
#
|
54
|
-
# Around do |scenario, block|
|
55
|
-
# block.call
|
56
|
-
# end
|
57
|
-
#
|
58
|
-
# AfterStep do |scenario|
|
59
|
-
# end
|
1
|
+
|
2
|
+
Before do
|
3
|
+
begin
|
4
|
+
browser = Capybara.current_session.driver.browser
|
5
|
+
browser.manage.delete_all_cookies
|
6
|
+
rescue StandardError => myStandardError
|
7
|
+
raise "\n>>> Error: #{myStandardError}"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
After do |scenario|
|
12
|
+
if ENV['save_screenshot'] == "true"
|
13
|
+
file_name = 'failed_%s.png' % rand(1000).to_s
|
14
|
+
page.save_screenshot($screenshot+file_name) if scenario.failed?
|
15
|
+
begin
|
16
|
+
Capybara.page.driver.quit
|
17
|
+
Capybara.send(:session_pool).delete_if { |key, value| key =~ /selenium/i }
|
18
|
+
rescue StandardError => myStandardError
|
19
|
+
raise "\n>>> Error: #{myStandardError}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Ifd_Automation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '2.
|
4
|
+
version: '2.7'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anh Pham
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-04-
|
11
|
+
date: 2018-04-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: selenium-webdriver
|
@@ -220,6 +220,26 @@ dependencies:
|
|
220
220
|
- - ">="
|
221
221
|
- !ruby/object:Gem::Version
|
222
222
|
version: 3.7.0
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: parallel_tests
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - "~>"
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '2.7'
|
230
|
+
- - ">="
|
231
|
+
- !ruby/object:Gem::Version
|
232
|
+
version: 2.7.1
|
233
|
+
type: :runtime
|
234
|
+
prerelease: false
|
235
|
+
version_requirements: !ruby/object:Gem::Requirement
|
236
|
+
requirements:
|
237
|
+
- - "~>"
|
238
|
+
- !ruby/object:Gem::Version
|
239
|
+
version: '2.7'
|
240
|
+
- - ">="
|
241
|
+
- !ruby/object:Gem::Version
|
242
|
+
version: 2.7.1
|
223
243
|
description: Behavior driven development (BDD) approach to write automation test script
|
224
244
|
to test GUI, RESTful, SOAP, Database, eMail.
|
225
245
|
email:
|
@@ -236,29 +256,37 @@ files:
|
|
236
256
|
- bin/helper.rb
|
237
257
|
- bin/setup
|
238
258
|
- lib/Ifd_Automation.rb
|
239
|
-
- lib/Ifd_Automation/REST_steps.rb
|
240
|
-
- lib/Ifd_Automation/SOAP_steps.rb
|
241
259
|
- lib/Ifd_Automation/all_steps.rb
|
242
|
-
- lib/Ifd_Automation/database_steps.rb
|
243
|
-
- lib/Ifd_Automation/dynamic_store_vavue_steps.rb
|
244
|
-
- lib/Ifd_Automation/email_steps.rb
|
245
|
-
- lib/Ifd_Automation/file_steps.rb
|
246
260
|
- lib/Ifd_Automation/require_libs.rb
|
247
|
-
- lib/Ifd_Automation/ssh_steps.rb
|
248
261
|
- lib/Ifd_Automation/version.rb
|
249
|
-
- lib/
|
250
|
-
- lib/helper/
|
251
|
-
- lib/helper/
|
252
|
-
- lib/helper/
|
253
|
-
- lib/helper/
|
254
|
-
- lib/helper/
|
255
|
-
- lib/helper/
|
262
|
+
- lib/helper/assertion_helper.rb
|
263
|
+
- lib/helper/auto_util.rb
|
264
|
+
- lib/helper/database_helper.rb
|
265
|
+
- lib/helper/file_helper.rb
|
266
|
+
- lib/helper/mail_helper.rb
|
267
|
+
- lib/helper/rest_helper.rb
|
268
|
+
- lib/helper/soap_helper.rb
|
269
|
+
- lib/helper/ssh_helper.rb
|
270
|
+
- lib/helper/web_steps_helper.rb
|
271
|
+
- project/Dockerfile
|
256
272
|
- project/Gemfile
|
273
|
+
- project/Gemfile.lock
|
274
|
+
- project/README.md
|
275
|
+
- project/cucumber.yml
|
276
|
+
- project/docker-compose.yml
|
257
277
|
- project/features/Screenshot/sample.jpg
|
258
278
|
- project/features/TestData/globalData.yml
|
259
279
|
- project/features/TestSuite/WebGUI.feature
|
280
|
+
- project/features/step_definitions/IFD_Libraries/REST_steps.rb
|
281
|
+
- project/features/step_definitions/IFD_Libraries/SOAP_steps.rb
|
282
|
+
- project/features/step_definitions/IFD_Libraries/database_steps.rb
|
283
|
+
- project/features/step_definitions/IFD_Libraries/dynamic_store_value_steps.rb
|
284
|
+
- project/features/step_definitions/IFD_Libraries/email_steps.rb
|
285
|
+
- project/features/step_definitions/IFD_Libraries/file_steps.rb
|
286
|
+
- project/features/step_definitions/IFD_Libraries/ssh_steps.rb
|
287
|
+
- project/features/step_definitions/IFD_Libraries/web_steps.rb
|
260
288
|
- project/features/step_definitions/lib_steps/actionwords.rb
|
261
|
-
- project/features/step_definitions/lib_steps/
|
289
|
+
- project/features/step_definitions/lib_steps/steps.rb
|
262
290
|
- project/features/step_definitions/repositories/project_object.yml
|
263
291
|
- project/features/support/env.rb
|
264
292
|
- project/features/support/hooks.rb
|
@@ -1,90 +0,0 @@
|
|
1
|
-
require_relative 'require_libs'
|
2
|
-
require 'httparty'
|
3
|
-
require 'jsonpath'
|
4
|
-
|
5
|
-
Given /^I set headers:$/ do |data|
|
6
|
-
unless data.hashes.empty?
|
7
|
-
data = data.hashes[0]
|
8
|
-
data = JSON.parse(data) unless data.is_a? Hash
|
9
|
-
|
10
|
-
data.each_pair do |k, v|
|
11
|
-
data[k] = check_dynamic_value(v)
|
12
|
-
end
|
13
|
-
@header = data
|
14
|
-
end
|
15
|
-
p "HEADER: #{@header}"
|
16
|
-
end
|
17
|
-
|
18
|
-
When /^I send a REST (GET|PUT|POST|DELETE) request (?:for|to) "([^"]*)"(?: with the following:)?$/ do |*args|
|
19
|
-
request_type = args.shift.downcase
|
20
|
-
url = check_dynamic_value(args.shift)
|
21
|
-
put_log "Request URL: #{url}"
|
22
|
-
json_payload = args.shift
|
23
|
-
if json_payload
|
24
|
-
payload = Hash.new
|
25
|
-
JSON.parse(json_payload).each do |k1, v1|
|
26
|
-
payload[check_dynamic_value(k1)] = check_dynamic_value(v1)
|
27
|
-
end
|
28
|
-
payload = payload.to_json
|
29
|
-
end
|
30
|
-
put_log "Data Body from #{request_type} method: #{payload}"
|
31
|
-
|
32
|
-
if (payload.nil? && request_type == 'get' && @header.nil?)
|
33
|
-
@response = Request.get(url)
|
34
|
-
elsif (payload.nil? && request_type == 'get')
|
35
|
-
@response = Request.get(url, {headers: @header})
|
36
|
-
elsif (payload.nil? && request_type == 'delete' && @header.nil?)
|
37
|
-
@response = Request.delete(url)
|
38
|
-
elsif (payload.nil? && request_type == 'delete')
|
39
|
-
@response = Request.delete(url, {headers: @header})
|
40
|
-
elsif (payload && request_type == 'get' && @header.nil?)
|
41
|
-
@response = Request.get(url, {body: payload})
|
42
|
-
elsif (payload && request_type == 'get')
|
43
|
-
@response = Request.get(url, {body: payload, headers: @header})
|
44
|
-
elsif (payload && request_type == 'post' && @header.nil?)
|
45
|
-
@response = Request.post(url, {body: payload})
|
46
|
-
elsif (payload && request_type == 'post')
|
47
|
-
@response = Request.post(url, {body: payload, headers: @header})
|
48
|
-
elsif (payload && request_type == 'put' && @header.nil?)
|
49
|
-
@response = Request.put(url, {body: payload})
|
50
|
-
elsif (payload && request_type == 'put')
|
51
|
-
@response = Request.put(url, {body: payload, headers: @header})
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
Then /^I store the REST result at node "(.*)" as "(.*)"$/ do |json_path, var_name|
|
56
|
-
$context_value = JsonPath.new(json_path).on(@response.body).to_a.map(&:to_s)[0]
|
57
|
-
set_var(var_name, '$context_value')
|
58
|
-
end
|
59
|
-
|
60
|
-
When /^I print the result of REST request$/ do
|
61
|
-
puts "REST RESULT code: #{getRestResult.code}"
|
62
|
-
puts "REST RESULT body: #{getRestResult.body}"
|
63
|
-
end
|
64
|
-
|
65
|
-
Then /^I should see REST response code "([^"]*)"$/ do |code|
|
66
|
-
Assertion.assert_string_equal(code, getRestResult.code.to_s)
|
67
|
-
end
|
68
|
-
|
69
|
-
Then /^the JSON response should be:$/ do |json|
|
70
|
-
Assertion.assert_string_equal(json, getRestResult.body.to_s)
|
71
|
-
end
|
72
|
-
|
73
|
-
# Example
|
74
|
-
# Then the JSON response at node "$..id" should have "1"
|
75
|
-
Then /^the JSON response at node "(.*)" should have "(.*)"$/ do |json_path, expected|
|
76
|
-
result = JsonPath.new(json_path).on(getRestResult.body).to_a.map(&:to_s)
|
77
|
-
Assertion.assert_string_equal(expected, result[0])
|
78
|
-
end
|
79
|
-
|
80
|
-
class Request
|
81
|
-
include HTTParty
|
82
|
-
default_options.update(verify: false)
|
83
|
-
end
|
84
|
-
|
85
|
-
def getRestResult
|
86
|
-
if @response.nil?
|
87
|
-
p "WARNING***: MISSING STEPS: Please send a REST request to get response first."
|
88
|
-
end
|
89
|
-
@response
|
90
|
-
end
|