网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
回归测试旨在确保软件在经过修改、添加新功能、优化性能等后仍然能够正常工作,在软件的快速迭代开发中尤为关键。在接口回归测试中,通常需要构造数据、维护数据、测试用例及接入 CI/CD 流程。
对于一个产研团队来说,若要实现上述研发过程中所有环节的需求,至少需要使用四五种不同的工具才能满足,在实际工作中带来的问题也可想而知:
- 复杂性增加:使用多个工具可能会导致研发流程变得更加复杂,需要更多的时间和精力来协调和管理,团队无法在同一套系统中进行协作,导致各种沟通不及时、配合低效。
- 高风险:使用多个工具也意味着需要将数据从一个工具同步到另一个工具,这可能会增加出错的风险。
- 高成本:每个工具都有自己的使用方法和特点,需要花费时间来学习和掌握,后期也需要花费更多的时间来维护和更新工具,特别是在长期的项目中。
- 回归测试复杂度增加:对于需要快速迭代的复杂系统,需要频繁地维护数据和用例,无论是脚本化维护还是手工维护,都需要花费大量的精力。业务复杂度高时,回归测试的复杂度可能会日益增高,这可能需要更多的时间和资源来完成。
- “自动化”测试侧重于“自动化”执行,但维护工作依旧是“手工”,工作量非常大。
试想一下,如果有一款工具可以实现上述所有功能,那不是可以大大简化研发流程,提高测试效率,降低维护成本和出错率?今天我们要介绍的就是这样一个工具:AREX。
什么是 AREX
AREX 是一款开源的自动化测试平台,结合了 Postman + Mock + 比对测试,不仅提供了接口测试功能,更是通过 Java Agent 字节码注入技术,在生产环境录制和存储请求、应答数据,在测试环境回放请求和注入 Mock 数据,并存储新的应答,以此来达到自动录制、自动回放、自动比对,为接口回归测试提供便利,实现了从接口调试到接口数据 Mock,再到接口自动化测试和接口回归测试的闭环工作流。借助 AREX,开发和测试人员可以各取所需,协同合作,实现更高效的软件开发和测试。
接口调试(Postman)
AREX 不仅能支持 Postman 大部分的接口调试功能,还提供了接口用例功能。
接口用例功能
AREX 可以为同一个接口请求保存多个场景下的接口用例,每个用例都将自动继承当前接口请求下的配置,如 URL、请求方式及 Parameters、Header、Body 及前置脚本(Pre-request Script)等。通过继承父节点的接口请求配置,测试用例不需要一一重新定义接口的请求参数及前置脚本,后续再次调试时可直接运行接口用例,从而减少测试用例编写的工作量和时间。
AREX 还提供了测试用例管理功能。目前可以对测试用例添加标签(Add Tag)进行分类,后期将增加通过标签搜索用例的功能,方便管理。另外可以为用例添加描述,提高用例可读性,让协作者更容易理解测试用例的目的和预期结果,并且能更好地把握测试内容。
导入、导出用例(开发中)
各个测试团队都有自己的测试习惯,强制迁移到一个新的测试工具,有很大的迁移成本。AREX 后续将陆续支持各种格式的测试用例导入、导出,届时旧工具中的众多用例可以一键迁移到 AREX,无需再次新建项目,同时也可以将 AREX 录制到的用例导出,帮助测试团队降低迁移成本。
目前 AREX 正在支持 Postman 导出的用例导入,如需支持其他格式的用例导入,可以在 Github 上提交 Issue,与社区共建。
固化的测试用例也支持导出,目前支持 Postman 格式的用例(JSON格式)。
接口回归测试(Mock + 比对测试)
AREX 采用 Java 的 instrument 技术实现了无代码侵入的数据采集和自动化 Mock,在进行回放时会使用录制过程中采集到的数据进行 Mock,代替真正的数据访问,并不会产生真正的外部交互(如 DB 的写入、其他第三方服务的调用),避免了回放测试中脏数据的写入。同时支持各种主流技术框架的自动数据采集和 Mock,包括数据库 redis 等,并且支持了本地时间、缓存等数据的 Mock,回归测试时可以在测试环境完美还原生产执行时的数据环境。
如果用户对 Mock 的数据需要进一步了解,可以在回放界面找到指定的用例,查看 Mock 数据和修改 Mock 数据。
接口回归测试,不需要准备测试用例、测试数据、接口 ASSERT,只需安装 AREX Agent,就可以全部从生产环境获取最新的请求,最新的数据,使用比对差异来验证最新的代码:
- 支持录制生产请求应答
- 支持录制接口的外部请求和应答,包括http请求、数据请求、redis 请求等
- 支持自动比对接口应答的差异,外部请求的请求差异
- 支持回放请求和 MOCK 外部请求
步骤一:安装 AREX 服务。
git clone https://github.com/arextest/deployments.git
cd deployments
docker-compose up -d
步骤二:将你的被测试应用生产环境的运行方式修改成如下的命令
java -javaagent:/path/to/arex-agent-0.1.0.jar -Darex.service.name=your-service-name -Darex.storage.service.host=[storage.service.host:port](storage.service.host:port) -jar your-application.jar
其中:
/path/to/arex-agent-0.1.0.jar
需要修改为 arex-agent-0.1.0.jar 文件在你服务器中的实际路径your-service-name
需要修改为你被测应用的名称[storage.service.host:port]
需要修改为数据存储服务的地址和端口号your-application.jar
需要修改为应用程序的 jar 包文件名
或者在环境修改环境变量
export JAVA_OPTS="-javaagent:/path/to/arex-agent-0.1.0.jar -Darex.config.path=/path/to/arex.agent.conf"
步骤三:访问 AREX 前端页面,在 Replay 模块,选择到刚才搭载过 AREX Agent 的服务(即上文的 your-service-name
)。
步骤四:选择回放,输入你测试环境的接口地址,开始执行所有录制的接口测试用例。
回放完成后,会生成详尽的回放报告,可以很直观地看到回放通过率、接口通过率,以及每个接口下的详情。
出现回放失败的接口可以点击查看该接口下回放失败用例的比对结果,AREX 在最新版本中将比对结果进行了可视化展示,方便定位问题。
还有一种更简单的方式,不用安装 AREX 各种繁琐的服务组件,只需通过 ArexCli 启动本地模式:
git clone https://github.com/arextest/arex-agent-java.git
cd arex-agent-java
mvn clean install
java -jar "./arex-cli-parent/arex-cli/target/arex-cli.jar"
运行后进入如下界面
支持的命令如下:
-
ls:查看录制的所有case。
- [option: -o/–operation] view all cases under the specified operation
-
replay:回放录制好的数据并对比差异。
- [option: -n/–num] replay numbers, default the latest 10
- [option: -r/–recordId] single replay available for local debug
-
watch:查看回放结果及差异。
- [option: -r/–replayId] replay id, multiple are separated by spaces
需要注意的是,在本地模式中,AREX 使用 H2 作为本地存储保存测试数据,不再依赖配置服务和存储服务。同时,你将无法使用 AREX 的前端界面。
接口自动化测试
AREX 的自动化测试实际上就是通过将多个接口测试用例有序地组合在一起后进行批量运行,以测试一个完整的业务流程。
利用 AREX 工具进行接口自动化测试的一大优势在于,无需手动编写大量的测试用例,海量的线上真实请求即可轻松满足覆盖率,你可以选择直接固化已经录制好的接口用例,或通过强制录制的方式固化你所需要的接口用例。
AREX 固化用例
AREX 可以将搭载过 AREX Agent 的应用在线上真实发生的请求,包括其 Mock 数据通过一定的采样频率进行录制。如果需要将某些重要用例固化下来,作为之后回归测试必须执行的项目,只需在回放报告中,找到需要的用例,点击保存,选择目标目录,即可将用例固化下来,表现为常规的测试用例(区别在于报文头里边有arex-record-id标识)。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!