`
victorcai0922
  • 浏览: 11969 次
  • 性别: 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自动化框架是一款强大的开源测试工具,专为软件开发团队设计,以支持各种协议和编程语言。这个框架的核心理念是实现测试代码与业务逻辑的分离,使得非程序员也能参与到测试过程中,提升整个项目的协作效率。...

    fitness自动化测试

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

    fitnesse document by 党无缺1

    - **增强自动化能力**:接口测试非常适合自动化测试,因为它不需要复杂的UI操作。通过自动化接口测试,可以确保每次变更都能快速得到反馈,提高软件质量和稳定性。 - **提高覆盖率**:接口测试可以深入到系统的内部...

    接口测试工具

    总的来说,Fitnesse提供了一种直观的接口测试方法,通过与Python的集成,开发者可以利用其强大的功能进行高效、灵活的接口自动化测试。尽管其核心是Java,但它能够很好地适应多种编程环境,使得不同技术背景的团队...

    软件测试面试资料

    传统的UI自动化之外,进一步深入接口自动化甚至单元测试领域,这虽非测试人员常规职责,但展现了对软件质量全方位把控的决心。结合持续集成工具如CC(CruiseControl)或Hudson,实现自动化测试结果的即时反馈,有效...

    FitNesse-开源

    4. **自动化集成**:FitNesse可以与其他持续集成工具(如Jenkins、Travis CI等)集成,自动执行测试并在测试失败时发送通知,确保软件质量的持续监控。 5. **版本控制**:由于FitNesse基于文本文件,因此可以轻松地...

    FitnesseRefactorTool:Fitnesse RefactorTool 是一个用于重构fitnesse 测试表的实用程序

    Fitnesse RefactorTool 是一个专门针对Fitnesse测试框架设计的重构工具,它主要针对的是使用Fitnesse进行测试的开发人员。Fitnesse是一个开源的、基于wiki的系统测试和验收测试框架,它使用自然语言来编写测试用例,...

    编译好的RestFixture-master

    对于敏捷开发团队来说,使用像RestFixture这样的工具进行持续集成和自动化测试是不可或缺的一部分。 总之,RestFixture是Fitnesse的一个强大补充,它简化了REST接口的测试过程,使得非编程背景的团队成员也能参与到...

    FitnesseFixtureCreator:在测试中定义 Fitnesse Fixtures-开源

    FitnesseFixtureCreator 是一个开源项目,专门设计用于在 Fitnesse 测试环境中创建和...对于那些寻求提升自动化测试效率并希望在 Fitnesse 中实现更直观和动态的 Fixture 定义的团队来说,这是一个非常有价值的资源。

    net软件测试实战技术基础知识大全

    - **QTP (Quick Test Professional)**:自动化测试工具。 - **开发工具**: - **Visual Studio Team Foundation**:集成了版本控制、项目管理等功能。 - **NUnit/NMock/NUnitForms**:用于单元测试的工具。 - **...

    jenkins邮件配置1

    Jenkins 是一款广泛应用的持续集成工具,它允许开发者自动化软件的构建、测试和部署过程。在使用Jenkins时,配置邮件通知功能是非常重要的,这样可以在构建成功或失败时及时告知相关人员。以下是配置Jenkins邮件通知...

    C# port of the FIT Framework-开源

    标题 "C# port of the FIT ...它包含了一个Web界面来运行和查看测试,以及使用NAnt进行自动化构建和NUnit进行测试的配置。开发者可以利用这个框架,结合业务专家创建的测试用例,实现更高效、更贴近业务的测试流程。

    ReflectingTeam-开源

    综上所述,"ReflectingTeam-开源"是一个基于Java的开源软件项目,使用Eclipse作为开发环境,利用Ant进行构建,采用了Fitnesse进行测试驱动开发,还提供了Web应用程序接口。团队成员可以通过阅读`README.txt`来了解...

Global site tag (gtag.js) - Google Analytics