上一章:
Django实现接口自动化平台(四)解决跨域问题【持续更新中】_做测试的喵酱的博客-CSDN博客
下一章:
一、参考地址:
使用说明_httprunner2.0 概述及使用说明
二、介绍
HttpRunner是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。
三、安装
# 安装稳定版本
pip install httprunner==2.5.7
查看是否安装成功
(venv) zhaohui@zhaohuideMBP miaostudydjango % httprunner -V
2.5.7
四、创建项目
hrun --startproject apitset
或者
httprunner --startproject apitest
五、虚拟环境配置
Pycharm创建虚拟环境_做测试的喵酱的博客-CSDN博客
1、创建虚拟环境
2、进入虚拟环境
3、在虚拟环境中,再次安装httprunner
# 安装稳定版本
pip install httprunner==2.5.7
六、执行测试demo
创建完的项目中默认有测试用例,我们可以直接运行测试并生成报告。
hrun api/demo_api.yml --report-dir=reports
注意:
case路径:使用绝对路径与相对路径都可以。相对路径,是相对于跟目录的路径
生成报告的路径: 使用绝对路径与相对路径都可以。相对路径,是相对于跟目录的路径
报告样式:
七、工程结构介绍
说明:
(1)api 文件夹:存储接口定义描述
(2)testcases 文件夹:存储测试用例,文件夹也可以使用其它名称
(3)testsuites 文件夹:测试测试场景,文件夹也可以使用其它名称
(4)reports 文件夹:存储 html 测试报告
(5).env文件:存储项目环境变量,通常用于存储项目敏感信息
(6)debugtalk.py:存储项目中逻辑运算辅助函数
·该文件存在时,将作为项目根目录定位标记,其所在目录即被视为项目工程根目录
·该文件不存在时,运行测试的所在路径(CWD)将被视为项目工程根目录
·测试例文件中的相对路径(例如.csv)均需基于项目工程根目录
·运行测试后,测试报告文件夹(reports)会生成在项目工程根目录
八、编写yaml case
8.1 yaml语法
yaml语法_yaml在线语法_做测试的喵酱的博客-CSDN博客
case使用yaml编写的,所以学习yanl语法很重要
1、yaml是数据格式,不是数据类型(结构)
2、yaml配置文件的后缀为.yml或者.yaml
3、yaml中使用#作为注释,注释只能在某一行的前后,不能与key\value在同一行
4、yaml中有两种结构,一种是key: value,value与冒号之间必须有空格
另一种是 - key: value,“-”为列表结构
5、yaml文件中嵌套的同一级条目前缩进必须一致(一般缩进2个空格)
6、yaml中如果value使用引号(单引号或者双引号),那么该value为字符串类型
7、如果value中只要有字母,哪怕没有添加引号,一般也会识别为字符串类型(false、true、on、off、null除外)
8、value为false、true、on、off,是布尔类型,null为空
9、value中为纯数字或者小数,会被识别为int或float类型
8.2 编写case
yaml case格式,与python requests的传参一摸一样。
api/baidu_api.yml
name: 百度接口
variables:
var1: value1
var2: value2
request:
url: https://ug.baidu.com/mcp/pc/pcsearch
method: POST
headers:
Content-Type: "application/json"
json:
invoke_info: {"pos_1":[{}],"pos_2":[{}],"pos_3":[{}]}
validate:
- eq: ["status_code", 200]
执行case:
hrun api/baidu_api.yml --report-dir=reports
8.3 请求体 格式json或者form或者查询字符串参数
请求体为json参数:
headers:
Accept: "application/json"
json:
size: 3
page: 2
请求体为form表单参数:
headers:
Content-Type: "application/x-www-form-urlencoded"
data:
username: "root"
password: "123456"
请求体为查询字符串参数(get请求):
params:
size: 3
page: 2
8.4 断言
8.4.1 断言类型
断言类型可太多 了,我们这里放源码。
def get_uniform_comparator(comparator):
""" convert comparator alias to uniform name
"""
if comparator in ["eq", "equals", "==", "is"]:
return "equals"
elif comparator in ["lt", "less_than"]:
return "less_than"
elif comparator in ["le", "less_than_or_equals"]:
return "less_than_or_equals"
elif comparator in ["gt", "greater_than"]:
return "greater_than"
elif comparator in ["ge", "greater_than_or_equals"]:
return "greater_than_or_equals"
elif comparator in ["ne", "not_equals"]:
return "not_equals"
elif comparator in ["str_eq", "string_equals"]:
return "string_equals"
elif comparator in ["len_eq", "length_equals", "count_eq"]:
return "length_equals"
elif comparator in ["len_gt", "count_gt", "length_greater_than", "count_greater_than"]:
return "length_greater_than"
elif comparator in ["len_ge", "count_ge", "length_greater_than_or_equals",
"count_greater_than_or_equals"]:
return "length_greater_than_or_equals"
elif comparator in ["len_lt", "count_lt", "length_less_than", "count_less_than"]:
return "length_less_than"
elif comparator in ["len_le", "count_le", "length_less_than_or_equals",
"count_less_than_or_equals"]:
return "length_less_than_or_equals"
else:
return comparator
eq 是相等断言。
validate:
- eq: ["status_code", 200]
contains:实际值是否包含期望值
contains_by:期望值是否包含实际值。
注意:这里的包含,指的是返回值字典中的key,不是value。
其他断言类型,看上面的源码。
8.4.2 断言--实际值
validate:
- eq: ["status_code", 200]
方括号中,第一个参数为 实际值,第二个参数为期望值。
响应状态码:status_code
响应体数据:
- content
- text
- json
当返回值为json数据时,可以使用content、text、json 任意一个。获取的值都为字典格式。
获取返回值字典中的某一个key的值。直接用.
比如:获取返回值字典中的username的值。json.username
validate:
- eq: ["json.username", "张三"]
返回值value为列表时,用下标取值,如返回值为
{"username":["张三","李四","王武"]}
实际值,提取张三
json.username.0
8.5 设置请求host
在yaml文件中,设置base_url 的值,在request模块下,的url 只设置uri就可以了。
如:
base_url: "http:127.0.0.1:8000"
request:
url: "/user/login/"
九、局部变量&环境变量(全局变量)
9.1 局部变量
设置局部变量,只在当前yml文件中生效。
1、在variables 下,以key:value的形式定义变量
2、引用变量,使用$变量名进行调用
举例:
variables:
my_name: "zhangsan"
my_password: "123456"
request:
url: "/user/login/"
method: POST
data:
username: "$my_name"
password: "$my_password"
9.2 环境变量(全局变量)
环境变量(全局变量)在所有yml文件中都生效。
1、在项目的跟路径下的.env文件中,设置环境变量
定义: 环境变量名=环境变量值
注意:等号两边不需要有空格
2、引用变量
使用${ENV(环境变量名)}
3、举例,设置全局host
a、在项目的跟路径下的.env文件中,设置环境变量BASE_URL
BASE_URL=http://127.0.0.1:8000
b、在yml文件中,引用环境变量
base_url: "${ENV(BASE_URL)}"
request:
url: "/user/login/"
method: POST