`
victorcai0922
  • 浏览: 11832 次
  • 性别: 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?

相关推荐

    fitness自动化测试

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

    接口测试工具

    python为脚本语言,使用该工具进行接口自动化测试,而且该工具小,轻量级,方便使用,不需要太费劲

    小程聊微服务-基于dubbo的mock测试系统

    基于微服务或者SOA的自动化测试系统每个公司都有自己的特有的,我今天...目前接口自动化测试框架也多种多样,testng,junit,Fitnesse等,但都需要测试人员具备测试代码编写能力,如果要做好和手工接口测试一样效果的自

    基于Python的蓝桥杯竞赛平台的设计与实现

    【作品名称】:基于Python的蓝桥杯竞赛平台的设计与实现 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于Python的蓝桥杯竞赛平台的设计与实现

    python实现基于深度学习TensorFlow框架的花朵识别项目源码.zip

    python实现基于深度学习TensorFlow框架的花朵识别项目源码.zip

    3-9.py

    3-9

    郊狼优化算法COA MATLAB源码, 应用案例为函数极值求解以及优化svm进行分类,代码注释详细,可结合自身需求进行应用

    郊狼优化算法COA MATLAB源码, 应用案例为函数极值求解以及优化svm进行分类,代码注释详细,可结合自身需求进行应用

    563563565+3859

    5635356

    客户培训课程–金字塔式写作方法.ppt

    客户培训课程–金字塔式写作方法.ppt

    工具与方法工作手册.ppt

    工具与方法工作手册.ppt

    Image_1715565894150.jpg

    Image_1715565894150.jpg

    setuptools-34.3.2-py2.py3-none-any.whl

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    C语言快速排序.doc

    快速排序 C语言快速排序.doc C语言快速排序.doc C语言快速排序.doc C语言快速排序.doc C语言快速排序.doc C语言快速排序.doc

    基于Python+MobileFaceNet的静默活体检测系统的设计与实现

    【作品名称】:基于Python+MobileFaceNet的静默活体检测系统的设计与实现 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 2、实验环境 Windows 10(64位) CPU:AMD Ryzen 7 5800H RAM:16G GPU:NVIDIA RTX3060 开发工具:IntelliJ IDEA以及PyCharm 相关配置及版本: Chrome 90.0.4430.212 SpringBoot 2.2.6 Java JDK8 MyBatis 2.1.1 Mysql 8.0.25 Python 3.8 pytorch 1.7.1 torchvision 0.8.2 numpy 1.18.5 tensorboard 2.4.1 pandas 1.2.3 cuda 11.0.2 cudnn 11.2 torch 1.8.1 torchvision 0.9.1 3、模型训练命令 python train.py 4、模型测试命令

    基于JavaScript的交通时空大数据分析挖掘系统源码+运行说明.zip

    基于JavaScript的交通时空大数据分析挖掘系统源码+运行说明 项目描述 项目核心是百度地图 AMap和 echarts,用百度地图提供的API搭建的地图,项目中用到的有热力图、散点图和连线图,图表类型是由echarts提供的图表进行展示,包括饼图、柱状图 安装依赖 javascript

    麦肯锡—xx集团战略咨询项目建议书.ppt

    麦肯锡—xx集团战略咨询项目建议书.ppt

    pytest-6.2.1-py3-none-any.whl

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    麦肯锡--战略咨询培训手册.ppt

    麦肯锡--战略咨询培训手册.ppt

    graspnet-pybullet

    graspnet-pybullet

    xx电器品牌战略和营销组织架构-SHA----d.ppt

    xx电器品牌战略和营销组织架构-SHA----d.ppt

Global site tag (gtag.js) - Google Analytics