随着公司各部门对质量的日益重视,API测试已成为日常的 测试任务之一,为了提高测试效率,减少重复的手工操作,API自动化测试也逐渐变得愈加重要,本文是自己在API自动化测试方面的一些经验积累和心得、汇总成文,以飨读者。
什么是API,个人认为狭义理解API就是系统对外暴露的一些接口,供系统内部其他模块或者外部系统进行调用,如TD、harvest都有自己对外暴露的一些API,以供在其基础上进行二次开发,本文仅针对loushang平台的API进行讲述,目前loushang平台主要的API主要集中在BSP和BPM两大模块,大约300余个。
介绍API自动化测试之前,有必要首先介绍一下传统的API测试,所谓传统的API测试就好比传统的手工功能测试类似,针对某个功能点或者业务场景,准备一些数据,执行测试,其优点是测试速度快,但是缺点也非常明显,不能自动化,不能重复执行,需要人工的实时操作,功能的自动化测试相对比较简单,有许多现成的自动化测试工具可供选择,如QTP、RationalFunction Test等等,API的自动化测试门槛则相对较高,一是适合的工具少,二是需要了解被测API的使用场景,三是需要吃透被测API的代码逻辑和后台数据结构,并能够设计相应的测试数据,以覆盖各种业务场景和代码的分支结构。
工欲善其事必先利其器,做API自动化测试之前,也需要借助一些外部工具,然后可以根据自己项目的需要,对外部工具进行改造,以适合自己的需要。做API自动化测试首先需要熟练掌握相关的程序语言,就loushang平台API而言,Java语言的熟练掌握是必不可少。还有就是当今非常流行且非常受欢迎的测试框架Junit4,Junit框架提供了许多断言,和实用的一些注解,这些是自动化测试的前提。另外,Ant对Junit提供了很好的支持,可以生成测试报告,用户可根据需要,对ant-junit进行改造,如对测试报告进行汉化,添加一些自己关注的但是报告中没有的一些信息等。
90%以上的API是和数据库打交道的,测试如何准备?数据库如何恢复?这也是自动化测试面临的一大难题,推荐使用DBunit,DBunit可以将数据库表导出至xml和xls文件进行备份,同时支持将xml、xls数据文件导入至数据库表,测试之前,如在junit测试用例的before阶段,将相关数据库表进行备份,并将测试数据(一般用xls或xml文件存放)导入至相应的数据库表,测试用例执行完成后,将备份的数据库表重新还原至数据库,如此,一则实现了测试数据和测试代码的分离,二则保证了测试数据库中的数据不受影响。
在进行数据的导入导出时,有时颇受外键约束的困扰,比如测试某个API,该API只关联2个数据库表,但是有n个其他表与这2个表存在外键约束,准备测试数据时,很是麻烦,建议执行测试时,如有必要可以将数据库的外键约束暂时禁用,测试结束后,再将外键约束启用,至于启用外键、禁用外键的方法,不同数据库方式不太一样,读者可自行研究。
API测试时,有时还会遇到一些无关紧要的对象,但是这些对象又非常难以构造并且测试该接口又离不开它们,如Resultset、request、session等,这时可以使用对象模拟技术,如EasyMock、Jmockit等,非常好用。
API测试属于白盒测试,为了更为清楚的展现测试覆盖率,一般测试完成后,出了测试报告之外,还会出具一份测试覆盖率报告,业界有不少的测试覆盖率工具可供选择,如Cobertura等,Cobertura会生成一个非常漂亮的测试覆盖率报告,读者可以研究一下,如何与自己的测试环境进行集成。
测试报告、测试覆盖率报告生成后,一般都是一些html文件,API自动化测试,由于有时需要通过定时任务(可利用windows定时任务或自行开发java定时器)自动执行,需要将测试报告通过邮件的方式发送给相关测试者,所以,我们还需要掌握打包工具(ant已提供,可简单包装后使用),邮件发送工具(javamail挺好用,可研究)。
至此,API自动化测试所需要的技术基本介绍完了,一些项目个性化的东西(如登录模拟、sca服务加载、spring容器加载)还需要根据实际需要进行研究,梳理一下整个流程如下:
Windows定时任务or自行开发定时器----》执行bat批处理命令----》bat中调用ant----》ant执行junit测试用例---》执行完成后将测试报告和测试覆盖率报告打成zip压缩包---》将压缩包作为附件邮件附件发送给相关人员。
拓展,为进一步改进测试架构,简化测试代码编写,可以考虑使用Unitils框架,Unitils整合了junit和easymock,可有效的简化测试代码的编写。
小结,本文是根据自己当前的测试流程和框架为蓝本汇总而成,希望能为有志于API自动化测试的同仁们提供一些帮助和参考!