`
victorcai0922
  • 浏览: 11859 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

使用Fitnesse进行接口自动化测试

SOA 
阅读更多
     随着云计算以及SOA以及敏捷软件开发的热火朝天,对于测试工程师的要求也渐渐增加。目前很多公司特别是互联网公司都已经开展接口测试这样的工作,随着web架构的日趋复杂,接口的种类也多种多样,有http,webservice,hessian,dao,message以及简单的api接口,那么如何设计或者选择一款测试框架来完成对这些接口的测试成为了一个很大的挑战。本文将简单介绍一款由java开发的开源测试框架Fitnesse在接口测试方面的使用,并且列举一些简单的demo来进行演示和说明。
     FitNesse是一个轻量级的开源框架,能够帮助开发和测试团队方便的定义接口验收测试(Acceptance Tests)。Fitnesse支持多语言软件产品的测试,包括(java,c,c++,python,php)等等。具体使用可参考:http://www.fitnesse.org/.FitNesse.UserGuide,因为关于Fitnesse工具的介绍不是本文的主要意图。在Fitnesse框架中,总共包括三个部分,Wiki,Test system,Fixtures。其中Wiki部分将展现具体的Test case以及Test suite甚至是Test Requirement,Test system包括两部分Slim,Fit,也就是Fitnesse的执行引擎,Fixtures也就是真正的测试代码。Fitnesse具体架构图如下所示:

    从上图大家可以看到,在Wiki pages上描述的是关于业务逻辑的测试用例,Fitnesse将会根据你所选择的Test System(slim或者fit)来解析Wiki pages所传送过来的Test cases, 假如我们选择了slim作为我们的test system,那么slim runners将会把网络传输过来的Wiki 脚本转换为一系列的指令,然后slim executer将会解析并执行这些指令来调用我们所编写的测试代码也就是Fixtures code,fixtures可以是java语言测试代码,C语言测试代码或者其他语言编写的测试代码,测试代码将会调用被测对象来执行测试用例。同理当你选择fit作为Test runner的话过程也是一样,只是fit在解析wiki脚本的时候与slim不一样,fit会将wiki page作为html页面,然后通过解析html页面来调用后台的测试代码来执行测试用例,相对于slim性能上较差。另外在使用fit的时候设计测试代码也必须继承fit的类来进行编写,相对slim测试代码编写相对受限。因此我推荐大家使用slim,因为slim会更加的轻量和高效,在过去的两年时间里面我们团队一直使用slim作为test runner,并且在slim的基础做了很多二次开发和改进,相对来说比较稳定。
    我们可以使用Fitnesse做单元测试,集成测试,接口测试等相关测试。本文重点介绍Fitnesse在接口集成测试方面的使用,废话少说,下面上主菜,在下面的例子中,将利用Fitnesse slim 做TestRunner,进行Java环境下的接口测试。
Http接口测试
可以利用第三方工具httpClient.jar编写http接口客户端发送Request.在此我们做一个简单的http接口测试,如对infoq登录接口进行测试。
首先编写测试代码如下:
1. 发送Post请求:
(1) 设置请求参数

该方法有两个参数第一个参数为Map类型表示请求表单参数,第二个参数用来表示表单参数的个数,其中parameters为NameValuePair数组,并设为全局变量。
(2) 发送请求



该方法参数为请求URL,postResponse为服务端返回值。
(3) 检验返回值



当然这里的postResponse可能要根据业务需求的检查点来做一些具体的解析,在本用例中不做详细的解析。
接下去用Fitnesse来设计测试用例并执行测试:
(1) 设置表格环境变量,指定使用slim作为Testsystem,并且定义classpath,便于fitnesse能够驱动测试代码执行用例。
(2) 定义测试数据,如提交的表单数据用户名和密码,我们是用来测试infoq的登录功能。
(3) 定义预期输出值,在登录infoq成功之后,服务器返回参数中会返回”ok”字符串,该测试用例就是用来描述是否登录成功的scenario。



点击Test按钮执行该case结果如下所示:



该用例有一个检查点,也就是调用checkPostResponse方法的时候输入预期值ok,该方法检查返回字符串的时候找到该字符串,因此测试用例通过,测试用例pass,因此执行结果为绿色。
只需要更改参数就可以设计其他测试用例,组成infoq登录功能的测试集。
该节主要介绍fitnesse对http接口类型的测试。
Webservice接口自动化测试
目前大多数互联网公司都采用SOA架构,因此对于webservice接口类型的测试显得更加重要。通常测试工程师可能会借助SoapUI等工具进行web service的测试,不可否认SoapUI在进行单一webservice接口测试中具有非常好的效果,但是在接口组合测试,以及在测试结果需要进行数据库校验的情况下就显得不是那么的自动化,总是需要人工干预,这在一定程度上导致测试效率偏低,因此我们在这里介绍如何使用Fitnesse这块开源产品实现接口测试自动化。
首先我们简单的搭建了一个WebService demo.



该webservice接口总共包括4个方法,我们要测试一下addUserToTheWorld和getUserFromTheWorld这两个方法组成的一个Scenario。
首先,设计测试代码,思路和http接口测试一样,设计webservice client端发送请求,利用spring和cxf设计webservice client端,当然也可以通过cxf或者axis自带客户端生成工具产生客户端代码,但是还是建议自己动手写客户端,这样可以使代码简单清晰。
Spring context配置如下:




客户端测试代码如下所示:



我们再来看在Fitnesse中如何设计case描述上述代码:
测试用例描述如下所示:



上图中的用例描述为调用testAddUserToTheWorld方法将用户加入数据库,然后调用testGetUserFromTheWorld从数据库中取出相关数据,这样就作为一个组合场景调用了webservice的addUserToTheWorld和getUserFromTheWorld这两个方法,当然还可以设计更多的场景来测试,如果用soupUI的话起码得做两次操作,如果有数据库检查的需要的话可能需要3次操作,不便于做自动化。接下去我们看一下该用例执行结果。



执行结果如上图所示测试执行通过。我们再来看一下用例失败的场景:



我们将预期输出结果的Age的值改为了27,测试用例执行失败,与实际结果不符合。
Database校验测试
我们再来讨论一下数据库校验测试,开源社区已经有很多相关的数据库测试工具如Dbunit等等,以及Fitnesse/Fit测试引擎的DBFit都是很优秀的工具,笔者根据DBFit的功能设计了Fitnesse/slim测试引擎的DBSlim,来方便对数据库测试的操作。
DBSlim目前有增删改查的功能,支持对oracle、mysql、sqlserver的操作,源码已上传google.code开源,具体在Fitnesse中的使用场景如下所示:



使用dbslim首先要设置相关环境变量,由于是使用maven做代码的管理,因此使用的时候需要配置好如上图的dependency。上图中有三个Wiki table,第一个table表示所引用的包名,第二个表格是用来连接数据库,我们使用的mysql所以就调用ConnectToMysql方法,依次配置好数据库url和端口号,数据库名称,用户名和密码。第三个表格是对fitnesse的query表格做了一些改进,用来做数据库的查询工作,Query:Query是Query表格的书写方法,第一个Query表示是查询表格的关键字,第二个Query是指调用Dbslim中的Query类,后面的参数为要查询的sql。表格的第二行表示要查询的字段和sql中查询字段一一对应,第三行表示期望值,由此组成了一个数据库查询操作的场景。关于Fitnesse中表格的使用方法同样可以参考Fitnesse官方的User guide。我们看一下执行结果:



本文再此只介绍查询操作,其他操作不再一一介绍。
总结
本文主要介绍Fitnesse在接口测试以及集成测试中的使用,从上面的Demo中可以看出,使用Fitnesse做接口测试,有以下几点好处:
1. 测试代码编写简单,风格自由。
2. 测试代码和业务逻辑分离,fitnesse上面只负责业务story的编写,测试代码和业务用例方便维护。
3. 测试代码冗余度大大降低,同一段测试代码可以组成多个业务场景使用。
4. Fitnesse是完全有Java开发的测试框架,跨平台并且便于与其他测试框架的合并,笔者曾经做过Fitnesse与TestNG,Junit以及Selenium的集成。
5. Fitnesse执行方式多种多样,便于后期的持续集成和持续交付,以及敏捷测试,笔者以完成Fitnesse测试报告的解析并且配合Hudson做持续构建。
6. 更重要的是Fitnesse可以用于敏捷测试,这个也是Fitnesse的作者,Uncle Bob的初衷。
目前存在很多开源测试框架,但是如何选择并且设计需要根据公司的业务需求来决定,比如说互联网公司就比较适合使用Fitnesse这样的测试框架来构建自动化测试框架,使得测试设计、执行以及
管理都显得相对简单和清晰,并且对于测试框架的选择最重要的就是要考虑其扩展性,这个便于后期与其他工具和框架的集成,否则我们在后期的工作当中将会遇到想象不到的困难。
  • 大小: 43.1 KB
  • 大小: 35.6 KB
  • 大小: 59.2 KB
  • 大小: 13.9 KB
  • 大小: 60.6 KB
  • 大小: 97.9 KB
  • 大小: 37.4 KB
  • 大小: 35.1 KB
  • 大小: 56.3 KB
  • 大小: 79.4 KB
  • 大小: 108.9 KB
  • 大小: 76.8 KB
  • 大小: 92.9 KB
  • 大小: 64.1 KB
分享到:
评论
1 楼 xiexinxi 2016-06-06  
我现在用Fitnesse做Restful API自动化测试,使用smartrics.rest.fitnesse.fixture.RestFixture,但是这个类支持GET,PUT,POST,OPTION等方法,就是不支持PATCH。
请教楼主,如何让Fitnesse做Restful API测试时,支持PATCH?

相关推荐

    基于FitNesse的自动化回归测试工具的设计与实现

    基于FitNesse的自动化回归测试工具的设计与实现

    lr+Fitnesse做接口测试.doc

    其实无论用那种测试方法,接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一个过程。

    数据回归-基于FitNesse的自动化回归测试模型和工具的研究.pdf

    数据回归-基于FitNesse的自动化回归测试模型和工具的研究.pdf

    fitnesse自动化框架

    fitnesse自动化开源框架,支持各种协议和语言。测试代码和业务脚本分离。

    API自动化测试工具Fitnesse的C#使用实例

    自己钻研总结的,愿意与大家分享交流,也欢迎加QQ群:144691524交流Fitnesse的相关知识。

    fitness自动化测试

    fitnesse自动化测试接口的代码及需要使用的jar包

    fitnesse 入门

    (FitNesse默认使用80端口,如果80被其他程序占用,可以使用run -p 8081 来启动,这里的端口可以随意指定) 当屏幕出现 D:\fitnesse>java -cp fitnesse.jar fitnesse.FitNesse FitNesse (20070619) Started...

    fitnesse学习(整理版)

    从Fitnesse中学习Java单元测试 1。使用命令行来添加用户和用户密码: D:\fitnesse>java -cp fitnesse.jar fitnesse.authentication.Password -f password.txt -c fitnesse.authentication.HashingCipher Sophia ...

    开源测试软件-fitnesse

    开源测试软件-fitnesse,使用方法自己百度,教程很多

    fitnesse:FitNesse-验收测试Wiki

    欢迎使用FitNesse,它是完全集成的独立验收测试框架和Wiki。 要开始使用,请访问 !快速开始和错误追踪器有错误或功能要求吗? 。社区有不是功能要求或错误报告的问题吗? 边缘构建可在FitNesse的最新稳定版本。 ...

    fitnesse, 修补验收测试 Wiki.zip

    fitnesse, 修补验收测试 Wiki FitNesse 欢迎使用 FitNesse,完全集成的独立验收测试框架和 wiki 。要开始,请查看 http://fitnesse.org 。快速启动对FitNesse的一分钟描述。下载FitNesse插件和插件插件

    fitnessefixtures:用于 FitNesse 测试自动化的夹具-开源

    FitNesse fixtures 是一组可以在测试自动化工具 FitNesse (fitnesse.org) 中使用的类

    Fitnesse-Demos:使用简单的Java类演示Fitnesse测试框架

    通过使用可以导入为Excel电子表格的简单测试用例,以及通过将Fitnesse作为独立的Wiki服务器运行,该项目展示了Fitnesse通过在Fitnesse Wiki上运行一次测试页面即可支持大量测试范围的有用性。 。 所有归功于支持...

    fitnesse20090513

    fitnesse,一个自动化测试框架,20090513发布版本,共20M多一点

    fitnesse学习资料

    fitnesse学习资料:关于fitnesse测试软件的一些整理文档

    fitnesse20090513第二部分

    fitnesse,一个自动化测试框架,20090513发布版本,共20M多一点,这个是第二部分

    Fitnesse开发协作工具

    FitNesse是一套软件开发协作工具 FitNesse是帮助大家加强软件开发过程中的协作的工具。能够让客户、测试人员和开发人员了解软件要做成什么样,帮助建议软件最终是否达到了设计初衷。

    RestFixture:FitNesse固定装置,用于测试REST服务

    RestFixture:用于测试REST服务的FitNesse固定装置主分支构建状态: RestFixture是一个FitNesse( )固定装置,允许开发人员和/或产品所有者编写REST服务的测试固定装置时要牢记简单性。 这个想法是编写自记录的,...

    FitNesse 常用Fixture总结

    这是本个学习FitNesse后,,,总结出来的常用的FitNesse的Fixture的用法,,可供参考...

    初识验收测试管理工具FitNesse

    FitNesse初识初识验收测试管理工具FitNesse软件测试刚刚开始研究FitNesse,我在这儿先抛块砖,大家有什么玉石啊,猫眼儿 初识验收测试管理工具FitNesse 软件测试 刚刚开始研究FitNesse,我在这儿先抛块砖,大家有...

Global site tag (gtag.js) - Google Analytics