现状
工具开发&维护 ——————-> 开发成本高
编写录⼊测试⽤例 ——————-> 执行烦琐费事效率低
测试⽤例管理理维护 ——————-> 不易维护
httprunner
优点1:业务导向,快速落地,提高投入传比
- 编写用例效率高、运行效率高、稳定性高
- 能实现自动化回归测试
- 性能测试脚本复用
辅助手工测试,能自定义生成特定业务数据
优点2:
充分复用优秀的开源项目
- 面向 HTTP(S) 协议的通用测试框架
- 高度可扩展性
只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试 性能测试 线上监控 持续集成等多种测试需求。
追求投入产出比,一份投入即可实现多种测试需求
- 重客户端、轻服务端设计
特性及原理
- 使用python的requests
底层使用python的requests,支持API接口的多种请求方法,包括 GET/POST/HEAD/PUT/DELETE 等,yml/
json文件描述了接口请求的信息(包括header、method、url等参数),测试用例加载引擎中可以实现将业务测试
用例转换为标准的测试用例数据结构,包括接口请求信息和预期接口响应信息,然后构造并发起HTTP请求,再将HTTP
请求的响应结果与预期结果进行对比判断即可
- 热加载的机制
debugtalk.py(与pytest中的confest.py用法一样),实现模块自动发现和热加载的机制。具体地,只要是在文
件目录存在目标文件,里面定义的函数都会在用例运行过程中被导入,并可被测试用例进行调用。同时,目标文件存在
优先级策略,从测试用例所在目录到系统根目录的整个路径中,越靠近测试用例的目标文件,优先级越高。我们可以利
用这个优先级原则来组织用例和依赖的Python函数模块。例如,我们可以将不同模块的测试用例集文件放在不同的文
件夹下:针对各个模块独有的依赖函数和变量,可以放置在对应文件夹的debugtalk.py文件中;而整个项目公共的
函数和变量,就可以放置到项目文件夹的debugtalk.py中。
- hook机制
httprunner可以在单个测试用例和整个测试用例集的前后实现 hook 函数(与unittest的setup、teardown
用法一样)。
- 测试用例与代码分离
测试用例可以只关注对业务逻辑测试场景的描述。如果接口请求参数中要包含当前的时间戳,yaml用例中没法直接描
述这个参数,如果是采用Python脚本来编写测试用例还好解决,只需要通过Python函数实现即可。但是现在测试用
例和框架代码分离了,没法在YAML里面执行Python函数,这该怎么办呢?httprunner定义了${}转义符,在测试用
例执行引擎进行适配实现,提取出${}中的字符串,通过eval计算得到表达式的值
参数化驱动
分层机制
测试用例分层机制的核心是将接口定义(api)、测试用例(testcase)、测试用例集(testsuite)进行分离,单独
进行描述和维护,从而尽可能地减少自动化测试用例的维护成本。为了更好地对接口描述进行管理,推荐使用独立的文
件对接口描述进行存储,即每个文件对应一个接口描述。
在测试步骤(teststep)中,可通过 api 字段引用接口定义,在测试用例的测试步骤中。除了可以引用接口定义,
还可以引用其它测试用例。通过这种方式,可以在避免重复描述的同时,解决测试用例的依赖关系,从而保证每个测
试用例都是独立可运行的测试用例集(testsuite)是测试用例的无序集合,集合中的测试用例应该都是相互独立
,不存在先后依赖关系的;如果确实存在先后依赖关系,那就需要在测试用例中完成依赖的处理。
测试结果统计报告简洁清晰,附带详尽日志记录,包括接口请求耗时、请求响应数据等
身兼多职,同时实现接口管理、接口自动化测试、接口性能测试(结合Locust)
具有可扩展性,便于扩展实现Web平台化