目录
前言:
基于JUnit的接口自动化测试框架可以实现对接口进行自动化测试,并提供了丰富的断言和报告功能。JUnit是一个流行的Java单元测试框架,它可以帮助开发者编写可重复执行的测试用例,并进行测试结果的验证。
分层的自动化测试
5~10 年前,我们接触的自动化测试更关注的是 UI 层的自动化测试,Mercury 的 WinRunner/QTP 是那个时代商业性自动化测试产品的典型代表,在那个时代大家单纯想的都是能用一个自动化操作的工具替代人力的点击,商业化或是私有化框架大行其道。
而分层的自动化测试倡导产品的不同阶段(层次)都需要自动化测试。在《google 软件测试之道》中,在 google 70% 的投入为单元测试(小型测试),20% 为接口/集成测试(中型测试),10% 为 UI 层的自动化测试(大型测试),也就是大家熟悉的金字塔模型,越往上自动化实现难度越大,投入产生的收益也越低(需要强调的是,UI 层的自动化测试作为最接近用户操作的测试,仍然有其存在的意义和场景)。
接口测试的意义
接口测试是验证两个或多个模块应用之间的交互(通常是采用接口的方式),测试的重点是要检查数据的交换,传递和控制管理过程,还包括处理的次数。
接口测试的核心战略在于:以保证系统的正确和稳定为核心,以持续集成为手段,提高测试效率,提升用户体验,降低产品研发成本。
接口测试要为代码的编写保驾护航,增强开发人员和测试人员的自信,让隐含的 BUG 提前暴露出来,要让开发人员在第一时间修复 BUG,要让业务测试人员在测试的时候更加顺手,最大限度得减少底层 BUG 的出现数量,要让产品研发的流程更加敏捷,要缩短产品的研发周期,最后在产品上线以后,要让用户用得更加顺畅,要让用户感觉产品服务零缺陷。
不同于单元测试,接口测试本质上还是一种黑盒的测试,所以非常适合专职测试工程师去参与和覆盖。
接口测试框架选型
1.目前接口测试框架的选型,最常见的方法是采用 jmeter,soapUI,postman,robotframework 等 UI 化的接口测试框架来做。
好处是业务测试人员可以不用或很少写测试代码,入门门槛低,前几年有很多公司都曾经开发过类似的测试框架,有前端有后端,专职的测试开发人员维护,业务测试人员只需要知道怎么操作而不需要参与具体 coding。
这种方法看起来非常高大上,但实际的问题是执行过程中主要的工作变成了测试框架的维护,非常依赖专职测试开发人员的设计和开发能力,每增加一种新的接口协议(比如 dubbo、hessian 或者内部自定义的协议)就需要在框架上增加支持;更致命的是一旦核心测试开发人员出现流动,就很容易造成整个接口测试体系的崩塌;另外对业务测试人员的技能成长也并不公平,个人已面试过太多只会使用某大公司 XXX 测试框架却完全不了解具体实现方式的工程师。
《google 软件测试之道》中早已有过预言,保密和私有化的基础测试设施并不能获得想象中的好处,这种方式意味着昂贵和迟缓,即使在公司内部的不同项目之间也很难做到复用。未来的测试基础设施必然是建立在共享代码和开源框架的基础上,测试开发人员需要更多的利用开源项目并为之贡献。
最近重读了一次这本四五年前几乎改变软件测试行业的书籍,发现里面的预言都是如此准确,当然也可以认为国内整个行业都正参照 google 的方式在进行演变。
2.使用 junit、testng 等 java 接口框架,直接编写测试代码去测试,同时对一些重复性的工作抽象建立基础库或方法。
有点类似于单元测试,这种方法扩展性好实现灵活,作为程序员可以用代码实现灵活的场景组织和功能,只要稍微二次开发一下,但需要测试工程师有一定的编码基础。
这种方式在前几年实施的难度还是比较大,因为在市场上要找到懂 java 代码的测试工程师都寥寥无几,但在对测试工程师开发能力要求越来越多的今天实施难度已没有想象中困难,java/python 等语言的编码能力也已成为我们团队招聘时的基本要求。
另外提下,这里使用 java 而不用其他语言的原因,主要是团队的技术储备 java 是强项,拥有丰富的开源测试库,而且一般互联网公司的产品基本都是采用 java 框架进行开发,和开发团队技术栈保持一致非常有必要性。