httprunner3源码解读(二):目录结构分析
上一篇简单介绍了httprunner的主要特征及简单使用,从本篇开始陆续解读httprunner3源码。
1、为什么写httprunner的源码解读?
- 当下Python系的接口测试框架多数基于httprunner实现或采用了类似的设计思想,httprunner可以作为一个典型来深入了解。
- 阅读httprunner3源码并学习其设计思想,自己在工作中也有写过一些接口测试框架并应用与测试团队中,觉得做的还不错,且没依赖现有的框架,但是随着项目规模不断增大、场景需求的增加,还是有设计上不合理,基于已有测试数据较多,可能还只能做补丁修改,极不方便再做设计变更。
- 记录自己基于httprunner接口测试框架的二次开发历程,希望也能帮到你。
- 关于接口测试框架设计原则,可以参考 自动化测试框架设计原则
2、依赖库
上一篇有讲到httprunner拥抱开源,依赖requests ,pytest ,pydantic ,allure 和 locust ,除此外还依赖一些比较好用的第三方库。官方文档(https://docs.httprunner.org/)
1 black==19.10b0 # python 代码格式化工具 2 Brotli==1.0.9 # 压缩 3 Jinja2==2.11.3 # 模板文件,生产测试文件 4 jmespath==0.9.5 # json 提取,语法参考 https://jmespath.org/tutorial.html 5 loguru==0.4.1 # 日志 6 pydantic==1.8.2 # 数据类型定义,类型校验 7 pytest==5.4.3 # 单元测试框架 8 pytest-html==2.1.1 # pytest生成html报告 9 PyYAML==5.4.1 # 解析yaml 10 allure-pytest==2.8.16 # 生成allure 报告 11 requests==2.26.0 # 请求库 12 sentry-sdk==0.14.4 # 捕捉异常 13 locust = "^2.4.1" # 协程实现的性能测试工具
3、demo目录
新建一个demo后最终目录如下:
httprunner startproject demo
4、源码目录
1 # https://github.com/httprunner/httprunner 2 git clone https://github.com/httprunner/httprunner.git
4.1、httprunner目录结构分析
1 │ cli.py # 命令集封装 2 │ client.py # request封装,网络请求client 3 │ compat.py # 用例适配,处理testcase格式v2和v3之间的兼容性问题。 4 │ exceptions.py # 自定义异常 5 │ loader.py # 加载用例设计文件JSON/YAML、环境变量、参数化,生成model定义的测试数据 6 │ make.py # 依据测试数据生产pytest测试文件,并格式化生成的python代码 7 │ models.py # pydantic 数据模型定义 8 │ parser.py # 参数解析器,解析用例当中引用变量、自定义方法等 9 │ response.py # 响应内容处理:断言、变量提取 10 │ runner.py # 执行/启动器 11 │ scaffold.py # HttpRunner 脚手架,快速生成httprunner测试项目 12 │ testcase.py # 测试用例对象封装 13 │ utils.py # 工具类 14 │ __init__.py # 初始化文件,指定httprunner库包含的模块 15 │ __main__.py # httprunner命令入库,调用cli.py的main函数 16 │ 17 ├─app # 网络服务模块 18 │ │ main.py 19 │ │ __init__.py 20 │ │ 21 │ └─routers 22 │ │ debug.py 23 │ │ debugtalk.py 24 │ │ deps.py 25 │ └─__init__.py 26 │ 27 ├─builtin # 内置方法、校验比较器,供YAML/JSON用例设计文件中testcases使用 28 │ │ comparators.py 29 │ │ functions.py 30 │ └─__init__.py 31 │ 32 └─ext # 扩展功能 33 │ __init__.py 34 │ 35 ├─har2case # har 文件 转 httprunner测试用例文件 36 │ │ core.py 37 │ │ utils.py 38 │ └─__init__.py 39 │ 40 ├─locust # 性能测试相关 41 │ │ locustfile.py 42 │ └─__init__.py 43 │ 44 └─uploader # 文件上传 45 │ 46 └─__init__.py
4.2、框架流程
-------- THE END --------