一. 为什么要做(自动化)接口测试?
1、系统的复杂度上升,导致测试方法成本上升且测试效率大幅下降,而接口测试相对于UI测试更加稳定,且相对容易实现自动化持续集成,可以减少人工回归测试的时间成本,缩短测试周期。
2、接口测试可以更早的介入到项目开发中,一般只要接口定义好了,就可以写代码了。而功能测试必须要等系统提供可测的界面后才能进行。
3、相对于UI测试来说,接口测试可以更简单全面地覆盖到底层的代码逻辑,从而发现一些隐藏bug。
4、从安全层面来说,现在大部分系统前后端框架是分离的,只依赖前端进行限制已经不能满足系统的安全要求,需要后端同步进行控制,所以测试也需要从接口层面进行验证。
二. 接口测试原理
模拟客户端向服务器发送请求,服务器接收后进行处理并向客户端返回应答,客户端再接收应答的过程。
三. 测试范围
- 业务功能(包括正常、异常场景是否实现)
- 业务规则(覆盖度是否全面)
- 参数验证(边界、业务规则是否达到要求)
- 异常场景(重复提交、并发提交、事务中断、多机环境、大数据量测试)
- 性能测试(响应时间、吞吐量、并发数、资源要求)
- 安全测试(权限验证、SQL注入等)
四. 框架规划思路
1.各测试工具优缺点对比
Jmeter
Python
postman
优点
-
学习者不需要会代码,不需要编程,熟悉http请求,熟悉业务流程,就可以根据页面中input对象来编写测试用例
-
Jmeter 自带组件、函数,所以编写接口性能脚本特别高效、快捷
-
利用badboy录制测试脚本,可以快速的形成测试脚本
-
Python 生态系统中有大量的第三方库和框架,专门用于自动化测试,如 Selenium、Pytest、unittest 等。这些库和框架提供了各种功能和工具,简化了测试脚本的编写和执行。
-
Python 的框架可以自由设计,函数可以自己封装,相对灵活,可扩展性较强
-
Python 不仅适用于 Web 应用程序的自动化测试,还可以用于移动应用程序、网络协议、数据库等多个领域的自动化测试
-
提供直观的用户界面和简单的工作流程,使得创建和执行测试变得容易。无需编写复杂的代码,即可轻松设置和运行测试。
-
支持多种协议和格式:Postman 支持多种常见的 API 协议和数据格式,如 REST、SOAP、GraphQL 和 JSON。它还能够处理各种身份验证机制,如基本身份验证、OAuth 和 JWT。
-
具有强大的自动化测试功能,可以编写和运行测试脚本。通过使用 JavaScript,可以编写复杂的测试脚本,包括断言、循环和条件逻辑
缺点 -
虽然JMeter提供了一定的BeanShell编程能力和自定义协议的扩展能力,可以让脚本开发人员有一定的灵活性,受制于JMeter本身的限制,与开发人员直接使用语言进行接口测试相比,灵活性还是相对不足。
-
对于复杂场景的测试脚本编写会比较困难。
-
持续集成。利用第三方的Jenkins插件、Ant和Maven等,能与JMeter进行一些基本的持续测试集成,但是对于完全自动化所需的测试环境的管理等功能支持不足,配置过程略嫌麻烦。
-
脚本和结果基本都是本地管理,无法做到在线管理
-
Jmeter脚本的维护需要保存为本地文件,而每个脚本文件只能保存一个测试用例,不利于脚本的维护。
-
调试不方便,不容易从结果提示错误中快速定位到错误点具体位置,例如一次测试几百个接口,如果有几个接口出现了问题,还得一个一个去翻查找
-
使用过程中单位不规范(有时候单位秒、分)
-
Python 接口自动化上手比较难,难点在于测试框架,需要自己封装
-
Python 写接口自动化脚本需要时间
-
使用 Python 进行自动化测试可能需要更多的开发和维护成本。编写和维护复杂的测试脚本可能需要更多的时间和技术知识。
-
Python 是一种解释型语言,相对于编译型语言,如 Java 或 C++,它可能在执行速度上稍慢一些。对于需要高性能的测试场景,这可能会对测试执行时间产生一定影响。
-
在使用 Python 进行自动化测试时,需要确保测试环境中已经正确安装了 Python 解释器和相关的依赖库。这可能导致在不同的环境中进行测试时需要额外的配置和管理。
-
Python 有一个广泛的生态系统,有大量的第三方库可供使用。然而,依赖管理可能会变得复杂,特别是当需要处理多个库的版本兼容性和冲突时。
-
不适用于所有测试类型:它可能不适用于所有类型的测试。对于某些类型的 UI 测试或特定的移动应用程序测试,可能需要使用其他工具或语言。
-
主要依赖于用户界面进行测试创建和设置,这对于一些需要更复杂逻辑和灵活性的测试场景可能不够理想
-
尽管提供了一些自定义和扩展功能,但其扩展性相对有限。当面对需要高度定制化的自动化测试需求时,可能会受到一定的限制。
-
随着测试用例的增加和测试场景的复杂化,维护 Postman 脚本可能会变得复杂和困难。在没有良好的组织和规划的情况下,脚本的维护成本可能会增加。
-
有限的测试环境支持:Postman 目前主要专注于 API 测试,对于其他类型的测试,如单元测试或 UI 测试,支持相对较少。
总结
-
适合对代码不敏感的使用人员,不会代码也可以完成接口自动化,适合业务场景不复杂的项目。适合紧急迭代的项目。
-
Python 写接口自动化脚本需要时间,不适合紧急迭代的项目。
-
工具封装的很好,网页调试利器,单个调接口十分方便;对于没有代码基础的人来说,新手可以很快熟悉postman的基础使用方法,学习成本低
2.选择语言
python
[] java
理由:
自动化测试的目的是为了提升测试效率,将更多重复繁琐的工作交给程序自动执行,Python语法相比于Java来说更加简洁,可能Java要写十行,Python只需要两行,如果选择Java可能就需要花更多的时间去编写自动化脚本,而Python所花费的时间会少一些
3.测试框架选型
[] unittest ---python自带的测试框架
pytest ---unittest升级版
[] httprunner
[] robot framework
理由:
pytest 是非常成熟全功能的Python测试框架。
它可以胜任unittest能做到的各种各样场景,比如:单元测试、web测试、app测试、接口测试等等。
pytest是个插件化的平台,它比unittest更强大也在于此。目前已经有大量第三方插件扩展和增强它的功能
可以很好的和CI工具进行结合
4.报告可视化方案选型
[] htmltestrunner
[] beautifulreport
allure
理由
HTMLtestRunner和BeautifulReport,pytest-html生成的报告内容基本差不多,将测试结果可以在一个页面中全部展示出来,但是allure报告,存在多个页面内容,如果测试用例较多的话,可以进行查看更加方便快捷
5.接口自动化测试框架的搭建一般有两种思路:
1.基于工具的
Postman+Newman+Jenkins+Git/svn
Jmeter+Ant+Jenkins+Git/svn
2.基于代码的
Python+Requests+Pytest+Allure
五. 项目代码工程构建思路
设计框架的原则:
封装基类方法
对于一些较通用的方法,可以封装,比如发送请求、增、删、改、查。
高内聚低耦合
每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码。
模块与模块之间接口的复杂程度尽量低,比如在类内部尽可能减少方法之间的调用,否则一个方法的变动会影响调 用它的另一个方法。
脚本分离
业务代码、测试数据应该相互剥离、灵活调用。代码中应该不出现具体的数据、配置。而是调用对应的数据文件。