接口测试 httprunner2.0 概述及使用说明

蔡瑞淳 for 君海游戏QA · 2019年04月09日 · 最后由 不二 回复于 2019年07月09日 · 4151 次阅读

近来因工作需要接触到 httprunner 接口测试框架,研究一波后做下总结,若有问题,欢迎指正,具体参考文章附在文尾。

一 概述

HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。

二 系统流程

三 文件组织

1、项目文件目录结构

说明:
(1)api 文件夹:存储接口定义描述
(2)testcases 文件夹:存储测试用例,文件夹也可以使用其它名称
(3)testsuites 文件夹:测试测试场景,文件夹也可以使用其它名称
(4)reports 文件夹:存储 HTML 测试报告
(5).env 文件:存储项目环境变量,通常用于存储项目敏感信息
(6)debugtalk.py:存储项目中逻辑运算辅助函数
·该文件存在时,将作为项目根目录定位标记,其所在目录即被视为项目工程根目录
·该文件不存在时,运行测试的所在路径(CWD)将被视为项目工程根目录
·测试例文件中的相对路径(例如.csv)均需基于项目工程根目录
·运行测试后,测试报告文件夹(reports)会生成在项目工程根目录

四 用例编写

1、用例编写
(1)api 文件夹中编辑接口描述文件,如 create_user.yml

(2)testcases 文件夹中编辑测试用例文件,如 create_and_check.yml

(3)testsuites 文件夹中编辑测试用例集,如 create_users.yml

2、编写用例注意事项
(1)extract 响应结果的字段有 : status_code, cookies, elapsed, headers, content, text, json, encoding, ok, reason, url。如果响应结果中有多层嵌套,可通过 content.xxx.0.id 格式获取 id,其中 content 是指响应内容,xxx 是响应内容中的某个字段,0 表示获取 xxx 数组中第一个内容。
(2)所有 json/yaml 和.env 文件中格式错误都会导致执行失败。
.env 编辑时需注意:从第一行开始编辑,结尾不要有空行,采用 key=value,value 不需用 “” 括起来,否则会变成 value 的一部分
(3)支持的检验器有 eq(=)、lt(<)、le(<=)、gt(>)、ge(>=)、ne(!=)、str_eq、len_eq、len_gt、len_ge、len_lt、len_le、contains、contained_by、type_match、regex_match、startswith、endswith。

五 变量或函数引用

1、变量引用
接口用例中,取值时可以通过自定义,也可以引用其他已定义好的变量或参数,格式为 $var

2、函数引用
接口用例中,取值时除了自定义、引用其他变量外,还可以引用 debugtalk.py 定义的函数来获取到函数返回值,格式为 ${get_value()}

六 环境变量引用

1、编辑.env 文件

注意:env 一般放置在项目根目录,若放置在其他目录或者命名不是.env 时,可采用 --dot-env-path 参数指定文件路径,如 hrun .../x.yml --dot-env-path .../xxx.env

2、引用环境变量:
(1)通过 ${ENV()}获取

(2)在 debugtalk.py 中通过 os.environ 获取

七 参数化数据驱动

Httprunner2.0 中支持 testsuits 中进行参数化和数据驱动,假如测试用例中定义了多个参数,那么测试用例在运行时会对参数进行笛卡尔积组合,覆盖所有参数组合情况。
1、参数情况分 2 种
(1)独立参数
(2)具有关联性的多个参数

2、指定数据源方式分 3 种
(1)在 YAML/JSON 中直接指定参数列表

(2)通过内置的 P 函数引用 CSV 文件

(3)调用 debugtalk.py 中自定义的函数生成参数列表

附:
1、以上内容参考或引用以下网址
https://github.com/HttpRunner/HttpRunner
https://cn.httprunner.org/
https://debugtalk.com/post/HttpRunner-testcase-layer/

共收到 5 条回复 时间 点赞

这个总结很好,赞一个

有一类场景:需要根据先前接口返回结果 (eg:列表) 来对后续接口进行数据驱动的情况。
请问是如何解决的

regex_match 这个具体怎么用呀?

刘悦 回复

正则表达式这个不是很懂,看文档是这样描述的,希望能帮到你
| regex_match | regex matches | re.match(B, A) | 'abcdef' regex 'a\w+d' |

5楼 已删除

您好,可以分享一下游戏服务器压测的方法吗?看了一些工具 jmeter,loardrunner 等等;但是对于游戏的服务器感觉好像不太适用;想请教下可以吗

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册