Ifd_Automation 2.9 → 2.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/Ifd_Automation/REST_steps.rb +33 -33
- data/lib/Ifd_Automation/SOAP_steps.rb +31 -31
- data/lib/Ifd_Automation/assertion_helper.rb +97 -0
- data/lib/Ifd_Automation/auto_util.rb +161 -0
- data/lib/Ifd_Automation/database_helper.rb +78 -0
- data/lib/Ifd_Automation/database_steps.rb +44 -44
- data/lib/Ifd_Automation/dynamic_store_value_steps.rb +18 -18
- data/lib/Ifd_Automation/email_steps.rb +31 -31
- data/lib/Ifd_Automation/file_helper.rb +33 -0
- data/lib/Ifd_Automation/file_steps.rb +9 -9
- data/lib/Ifd_Automation/mail_helper.rb +56 -0
- data/lib/Ifd_Automation/require_libs.rb +9 -9
- data/lib/Ifd_Automation/rest_helper.rb +89 -0
- data/lib/Ifd_Automation/soap_helper.rb +57 -0
- data/lib/Ifd_Automation/ssh_helper.rb +37 -0
- data/lib/Ifd_Automation/ssh_steps.rb +15 -15
- data/lib/{helper → Ifd_Automation}/step_fallback.rb +0 -0
- data/lib/{helper → Ifd_Automation}/tolerance_for_selenium_sync_issues.rb +0 -0
- data/lib/Ifd_Automation/version.rb +1 -1
- data/lib/{helper → Ifd_Automation}/web_steps_helper.rb +419 -40
- data/project/Gemfile +1 -1
- data/project/features/TestSuite/WebGUI.feature +4 -4
- data/project/features/step_definitions/lib_steps/steps_definition.rb +4 -2
- data/project/features/step_definitions/repositories/project_object.yml +2 -1
- metadata +13 -13
- data/lib/helper/assertion_helper.rb +0 -100
- data/lib/helper/auto_util.rb +0 -164
- data/lib/helper/database_helper.rb +0 -81
- data/lib/helper/file_helper.rb +0 -36
- data/lib/helper/mail_helper.rb +0 -58
- data/lib/helper/rest_helper.rb +0 -91
- data/lib/helper/soap_helper.rb +0 -59
- data/lib/helper/ssh_helper.rb +0 -39
@@ -1,36 +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
|
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
11
|
|
12
|
-
# BODY
|
13
|
-
# """
|
14
|
-
#
|
15
|
-
Then /^I send an e?mail with:$/ do |raw_data|
|
16
|
-
|
17
|
-
end
|
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
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
|
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
28
|
|
29
|
-
# BODY
|
30
|
-
# """
|
31
|
-
#
|
29
|
+
# # BODY
|
30
|
+
# # """
|
31
|
+
# #
|
32
32
|
|
33
|
-
Then /^I should receive an e?mail with:$/ do |raw_data|
|
34
|
-
|
35
|
-
end
|
33
|
+
# Then /^I should receive an e?mail with:$/ do |raw_data|
|
34
|
+
# IFD_Email.verify_receive_email(raw_data)
|
35
|
+
# end
|
36
36
|
|
@@ -0,0 +1,33 @@
|
|
1
|
+
|
2
|
+
def delete_file(file_name)
|
3
|
+
file_path = ($test_data_dir + file_name.gsub(" ", "_"))
|
4
|
+
if File.exists?(file_path)
|
5
|
+
File.delete(file_path)
|
6
|
+
puts "#{file_name} is deleted successfully"
|
7
|
+
else
|
8
|
+
puts "File #{file_name} does not exists"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def read_file(file_name)
|
13
|
+
@file_data = ""
|
14
|
+
file_path = $test_data_dir + file_name.downcase
|
15
|
+
if File.exist?(file_path)
|
16
|
+
file = File.open(file_path)
|
17
|
+
@file_data += file.read
|
18
|
+
file.close
|
19
|
+
else
|
20
|
+
raise "*** WARNING: File #{file_name} does not exist."
|
21
|
+
end
|
22
|
+
p @file_data
|
23
|
+
end
|
24
|
+
|
25
|
+
def execute_windows_file(filename, file_location)
|
26
|
+
file = file_location + filename
|
27
|
+
p file
|
28
|
+
if File.exist? file
|
29
|
+
system("'"+file+"'")
|
30
|
+
else
|
31
|
+
raise "*** ERROR: File #{file} is not existed."
|
32
|
+
end
|
33
|
+
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
Then /^I delete test file "(.*)"$/ do |file_name|
|
2
|
-
|
3
|
-
end
|
1
|
+
# Then /^I delete test file "(.*)"$/ do |file_name|
|
2
|
+
# IFD_File.delete_file(file_name)
|
3
|
+
# end
|
4
4
|
|
5
|
-
Given /^I read data from file "(.*)"$/ do |file_name|
|
6
|
-
|
7
|
-
end
|
5
|
+
# Given /^I read data from file "(.*)"$/ do |file_name|
|
6
|
+
# IFD_File.read_file(file_name)
|
7
|
+
# end
|
8
8
|
|
9
|
-
Given /I execute file "(.*)" from windows server "(.*)"/ do |filename, file_location|
|
10
|
-
|
11
|
-
end
|
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,56 @@
|
|
1
|
+
require 'mail'
|
2
|
+
# require 'email_spec'
|
3
|
+
# include EmailSpec::Helpers
|
4
|
+
# include EmailSpec::Matcher
|
5
|
+
|
6
|
+
def send_email(raw_data)
|
7
|
+
include Mail::Matchers
|
8
|
+
raw_data.strip!
|
9
|
+
header, body = raw_data.split(/\n\n/, 2) # 2: maximum number of fields
|
10
|
+
conditions = {}
|
11
|
+
header.split("\n").each do |row|
|
12
|
+
if row.lstrip.chop.match(/^[a-z\-]+:/i)
|
13
|
+
key, value = row.split(":", 2)
|
14
|
+
conditions[key.gsub(' ','').underscore.to_sym] = value.gsub(' ','')
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
conditions[:body] = body if body
|
19
|
+
filepath = ($test_data_dir + conditions[:attachments] if conditions[:attachments])
|
20
|
+
# Mail::TestMailer.deliveries.clear
|
21
|
+
Mail.deliver do
|
22
|
+
from "abc@gmail.com"
|
23
|
+
to to_address if conditions[:to]
|
24
|
+
subject subject if conditions[:subject]
|
25
|
+
body body_email if conditions[:body]
|
26
|
+
add_file attachments if filepath
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def verify_receive_email(raw_data)
|
31
|
+
raw_data.strip!
|
32
|
+
header, body = raw_data.split(/\n\n/, 2) # 2: maximum number of fields
|
33
|
+
conditions = {}
|
34
|
+
header.split("\n").each do |row|
|
35
|
+
if row.lstrip.chop.match(/^[a-z\-]+:/i)
|
36
|
+
key, value = row.split(":", 2)
|
37
|
+
conditions[key.gsub(' ','').underscore.to_sym] = value.gsub(' ','')
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
conditions[:body] = body.squeeze(' ').strip if body
|
42
|
+
sleep 5
|
43
|
+
emails = Mail.find(:what => :last, :count => 1)
|
44
|
+
|
45
|
+
if emails.instance_of? Mail::Message
|
46
|
+
assert_string_equal(conditions[:from], emails.from[0].to_s)
|
47
|
+
assert_string_equal(conditions[:subject], emails.subject)
|
48
|
+
assert_string_contain(conditions[:body], emails.body)
|
49
|
+
emails.attachments.each do |attachment|
|
50
|
+
assert_string_equal(conditions[:attachments], attachment.filename)
|
51
|
+
end if conditions[:attachments]
|
52
|
+
else
|
53
|
+
raise "WARNING: *** No new Email is found"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require_relative '../helper/web_steps_helper.rb'
|
2
|
-
require_relative '../helper/auto_util.rb'
|
3
|
-
require_relative '../helper/mail_helper.rb'
|
4
|
-
require_relative '../helper/assertion_helper.rb'
|
5
|
-
require_relative '../helper/database_helper.rb'
|
6
|
-
require_relative '../helper/file_helper.rb'
|
7
|
-
require_relative '../helper/rest_helper.rb'
|
8
|
-
require_relative '../helper/soap_helper.rb'
|
9
|
-
require_relative '../helper/ssh_helper.rb'
|
1
|
+
# require_relative '../helper/web_steps_helper.rb'
|
2
|
+
# require_relative '../helper/auto_util.rb'
|
3
|
+
# require_relative '../helper/mail_helper.rb'
|
4
|
+
# require_relative '../helper/assertion_helper.rb'
|
5
|
+
# require_relative '../helper/database_helper.rb'
|
6
|
+
# require_relative '../helper/file_helper.rb'
|
7
|
+
# require_relative '../helper/rest_helper.rb'
|
8
|
+
# require_relative '../helper/soap_helper.rb'
|
9
|
+
# require_relative '../helper/ssh_helper.rb'
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
def set_headers(data)
|
3
|
+
unless data.hashes.empty?
|
4
|
+
data = data.hashes[0]
|
5
|
+
data = JSON.parse(data) unless data.is_a? Hash
|
6
|
+
|
7
|
+
data.each_pair do |k, v|
|
8
|
+
data[k] = check_dynamic_value(v)
|
9
|
+
end
|
10
|
+
@header = data
|
11
|
+
end
|
12
|
+
p "HEADER: #{@header}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_rest_result
|
16
|
+
if @response.nil?
|
17
|
+
p "WARNING***: MISSING STEPS: Please send a REST request to get response first."
|
18
|
+
end
|
19
|
+
@response
|
20
|
+
end
|
21
|
+
|
22
|
+
def store_json_node_result(json_node,string)
|
23
|
+
$context_value = JsonPath.new(json_node).on(get_rest_result.body).to_a.map(&:to_s)[0]
|
24
|
+
set_var(string, '$context_value')
|
25
|
+
end
|
26
|
+
|
27
|
+
def print_rest_code
|
28
|
+
puts "REST RESULT code: #{get_rest_result.code}"
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_rest_body
|
32
|
+
puts "REST RESULT body: #{get_rest_result.body}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def verify_rest_response_code(code)
|
36
|
+
assert_string_equal(code, get_rest_result.code.to_s)
|
37
|
+
end
|
38
|
+
|
39
|
+
def verify_response_body_with_json(json)
|
40
|
+
assert_string_equal(json, get_rest_result.body.to_s)
|
41
|
+
end
|
42
|
+
|
43
|
+
def verify_response_at_json_node(json_node,string)
|
44
|
+
result = JsonPath.new(json_node).on(get_rest_result.body).to_a.map(&:to_s)
|
45
|
+
assert_string_equal(string, result[0])
|
46
|
+
end
|
47
|
+
|
48
|
+
def send_request(*args)
|
49
|
+
request_type = args.shift.downcase
|
50
|
+
url = check_dynamic_value(args.shift)
|
51
|
+
put_log "Request URL: #{url}"
|
52
|
+
json_payload = args.shift
|
53
|
+
if json_payload
|
54
|
+
payload = Hash.new
|
55
|
+
JSON.parse(json_payload).each do |k1, v1|
|
56
|
+
payload[check_dynamic_value(k1)] = check_dynamic_value(v1)
|
57
|
+
end
|
58
|
+
payload = payload.to_json
|
59
|
+
end
|
60
|
+
put_log "Data Body from #{request_type} method: #{payload}"
|
61
|
+
|
62
|
+
if (payload.nil? && request_type == 'get' && @header.nil?)
|
63
|
+
@response = Request.get(url)
|
64
|
+
elsif (payload.nil? && request_type == 'get')
|
65
|
+
@response = Request.get(url, {headers: @header})
|
66
|
+
elsif (payload.nil? && request_type == 'delete' && @header.nil?)
|
67
|
+
@response = Request.delete(url)
|
68
|
+
elsif (payload.nil? && request_type == 'delete')
|
69
|
+
@response = Request.delete(url, {headers: @header})
|
70
|
+
elsif (payload && request_type == 'get' && @header.nil?)
|
71
|
+
@response = Request.get(url, {body: payload})
|
72
|
+
elsif (payload && request_type == 'get')
|
73
|
+
@response = Request.get(url, {body: payload, headers: @header})
|
74
|
+
elsif (payload && request_type == 'post' && @header.nil?)
|
75
|
+
@response = Request.post(url, {body: payload})
|
76
|
+
elsif (payload && request_type == 'post')
|
77
|
+
@response = Request.post(url, {body: payload, headers: @header})
|
78
|
+
elsif (payload && request_type == 'put' && @header.nil?)
|
79
|
+
@response = Request.put(url, {body: payload})
|
80
|
+
elsif (payload && request_type == 'put')
|
81
|
+
@response = Request.put(url, {body: payload, headers: @header})
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
class Request
|
87
|
+
include HTTParty
|
88
|
+
default_options.update(verify: false)
|
89
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'savon'
|
2
|
+
require 'jsonpath'
|
3
|
+
|
4
|
+
def get_soap_operation_list(url)
|
5
|
+
request_url = URI.encode check_dynamic_value url
|
6
|
+
@SOAPclient = Savon.client(ssl_verify_mode: :none,
|
7
|
+
wsdl: "#{request_url}",
|
8
|
+
:open_timeout => 10,
|
9
|
+
:read_timeout => 10,
|
10
|
+
:log => false)
|
11
|
+
p "Operations List: #{@SOAPclient.operations}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def call_and_fail_gracefully(client, *args, &block)
|
15
|
+
if client.nil?
|
16
|
+
raise "ERROR***: MISSING STEPS: Please run step to get operation list from WSDL first."
|
17
|
+
else
|
18
|
+
client.call(*args, &block)
|
19
|
+
end
|
20
|
+
rescue Savon::SOAPFault => e
|
21
|
+
raise e.message
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_soap_response
|
25
|
+
soap_response = @response
|
26
|
+
if soap_response.nil?
|
27
|
+
raise "ERROR***: MISSING STEPS: Please send SOAP request to get the response first."
|
28
|
+
else
|
29
|
+
soap_response
|
30
|
+
end
|
31
|
+
soap_response
|
32
|
+
end
|
33
|
+
|
34
|
+
def send_soap_with_operation_and_xml(operation,file_name)
|
35
|
+
xml = File.read($test_data_dir + file_name)
|
36
|
+
@response = call_and_fail_gracefully(@SOAPclient, operation.downcase.to_sym, xml: xml )
|
37
|
+
end
|
38
|
+
|
39
|
+
def send_soap_with_operation_and_data(operation,data)
|
40
|
+
xml = bind_with_dyn_vars(data)
|
41
|
+
@response = call_and_fail_gracefully(@SOAPclient, operation.downcase.to_sym, xml: xml )
|
42
|
+
end
|
43
|
+
|
44
|
+
def verify_response_with_json_node(json_node,string)
|
45
|
+
json = get_soap_response.body.to_json
|
46
|
+
results = JsonPath.new(json_node).on(json).to_a.map(&:to_s)
|
47
|
+
assert_string_equal(string, results[0])
|
48
|
+
end
|
49
|
+
|
50
|
+
def verify_response_code(status_code)
|
51
|
+
assert_string_equal(get_soap_response.http.code, status_code.to_i)
|
52
|
+
end
|
53
|
+
|
54
|
+
def print_response
|
55
|
+
p "SOAP RESPONSE: #{get_soap_response}"
|
56
|
+
end
|
57
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'net/ssh'
|
2
|
+
|
3
|
+
def connect_to_server_with_credential(host_name,table)
|
4
|
+
hostname = check_dynamic_value host_name
|
5
|
+
@keys = []
|
6
|
+
@auth_methods ||= %w(password)
|
7
|
+
session = table.hashes.first
|
8
|
+
session_keys = Array.new(@keys)
|
9
|
+
session_auth_methods = Array.new(@auth_methods)
|
10
|
+
if session["keyfile"]
|
11
|
+
session_keys << session["keyfile"]
|
12
|
+
session_auth_methods << "publickey"
|
13
|
+
end
|
14
|
+
|
15
|
+
@SSHconnection = Net::SSH.start(hostname, session["username"], :password => session["password"],
|
16
|
+
:auth_methods => session_auth_methods,
|
17
|
+
:keys => session_keys)
|
18
|
+
end
|
19
|
+
|
20
|
+
def exec_command(command)
|
21
|
+
command = check_dynamic_value command
|
22
|
+
@output = @SSHconnection.exec!(command)
|
23
|
+
end
|
24
|
+
|
25
|
+
def print_output
|
26
|
+
p @output
|
27
|
+
end
|
28
|
+
|
29
|
+
def verify_output(string)
|
30
|
+
string = check_dynamic_value(string)
|
31
|
+
assert_string_equal(string, @output.strip)
|
32
|
+
end
|
33
|
+
|
34
|
+
def store_result_string(name)
|
35
|
+
$context_value = bind_with_dyn_vars(@output)
|
36
|
+
set_var(name, '$context_value')
|
37
|
+
end
|
@@ -1,20 +1,20 @@
|
|
1
|
-
When /^I SSH to "([^\"]*)" with the following credentials:$/ do |hostname, table|
|
2
|
-
|
3
|
-
end
|
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
4
|
|
5
|
-
When /^I run SSH command "([^\"]*)"$/ do |command|
|
6
|
-
|
7
|
-
end
|
5
|
+
# When /^I run SSH command "([^\"]*)"$/ do |command|
|
6
|
+
# IFD_Ssh.exec_command(command)
|
7
|
+
# end
|
8
8
|
|
9
9
|
|
10
|
-
Then /^show me the SSH output result$/ do
|
11
|
-
|
12
|
-
end
|
10
|
+
# Then /^show me the SSH output result$/ do
|
11
|
+
# IFD_Ssh.print_output
|
12
|
+
# end
|
13
13
|
|
14
|
-
Then /^I should see "([^\"]*)" in the SSH output$/ do |string|
|
15
|
-
|
16
|
-
end
|
14
|
+
# Then /^I should see "([^\"]*)" in the SSH output$/ do |string|
|
15
|
+
# IFD_Ssh.verify_output(string)
|
16
|
+
# end
|
17
17
|
|
18
|
-
When /^I store the result of SSH as "(.*?)"$/ do |var_name|
|
19
|
-
|
20
|
-
end
|
18
|
+
# When /^I store the result of SSH as "(.*?)"$/ do |var_name|
|
19
|
+
# IFD_Ssh.store_result_string(var_name)
|
20
|
+
# end
|
File without changes
|
File without changes
|