RestFixture:Web服务回归测试利器

RestFixture是Fitness的一个测试REST服务的插件,用于调用标准的http 
GET/POST等请求方法,并可以用XPath语法和Javascript语法检验http响应。本文介绍安装运行RestFixture的步骤,并给出测试用例示例。

1.几句题外话

对于http请求的测试,有几种方式:

  1. 浏览器中输入http url,只适用于GET方法
  2. curl命令手工测试
  3. junit中直接用java network api调用GET/POST方法
  4. 在自动化测试框架中封装指令,如cucumber, fitnesse, robotframework

上述1、2手工测试,不能用于回归测试;3、4能用于回归测试,但要开发测试脚本代码,维护非常麻烦。

今日回想起两年前浅尝辄止的fitnesse,想碰运气看看有没有好的测试插件,结果真找到了用于Restful API测试的插件:RestFixture

2.Fitnesse 20111026+RestFixture 3.0 ——最佳拍档

2.1 http响应格式是xml的示例

废话少说,先上图: 

上面的测试用例的目的是:

并且 tag内容是

?


1

Don‘t forget the meeting!

note.xml的内容:

?


1

2

3

4

5

6

7

8

<?xml version="1.0" encoding="ISO-8859-1"?>

<!--  Copyright w3school.com.cn -->

<note>

    <to>George</to>

    <from>John</from>

    <heading>Reminder</heading>

    <body>Don‘t forget the meeting!</body>

</note>

fitnesse 测试用例wiki文本:

?


1

2

3

4

5

6

!define TEST_SYSTEM {slim}

!path D:\fitnesse\fitnesse-20111026\smartrics-RestFixture-3.0\lib\*

| Table:smartrics.rest.fitnesse.fixture.RestFixture | http://www.w3school.com.cn |

| GET | /example/xmle/note.xml | 200 | Content-Type: text/xml | //body[text()="Don‘t forget the meeting!"]|

2.2 http响应格式是json的示例

上面的测试用例的目的是:

调用百度地图Web API,根据IP获取地图地址信息,检查服务响应内容中的status字段必须是0,下面判断语句是javascript表达式:

?


1

jsonbody.status==0

GET访问的url:

  • http://api.map.baidu.com/location/ip?ip=202.198.16.3&coor=bd09ll&ak=60IFKTCwlIsSpDcGfkx36L8u

url返回的内容:

?


1

{"address":"CN|\u5409\u6797|\u957f\u6625|None|CERNET|1|None","content":{"address":"\u5409\u6797\u7701\u957f\u6625\u5e02","address_detail":{"city":"\u957f\u6625\u5e02","city_code":53,"district":"","province":"\u5409\u6797\u7701","street":"","street_number":""},"point":{"x":"125.31364243","y":"43.89833761"}},"status":0}

被调用Web API文档:

  • http://developer.baidu.com/map/wiki/index.php?title=webapi/ip-api#.E6.8E.A5.E5.8F.A3.E7.A4.BA.E4.BE.8B

fitnesse 测试用例wiki文本:

?


1

2

3

4

5

6

!define TEST_SYSTEM {slim}

!path D:\fitnesse\fitnesse-20111026\smartrics-RestFixture-3.0\lib\*

| Table:smartrics.rest.fitnesse.fixture.RestFixture | http://api.map.baidu.com |

| GET | /location/ip?ip=202.198.16.3&coor=bd09ll&ak=60IFKTCwlIsSpDcGfkx36L8u | 200 | Content-Type: application/json | jsonbody.status==0 |

2.3 用javascript处理json对象

我们再来看上面的GET响应文本:

?


1

{"address":"CN|\u5409\u6797|\u957f\u6625|None|CERNET|1|None","content":{"address":"\u5409\u6797\u7701\u957f\u6625\u5e02","address_detail":{"city":"\u957f\u6625\u5e02","city_code":53,"district":"","province":"\u5409\u6797\u7701","street":"","street_number":""},"point":{"x":"125.31364243","y":"43.89833761"}},"status":0}

\u5409\u6797|\u957f\u6625是什么?

按照百度API文档,应该返回这样的:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

    address: "CN|吉林|长春|None|CERNET|1|None"

    content: { 

    address: "吉林省长春市"

    address_detail: { 

    city: "长春市"

    city_code: 53

    district: ""

    province: "吉林省"

    street: ""

    street_number: ""

    }, 

    point: {      

    x: "125.31364243",     

    y: "43.89833761"

    

    }, 

    status: 0

}

原来\u5409\u6797|\u957f\u6625是 吉林|长春 encodeURI的结果

可以在 Chrome浏览器 > 菜单 > 工具 > JavaScript控制台(Firefox/IE/Opera都有对应的控制台) 中使用 String.replace函数来把\u5409变成"吉”:

下一步在Fitnesse中要见证奇迹了,RestFixture居然支持Javascript语法和全局函数,也可以调用String.replace函数:

?


1

2

3

4

5

6

7

!define TEST_SYSTEM {slim}

!path D:\fitnesse\fitnesse-20111026\smartrics-RestFixture-3.0\lib\*

| Table:smartrics.rest.fitnesse.fixture.RestFixture | http://api.map.baidu.com |

| GET | /location/ip?ip=202.198.16.3&coor=bd09ll&ak=60IFKTCwlIsSpDcGfkx36L8u | 200 | Content-Type: application/json | jsonbody.status==0 |

| let | bodyDecoded | js | response.body.replace(/\\u[\dabcdef]{4}/g, function(word){return String.fromCharCode(parseInt(word.substr(2),16))}) | |

RestFixture变量bodyDecoded的内容是中文化后的json:

?


1

{"address":"CN|吉林|长春|None|CERNET|1|None","content":{"address":"吉林省长春市","address_detail":{"city":"长春市","city_code":53,"district":"","province":"吉林省","street":"","street_number":""},"point":{"x":"125.31364243","y":"43.89833761"}},"status":0}

下面,还可以把bodyDecoded作为表达式文本计算,生成一个js对象:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

| let | printJsonMembers | js | !-

var jsonObject = eval(‘a=%bodyDecoded%‘);

var str1="";

function printObject(obj, indent){

  for(var i in obj){

    if(typeof obj[i] == "object"){

      str1+= indent + i+":"+"\n";

      printObject(obj[i], indent+"\t\t");

    } else

      str1+= indent + i +":"+obj[i] + "\n";

  }

}

printObject(jsonObject, "");

str1-! | |

这里要演示的第二个let行使用了第一个let行定义的变量:%bodyDecoded%,显然借鉴了Windows Bat文件的语法。

测试结果:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

address:CN|吉林|长春|None|CERNET|1|None

content:

        address:吉林省长春市

        address_detail:

                city:长春市

                city_code:53

                district:

                province:吉林省

                street:

                street_number:

        point:

                x:125.31364243

                y:43.89833761

status:0

3.RestFixture参考资料

3.1 RestFixture使用文档

RestFixture使用文档链接

https://cloud.github.com/downloads/smartrics/RestFixture/RestFixture-3.0.pdf

3.2 运行环境

fitnesse运行环境文件目录:

 

注意:其中的slf4j-simple-1.6.6.jar需要额外下载

启动fitnesse命令: 

D:\fitnesse\fitnesse-20111026>java -jar fitnesse.jar -p 11026

-p 11026 是让fitnesse网站使用11026端口,因为我要在后面的例子中使用多个fitnesse版本,所以用版本号作为端口。

3.3 相关安装包下载地址

RestFixture安装包下载地址:

slf4j-simple-1.6.6.jar下载地址:

Fitnesse安装包下载地址:

3.4 相关网址

  • Fitnesse 首页:
  • http://www.fitnesse.org/
  • Fitnesse安装包下载: Fitnesse首页 > Download > release 20111026 > fitnesse.jar
  • Fitnesse插件列表: Fitnesse首页 > Plug-ins
  • RestFixture首页: Fitnesse首页 > Plug-ins > SLiM Fixtures > RestFixture =>
  • https://github.com/smartrics/RestFixture
  • RestFixture安装包下载: RestFixture首页 > Wiki > Live documentation > download > smartrics-RestFixture-3.0-bin.zip
  • RestFixture使用文档: RestFixture首页 > Wiki > Live documentation > download > RestFixture-3.0.pdf

4.Fitnesse 20140630+RestFixture 3.0 ——水土不服

RestFixture在最新版Fitnesse 20140630 的运行结果: 

其中的GET行,只有第2、3列正确显示,4、5列显示为HTML文本,看上去十分杂乱,

旧版的Fitnesse是这样显示的:

后续的博客中,我会介绍如何让RestFixture 3.0在Fitnesse 20140630中也能打印出漂亮的测试结果。

为Fitnesse-20140630定制RestFixture代码

RestFixture:Web服务回归测试利器,布布扣,bubuko.com

时间: 2024-12-15 01:35:20

RestFixture:Web服务回归测试利器的相关文章

分享一个Android和java调用RESTful Web服务的利器Resting

分享一个Android和java调用RESTful Web服务的利器Resting 当我们调用Web服务,往往是最终目标是取HTTP响应,将其转化为将在应用中呈现的值对象.Resting可以用来实现这一功能.Resting,在Java的一个轻量级的REST框架,可用于调用一个RESTful Web服务,并转换成响应来自客户端应用程序定制的Java对象.由于它的简单,resting是适合Android等手持设备. resting目标?暴露简单的get(),post(),put()和delete()

RESTful风格的Web服务框架:Swagger

Swagger与SpringMVC项目整合 为了方便的管理项目中API接口,在网上找了好多关于API接口管理的资料,感觉目前最流行的莫过于Swagger了,功能强大,UI界面漂亮,并且支持在线测试等等,所以本人仔细研究了下Swagger的使用,下面就如何将Swagger与个人的SpringMVC项目进行整合做详细说明: 最终API管理界面:  详细步骤: Step1:项目中引入相关jar包: <properties> <project.build.sourceEncoding>UT

【问底】徐汉彬:高并发Web服务的演变——节约系统内存和CPU

摘要:现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.一味地通过增加机器来解决并发量的增长,成本是非常高昂的.结合技术优化方案,才是更有效的解决方法. [导读] 徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设. 一.越来越多的并发连接数 现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.以最简单粗暴

12个强大的Web服务测试工具

在过去的几年中,web服务或API的普及和使用有所增加. web服务或API是程序或软件组件的集合,可以帮助应用程序进行交互或通过形成其他应用程序或服务器之间的连接执行一些进程/事务处理.基本上有两种类型的web服务——基于互联网协议,REST和SOAP推动数据和信息的通讯. 由于这些web服务暴露于网络并且分布于不同的网络,所以它们很容易受到风险和安全威胁,从而影响基于它们的进程.因此,web服务或API测试非常有必要,可以确保它们执行正确并正确地响应查询. 市场上有不少商业和开源的测试工具可

Web 服务编程,REST 与 SOAP

REST 简介 在开始我们的正式讨论之前,让我们简单看一下 REST 的定义. REST(Representational State Transfer)是 Roy Fielding 提出的一个描述互联系统架构风格的名词.为什么称为 REST?Web 本质上由各种各样的资源组成,资源由 URI 唯一标识.浏览器(或者任何其它类似于浏览器的应用程序)将展示出该资源的一种表现方式,或者一种表现状态.如果用户在该页面中定向到指向其它资源的链接,则将访问该资源,并表现出它的状态.这意味着客户端应用程序随

基于Socket创建Web服务

基于Socket创建Web服务 为什么要使用Socket呢,我们来看下图 Socket原理图回顾: -------------------编写SocketService,完成字母小写转大写功能----------------------------- ServerSocket服务器端代码如下: public static void main(String[] args) throws IOException { // 1:建立服务器端的tcp socket服务,必须监听一个端口 ServerSo

Web服务基础

1.查看Windows客户端本地缓存的DNS解析记录的命令如下: C:\>ipconfig  /displaydns Windows IP Configuration m1612.oadz.com ---------------------------------------- Record Name . . . . . : m1612.oadz.com Record Type . . . . . : 1 Time To Live  . . . . : 5365 Data Length . .

&#8203;web服务目录的访问权限的控制

web服务目录的访问权限的控制 1.确认web服务器已经安装并启动 [[email protected] ~]# ls /usr/local/httpd/ [[email protected] ~]# netstat -utpln |grep 80 tcp        0      0 :::80                       :::*                        LISTEN      73341/httpd 2.设置只允许192.168.100.110访问,

linux中web服务中间件软件及服务端和客户端软件

一.中间件: 1.认识中间件: 中间件(英语:Middleware)是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,在现代信息技术应用框架如Web服务.面向服务的体系结构等中应用比较广泛. IDC对中间件的定义表明,中间件是一类软件,而非一种软件;中间件不仅仅实现互连,还要实现应用之间的互操作;中间件是基于分布式处理的软件,最突出的特点是其网络通信功能. 该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化那