Ruby实现Http自动化测试(二)-----实现http方法

这一节,我们继续上一节的内容,为我们的自动化工具添加发送HTTP请求的功能。完成后的代码结构如下:

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请求。

最后程序运行结果如下:

"<!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\"><meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"><meta content=\"always\" name=\"referrer\"><link rel=\"dns-prefetch\" href=\"//s1.bdstatic.com\"/><link
rel=\"dns-prefetch\" href=\"//t1.baidu.com\"/></body></html>\r\n"

Process finished with exit code 0

这一节,我们实现了自动加载全局配置,并将测试用例的输入转换为具体的HTTP请求并发送。

下一节,我们将实现操作EXECL的功能,从EXCEL中解析测试用例并执行。

时间: 2024-10-16 08:51:51

Ruby实现Http自动化测试(二)-----实现http方法的相关文章

基于Ruby的watir-webdriver自动化测试方案与实施(二)

接着基于Ruby的watir-webdriver自动化测试方案与实施(一) http://www.cnblogs.com/Javame/p/4159360.html 继续 ... ... 回顾 软件自动化测试的概述 Web自动化测试的方案设计 功能方案设计 业务方案设计 Web自动化测试的方案实施 自动化测试脚本的录制和编写 自动化测试的执行和具体实现 测试操作和测试数据的回收 自动化测试脚本设计和录制 •工具: WatirRecorder++ 统一预置参数输入规则,提供规则模板,做到一个用例一

基于ruby的watir自动化测试 笔记二

基于ruby的watir自动化测试 笔记一的补充版,新增加了些特殊的控件捕获方法.还在更新中.... attribute_value 获取当前控件的属性 Value = ie.link(:id=>'xxx’).attribute_value("href") rand_select 随机选择select list中的某一项 ie.select_list(:name=>’’).rand_select popupwin 点击弹窗上的‘确定’按钮 ie.popupwin.butto

从0到1,教你实现基于Ruby的watir-webdriver自动化测试

一.为什么选择Ruby [1]完全开源. [2]多平台:Ruby可以运行在Linux, UNIX, Windows, MS-DOS, BeOS, OS/2.. [3]多线程:线程就是指在一个程序中处理若干控制流的功能.与OS提供的进程不同的是,线程可以共享内存空间. [4]完全面向对象. [5]不需要内存管理:具有垃圾回收(Garbage Collect, GC)功能,能自动回收不再使用的对象. [6]解释执行:其程序无需编译即可轻松执行. [7]功能强大的字符串操作/正则表达式. [8]具有异

基于Ruby的watir-webdriver自动化测试方案与实施(三)

接着基于Ruby的watir-webdriver自动化测试方案与实施(二) http://www.cnblogs.com/Javame/p/4159468.html 继续 ... ... 编写脚本首先要学会捕获元素,接下来就要学习页面元素的捕获. 页面元素 attribute_value 获取当前控件的属性 Value = ie.link(:id=>'xxx’).attribute_value("href") rand_select 随机选择select list中的某一项 ie

基于Ruby的watir-webdriver自动化测试方案与实施(一)

为什么要实施自动化测试? •应用系统日趋复杂的客观要求 一个不可避免的问题是,应用系统变得日趋复杂,并且造成了更大的风险.测试消耗的成本越来越高,花费的时间也越来越长.而成本与时间是有限的.为了在限制的成本与时间范围内,控制发布的软件产品的质量,测试人员被要求在尽量短的时间内对软件进行足够的测试. •避免重复测试的主观要求 迭代式开发过程:目前的软件开发或多或少使用了迭代式开发过程,这就导致了我们需要进行一轮又一轮的测试. 回归测试:为了检验软件版本是否正确,或者当发现软件中出现了一个或多个以前

基于Ruby的watir-webdriver自动化测试方案与实施(四)

接着基于Ruby的watir-webdriver自动化测试方案与实施(三) http://www.cnblogs.com/Javame/p/4159468.html 继续 ... ... 首先回忆下我们的系统架构,然后谈谈具体的实现. 该自动化测试框架分三个模块:Test用例.Control控制层.Tools工具类.model总控. Test用例 基于ruby的watir-webdriver开发 统一预置参数输入规则,提供规则模板,做到一个用例一个类,一个方法一个输出.(一个类可以多个方法) 统

python接口自动化测试(二)-requests.post()

上一节介绍了  requests.get()  方法的基本使用,本节介绍  requests.post()  方法的使用: 本文目录: 一.方法定义 二.post方法简单使用 1.带数据的post 2.带header的post 3.带json的post 4.带参数的post 5.普通文件上传 6.定制化文件上传 7.多文件上传 一.方法定义: 1.到官方文档去了下requests.post()方法的定义,如下: 2.源码: 3.常用返回信息: 二.post方法简单使用: 1.带数据的post:

python接口自动化测试(二)-requests.get()

环境搭建好后,接下来我们先来了解一下requests的一些简单使用,主要包括: requests常用请求方法使用,包括:get,post requests库中的Session.Cookie的使用 其它高级部分:认证.代理.证书验证.超时配置.错误异常处理等. 本节首先来了解一下requests库中如何发送get请求: 一.看下方法定义: 1.到官方文档去了下requests.get()方法的定义,如下: 2.点击右上角的[source],看一下它的源码如下: 看到最后一行return,get方法

SPServices介绍之二:基本方法调用

SPServices介绍之二:基本方法调用 分类: SPSerivces2014-09-21 04:20 253人阅读 评论(0) 收藏 举报 sharepoint 2013SPServices 在上一篇文章SPServices介绍之一中,简单介绍了SPServices以及如何将它添加到SharePoint的项目中,这篇文章继续介绍一下SPSevices提供的基本方法. 这些基本的方法可以到SPServices的主页中查找:点击打开链接 核心对象$().SPServices 对象$().SPSe