1. 通过charles抓包工具,抓出接口,并Export session,保存为.har文件,在再cmd.exe中运行“har2cass xxx.har”得到接口的JSON文件,或者运行“har2case xxx.har -2y”得到接口对应的yaml文件。
2. 通过“hrun xxx.json”或者“hrun xxx.yaml”运行测试用例并得到html格式的测试报告
3. 数据驱动,参数引用,第一种直接引用测试,第二种读取CSV文件中的数据,第三种通过debugtalk.py中python代码生成的数
据
config:
name: testcase description
testcases:
$num:
testcase: ./testcases/baidu.json
parameters:
num: [1, 2, 3] #直接引用参数
#date-name: ${P(./data/data.csv)} #引用CSV文件
#num: ${get_date(2)} #调用函数debugtalk.py中的方法
4. 获取response中的数据,用“extract”关键字, httprunner里面的content
实际上就是request里面的r.content
,返回的是一个byte类型。
{
"code": 0,
"msg": "login success!",
"username": "test",
"token": "b3f7e8e12d23591ea671374dee818c63b1599d4d"
}
上面的json数据,可以转成python里面对应的dict类型,extract提取方法
如果返回值是list类型的,例如:
[{
"age": 20,
"create_time": "2019-09-15",
"id": 1,
"mail": "[email protected]",
"name": "yoyo",
"sex": "M"
},
{
"age": 21,
"create_time": "2019-09-16",
"id": 2,
"mail": "[email protected]",
"name": "yoyo111",
"sex": "M"
}
]
上面这种转化成python里面的list对象,可以用content.int 方法取出对应下标的数据,对应的extract提取方法
通过content.int的方法也可以取出字符串里面的值,比如我要取出第一组数据,name对应值"yoyo"里面的第三个字符,就可以用content.0.name.2,这种取字符串的一般很少用
5. 重复运行,在testcase中加time,例如:
- config:
name: httpbin api test
request:
base_url: http://www.httpbin.org
- test:
name: get request
times: 5
request:
url: /get
method: GET
validate:
- eq: [status_code,200]
这样,该测试用例就会执行5次
6. skip直接跳过用例;skipIf: 条件成立,返回值为True时候成立,则跳过用例;skipUnless: 条件不成立,返回值为False时候成立,则跳过用例
7. 一个访问歹百度的例子,目录如下:
testsuit->config.yml的代码
config:
name: testcase description
testcases:
$num:
testcase: ./testcases/baidu.json
parameters:
num: [1, 2, 3] #直接引用参数
#date-name: ${P(./data/data.csv)} #引用CSV文件
#num: ${get_date(2)} #调用函数debugtalk.py中的方法
testcases->baidu.json代码
[
{
"config": {
"name": "百度",
"base_url": "https://www.baidu.com",
"headers": {"Content-Type": "application/x-www-form-urlencoded" },
"parameters": {
"num":"${get_date_randint(10)}"
}
}
},
{
"test": {
"name": "baidu_json",
"request": {
"method": "GET",
"url": "/",
"params": {
"date": "$num"
}
},
"setup_hooks":[
"${hook_setup($num)}"
],
"teardown_hooks":[
"${hook_teardown($num)}"
],
"validate": [
{
"eq": ["status_code",200]
}
]
}
}
]
debugtalk.py中的代码:
import random
#返回一个列表
def get_date(num1):
dateid = 0
dateList = []
for temp in range(num1):
dateid += 1
dateList.append(str(dateid))
return dateList
#返回一个数字
def get_date_randint(num):
date = random.randint(0, num)
return date
def hook_setup(num):
print("函数执行%s..."%num)
def hook_teardown(num):
print('执行结束函数%s...'%num)
print(get_date_randint(10))
运行结果:
report中的报告详情:
学习文档:
https://cn.httprunner.org/
https://www.cnblogs.com/yoyoketang/tag/httprunner/default.html?page=2