简介
HttpRunner是一款面向HTTP(S)协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。
安装
pip install httprunner
安装成功后使用命令查看版本
hrun -V
httprunner -V
常用文件
YAML/JSON(必须)
|
测试用例文件,存储接口测试相关信息 |
debugtalk.py(可选):
|
1.存储项目中逻辑运算辅助函数
2.该文件存在时,将作为项目根目录定位标记,其所在目录即被视
为项目工程根目录
3.该文件不存在时,运行测试的所在路径(CWD)将被视为项目工
程根目录
|
.env(可选):
|
存储项目环境变量,通常用于存储项目敏感信息
|
.csv(可选)
|
项目数据文件,用于进行数据驱动
|
reports
|
默认生成测试报告的存储文件夹
|
YAML编写注意
基本句法:
1.1key:(空格)value:表示一对键值对(空格必须有);
1.2以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的;
1.3属性和值大小写敏感;
备注:一定不要写tab
1.4 # 为注释
举例:
- config: name: "验证能否打开主网页" base_url: "http://www.hnxmxit.com" # 测试步骤 - test: name: "open hnxmxit mainpage api" request: url: "/" method: GET validate: - eq: ["status_code",200]
用例的基本结构
- 每个 YAML/JSON 文件对应一个测试用例(testcase)
- 每个测试用例为一个list of dict结构,其中可能包含全局配置项(config)和若干个测试步骤(test)
- config 为全局配置项,作用域为整个测试用例
- test 对应单个测试步骤,作用域仅限于本身
示例:
# 全局配置项 - config: name: "验证能否打开主网页" base_url: "http://www.hnxmxit.com" # 测试步骤 - test: name: "open hnxmxit mainpage api" request: url: "/" method: GET validate: - eq: ["status_code",200]
模拟各种请求示例
get请求:
# 全局配置项 - config: name: "验证能否打开主网页" base_url: "http://www.hnxmxit.com" # 测试步骤 - test: name: "open hnxmxit mainpage api" request: url: "/" method: GET validate: - eq: ["status_code",200]
带参数的get请求:
# 模拟带参数的GET请求 - config: name: 验证能否获取token值 base_url: https://api.weixin.qq.com - test: name: get access_token request: url: /cgi-bin/token method: GET params: grant_type: client_credential appid: wxec83eaada223a9c8 secret: 1867d7f1cabb3bafae0b7304e8251a09 validate: - eq: ["status_code",200] - eq: [content.expires_in, 7200]
模拟请求头:
# 模拟请求头 - config: name: "验证百度搜索是否正确" base_url: "https://www.baidu.com" - test: name: "百度搜索请求" request: url: "/s" method: GET params: wd: "amazing" headers: User-Agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36" Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" Accept-Encoding: "gzip, deflate, br" Accept-Language: "zh-CN,zh;q=0.9" validate: - eq: ["status_code",200]
模拟post请求:
# post请求 - config: name: "验证修改标签" base_url: "https://api.weixin.qq.com" - test: name: "修改标签接口" request: url: "/cgi-bin/tags/update" method: POST headers: Content_Type: "application/json" params: access_token: "34_Q6hFvzVz_UAzYulDe3JxkqP8sLxFQygB5t1HZhpzN3Kxak-Ztdy7jB77rnYbEV8H9qIxKLHvhZxxthR9ADkohmhZfJpO8Wv2kkgLXF7KNQjHwDqh-A4VsOyS-mtbAuIAHfVeUvUZKw3QdZEKFAYdAJAVQO" json: { "tag" : {"id" : 134, "name" : "天下无贼" } } validate: - eq: ["status_code",200] - eq: [content.errcode,0]
变量使用:
# 变量使用 - config: name: 验证能否获取token值 base_url: https://api.weixin.qq.com # variables: # - appid: wxec83eaada223a9c8 # - secret: 1867d7f1cabb3bafae0b7304e8251a09 - test: name: get access_token variables: - appid: wxec83eaada223a9c8 - secret: 1867d7f1cabb3bafae0b7304e8251a09 request: url: /cgi-bin/token method: GET params: grant_type: client_credential appid: $appid secret: $secret validate: - eq: ["status_code",200] - eq: [content.expires_in, 7200]
执行命令
打开CMD终端输入
# hrun 路径/文件名.yml hrun . estcases est_hava_variables_requests.yml
测试用例结构
对于单个YAML/JSON文件来说,数据存储结构为list of dict 的形式,其中可能包含一个全局配置项(config)和若干个测试用例步骤(test).
对应的YAML格式:
- config: .... - test: .... - test: .... - test: ....
变量空间作用域
在测试用例内部,HttpRunner划分了两层变量空间作用域(context)
config:作为整个测试用例的全局配置项,作用域为整个测试用例;
test:测试步骤的变量空间(context)会继承或覆盖config中定义的内容;