熟悉我CSDN的朋友们应该知道,之前已经更新了requests、pytest、allure2、yaml、jenkins、postman等基础知识的合集。相信大家对接口测试已经有了全面的认识,现在应该迫不及待地想要一个实战项目了。接下来的文章中,我们将把这些知识点串联起来,以钉钉开放接口为例,一起从0到1开发一个通用的、可落地的接口自动化测试框架。如果大家有好的意见和建议,欢迎在评论区一起讨论!
背景
- 微服务架构:现代应用程序越来越多地采用微服务架构,其中服务之间通过 API 进行通信。这增加了对 API 测试的需求。
- 持续集成/持续部署(CI/CD):在 CI/CD 流程中,自动化测试是确保代码质量的关键环节。接口自动化测试可以快速验证代码更改是否符合预期。
- 敏捷开发:敏捷开发强调快速迭代和频繁发布。自动化接口测试可以减少回归测试的时间,加快发布周期。
- 技术栈多样性:不同的团队可能使用不同的技术栈开发服务。接口自动化测试框架通常与技术栈无关,可以统一测试标准。
作用
- 提高测试效率:自动化测试可以快速执行大量测试用例,提高测试效率。
- 减少人为错误:自动化测试减少了手动测试过程中可能出现的人为错误。
- 实时反馈:自动化测试可以提供即时的测试结果,帮助开发团队快速定位问题。
- 回归测试:在软件迭代过程中,自动化测试可以确保新代码不会破坏现有功能。
- 负载测试:接口自动化测试可以模拟高并发请求,评估系统的性能。
- 安全性测试:自动化测试可以检测 API 安全漏洞,如输入验证、认证和授权问题。
- 文档验证:自动化测试可以验证 API 的实际行为是否与文档描述一致。
- 跨团队协作:接口自动化测试框架可以作为不同团队之间协作的基础,确保接口的一致性和可用性。
意义
- 质量保证:接口自动化测试是确保软件质量的重要手段。
- 风险降低:通过早期发现问题,减少后期修复的成本和风险。
- 敏捷性提升:自动化测试支持快速迭代和部署,提高团队的敏捷性。
- 资源优化:释放测试人员从重复性工作中,让他们专注于更复杂的测试场景。
- 业务支持:通过快速响应开发变更,更好地支持业务需求。
- 技术进步:随着 AI 和机器学习技术的发展,接口自动化测试框架可以变得更加智能和高效。
功能概览
- 运行环境:支持windows/mac/linux
- 接口协议:支持http/https协议
- 测试环境:支持test/stg/prod环境切换
- 接口场景:支持单接口/场景接口
- 数据库:支持mysql/mongod增删改查操作
- 数据驱动:支持yaml/ini/db等三种类型驱动
- 参数化:支持动态模版替换
- 用例框架:支持pytest用例
- json提取:支持jmespath表达式
- 用例断言:支持等于/不等于/大于/小于/包含/不包含/True/False/长度等于/长度不等于/开头/结尾/数据库/正则匹配等10几种常见的断言
- 测试报告: 支持allure2报告定制
- 失败重试:支持
- 用例并发执行:支持
- 日志记录:支持控制台和文件输出
- 代码托管:支持github/gitlab
- 接口文档:钉钉开放接口文档(支持同学们本地调用调试)
- 持续集成:支持jenkins参数化构建/定时任务/关联任务
- 消息通知: 支持钉钉/飞书/企业微信/邮件等4种方式的测试结果通知
框架设计
主要技术栈:python3+requests+pytest+yaml+jmespath+allure2+github+jenkins
框架目录
commons:通用方法层,包括测试引擎、文件读写、数据库操作、业务封装、断言封装、报告增强、日志封装
config:配置文件层,test/stg/prod3个环境分开管理,其中有xxx_config.yaml和db.ini 分别为接口和数据库的配置信息
data:数据文件层,test/stg/prod3个环境分开管理,其中有xxxx_api.yaml为接口的测试数据模版
logs:日志记录层,按照时间维度记录接口测试执行的日志
reports:测试报告层,allure_results为测试结果数据,allure_reports为测试报告,status.txt为简要测试结果,后续供jenkins调用
tests:测试用例层,按照微服务分目录,新建测试用例py文件
utils:工具层,邮件/钉钉/飞书/企业微信结果通知封装
venv:项目虚拟环境
environment.properties:allure2报告环境信息配置
conftest.py:pytest钩子函数
debug.py:项目调试函数
pytest.ini:pytest配置文件
requirements.txt: 项目依赖包管理文件
总结
接口自动化测试框架是现代软件开发不可或缺的一部分,它帮助团队提高软件交付的速度和质量,同时降低风险和成本。随着技术的不断进步,接口自动化测试框架将继续发展,为软件开发带来更多的可能性。