HttpRunner是一个简单优雅但功能强大的 HTTP(S) 测试框架。以YAML或JSON格式定义测试用例,保障测试用例描述的统一性和可维护性。程序执行的时候,会处理用户输入的yml/json文件并基于模板生成测试文件。最终通过pytest.main([])的方式去执行生成的用例文件。用户只需要通过json/yml文件去维护用例即可,不需要关心程序如何处理json/yml文件,如何生成测试文件等,简单快速通过pytest运行用例,并获取详细的测试报告。
主要特征:
·以YAML或JSON格式定义测试用例,保障测试用例描述的统一性和可维护性
testsuite > testcase > teststep(api)
支持设计一系列的测试场景,每个测试场景可包含多个teststep。
支持参数化设计
支持variables/ extract/ validate/hooks机制(使用jmespath ,提取和验证json响应)
支持添加逻辑运算辅助函数(debugtalk.py),在测试脚本中实现复杂的动态逻辑
·在HAR 支持下记录并生成测试用例。(使用charles去抓取请求,生成的用例文件可能还需要手动处理)
·使用pytest执行测试文件 ,数百个插件随时可用。使用allure ,测试报告可以非常强大。
run_testcase():处理请求前的数据
__run_step() > __run_step_request(使用requests发起api请求并导出其他用例引用的变量(__step_datas))
·通过重复使用locust ,您可以进行性能测试,而无需进行额外的工作。
·支持CLI命令,与CI/CD完美结合。
工作流程
想要了解其工作流程,最好的办法就是使用debug模式,那在这里应该如何使用debug来参透httprunner的执行流程呢?跟着我来看下:
调试技巧
使用pycharm进行调试,且python环境使用Virtualenv进行管理
·安装:pip install httprunner
·在/venv/bin/ 目录下找到hrun文件
编辑hrun文件,为sys.argv赋值。第一个是hrun的绝对路径,第二个是用例的绝对路径
在sys.exit(main_hrun_alias())这里打个断点,那么就可以开始愉快的调试之旅了~
# -*- coding: utf-8 -*-
import re
import sys
from httprunner.cli import main_hrun_alias
if __name__ == '__main__':
sys.argv = ['/Users/boyizhang/PycharmProjects/apitest/venv/bin/hrun', '/Users/boyizhang/PycharmProjects/apitest/hruntests/testcases/testheader.yml']
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main_hrun_alias())
工作流
调试日志:
进入main_hrun_alias()中,并为sys.argv的列表插入新的一项“run”(因为我们是执行用例)。
进入main(),因为我们含有“run”,所以现在开始执行用例。
进入main_run(extra_args),根据extra_args(yml/json路径)将yml/json文件生成python文件(测试文件)。
进入main_make(),判断路径是否存在。
进入 __make() ,加载yml/json文件,并准备数据(按照数据的优先级进行复制,从低到高)。
进入make_testcase(),将yml/json文件基于模板生成对应的py文件。
最后回到main_run()方法,继续执行main_make()以下的代码,可以发现,程序最终将创建的py文件交给pytest.main()来执行。
上面演示了用例文件从yml/json到py文件的生成流程。接下来可以对生成的py文件继续调试。
这里我做了一个比较简单的演示,小伙伴们如果有兴趣,可以根据我的思路继续你的调试之旅哦。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理