Ruby实现Http自动化测试(一)----------类宏

最近在做一个restful API的项目,项目测试主要是发送HTTP请求(GET,POST,DELETE,PUT等),并检查返回结果。

以往我们测试都是先写测试用例,通常是一个EXECEL表格。这里面会写好每个测试例的输入,测试步骤和期望结果。然后再根据每个测试例的通过情况,更新另一个EXECEL中对应测试例的测试结果(通过or失败,还有一些备注信息等。)

测试人员需要写好测试例,并用一个HTTP工具对每个测试例进行测试,并人工检查返回结果,决定测试例的成功与失败。这样的结果就是,每次代码发布后有改动,或有bug修改,都要人工的过一遍所有测试例,相当烦琐。

其实对于这种HTTP性质的项目,如果测试的业务逻辑性不是很强,还是相对容易实现自动化测试的。所以做了一个自动化测试的工具,这个工具的目标是:

1.定义一个内部DSL(特定领域语言),方便不懂编码的测试人员编写测试例的输入和期望结果。

2.自动遍历EXECEL中的每个测试例,将输入转换为HTTP请求并发送。

3.用期望结果对HTTP响应检查,决定测试的结果并更新EXCEL。

鉴于这个工具的这些特点,用RUBY实现实在是再合适不过了。因为RUBY强大的元编程能力很容易自定义一种DSL,而且这种DSL比较简洁。另外,RUBY十分灵活,可以满足我们的要求。

首先,我们来实现输入部分。输入我定义为下面的形式:

POST :url=>"http://www.baidu.com",:name=>"bob" ,:body=>‘{"data":["key":"value"]}‘

这表明要进行一个POST测试,然后以key,value的形式给出请求需要携带的参数,body部分我们用json格式。这些参数可以是http请求中的header,body等部分的内容。

我们代码要做的就是定义一个POST方法,然后在这个方法里把这些参数保存起来。用于后面转换为具体的HTTP请求并发送。所以,我们可以定义几个方法,分别表示POST,GET,DELETE等HTTP请求,并把这个请求的参数记录下来。可能你会想到下面的Ruby代码:

def POST(*args)

@testCase = {}

@testCase[:request] = “POST”

@testCase[:params] = args[0]

end

由于这些方法的代码都几乎一样,所以我们可以用类宏的方法实现这些方法的定义。削减相似代码,这也是Ruby最擅长的。

最终的代码如下,分别是main.rb主程序部分,和一个用于实现类宏的模块http_method_macro.rb

main.rb:

require_relative ‘../autoHttpTest/class_macro/http_method_macro‘

class << self

include HttpClassMacroModule

http_method :GET

http_method :POST

http_method :DELETE

http_method :PUT

end

POST :url=>"http://www.baidu.com",:name=>"Bob"

p @testCase

../autoHttpTest/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

end

end

end

end

首先,定义一个模块HttpClassMacroModule,包含这个模块的类将会有一个类方法http_method,称之为类宏http_method。这样包含这个模块的类就可以用这个类宏定义GET,POST等实例方法,而且这些方法的代码只有一份。

然后,在main.rb里,包含上面定义的模块(注意这个模块是在main对象的单例类中包含的)。然后再给main对象的单例类定义实例方法GET,POST,DELETE,PUT。这样在main对象中就可以使用这些方法了。

最后,作为测试,我们用

POST :url=>"http://www.baidu.com",:name=>"Bob"

p @testCase

这段代码测试。程序运行结果如下:

{:params=>{:url=>"http://www.baidu.com", :name=>"Bob"}, :request=>"POST"}

Process finished with exit code 0

这样,我们就实现了一种DSL,用这种DSL可以让测试人员方便的输写测试用例的输入部分,我们也可以记录下输入,方便以后转换成HTTP请求进行测试。

今天先讲这些,下一节我们将进一步完善这个工具,在程序里将输入转换为具体的HTTP请求并发送。

时间: 2024-11-03 21:44:43

Ruby实现Http自动化测试(一)----------类宏的相关文章

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

这一节,我们继续上一节的内容,为我们的自动化工具添加发送HTTP请求的功能.完成后的代码结构如下: 1.首先我们增加了一个conf目录,这里用来存放全局配置,如要测试的网站的主页,用户名密码等基本信息. setup.rb的代码如下: setup { @baseUrl = "http://www.baidu.com" } 目前功能还很简单,只是定义了我们要测试的网站主页,这里以百度为例.然后问题就是怎样将这个配置加载到我们的main对象里,使其对main对象可见. 2.main.rb代码

从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/4159360.html 继续 ... ... 回顾 软件自动化测试的概述 Web自动化测试的方案设计 功能方案设计 业务方案设计 Web自动化测试的方案实施 自动化测试脚本的录制和编写 自动化测试的执行和具体实现 测试操作和测试数据的回收 自动化测试脚本设计和录制 •工具: WatirRecorder++ 统一预置参数输入规则,提供规则模板,做到一个用例一

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

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

基于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自动化测试 笔记二

基于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

基于Ruby的Watir-WebDriver自动化测试框架

Watir-WebDriver       —— 软件测试的自动化时代 QQ群:160409929 支持哪些浏览器? 几乎所有的浏览器: 比如Firefox, Chrome 和IE,除了Safari. 支持网页上哪些元素? watir-webdriver支持所有的HTML元素 运行模式是什么? Watir-WebDriver是基于ruby开发web驱动框架 自动化测试框架 根据不同业务开发相应自动化用例,由Ruby测试框架统一调用分析展示.实现出入口统一,工具类封装:降低用例开发复杂度,框架统一

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

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

基于Ruby的Watir-WebDriver自动化测试方案

Watir-WebDriver 自动化测试方案书 系统架构 该自动化测试框架分三个模块:Test用例.Control控制层.Tools工具类.Index总控. Test用例 基于ruby的watir-webdriver开发 统一预置参数输入规则,提供规则模板,做到一个用例一个类,一个方法一个输出.(一个类可以多个方法) 统一输出规则,比如:①[info]②TiStone ③Login successful!④001011 ①   [Info]:代表该用例执行成功![error]代表失败![war