引言
在我们对实际业务进行接口自动化的落地当中,难免会遇到特殊场景的处理,比如:
- 获取
token
- 前置处理函数
setup_hooks
和后置处理函数teardown_hooks
- 常见的加解密
sign
等一系列签名认证- 操作数据库
- 编写随机函数
- 读取图片、或者其他格式文件等函数
- 构造参数化数据
- 对返回数据类型进行转换
- 参数化
csv
里面数据类型的转换 - 以及封装一些常用的函数
1. 简单的引用自定义函数
我们还是用之前的例子,获取指定的author
请求;
首先需要向request
传进一个我们指定的author_id
,我们先将author_id
作为在debugtalk.py
文件中定义函数中的返回值,内容如下:
def get_author_ids():
from loguru import logger
l = [
'801994',
'1229873',
'757351',
'859990'
]
logger.debug(f'使用的author_id 列表 >>> {l}')
return l
然后在测试用例文件的内容如下:
引用方式:
${function()} # function() 即为在debugtalk.py中定义的函数
测试用例完整代码如下:
config:
name: testcase description
parameters:
author_id: ${get_author_ids()}
variables: {}
verify: false
base_url: ${ENV(base_url)}
teststeps:
- name: /api2/user/followings/status
request:
cookies:
Hm_lpvt_b85cbcc76e92e3fd79be8f2fed0f504f: '1628342649'
Hm_lvt_b85cbcc76e92e3fd79be8f2fed0f504f: 1628163442,1628172667,1628334320
headers:
COMMON_ACCESS_TOKEN: MGJRTW5TU0xiU3M0TEY1QUg0N1NnTFhsWXVoYm5nOFlrbVM5MEpRbDEzaTI0TTk4NHFhTEZMSW1YZ0lnNEw0WU0wMXdhbVJFYTBmNnNrNDJpQUZRcG4xZXFwWHQwc3ZoL0Y2U0dhMHM0WTRrZ3RGU2dYMDM0WEU2OGU4b3FRTDA=
COMMON_ACCESS_TOKEN_SECRET: NjM4ODgxLCwxNjI4MzQyNjAzOTM1LCxodHRwczovL3N0YXRpYy5xaWRpYW5sYS5jb20vd29zaGlwbV9kZWZfaGVhZF8xLmpwZywseWMsLDRkNDI0MzM0Y2U2NDQ2NDI5MThlNjFiZjNlZmQ5NjgzLTAtMQ==
method: GET
params:
authorIds: ${author_id}
url: /api2/user/followings/status
validate:
- eq:
- status_code
- 200
执行结果可以看到,我们打印的日志:
2. 钩子函数:前置处理、后置处理
首先在debugtalk.py
文件中定义钩子函数,然后直接在测试步骤使用setup_hooks
或者teardown_hooks
,然后调用自定义的钩子函数即可;
举个例子:
使用企业微信作为例子:
debugtalk.py
代码如下:
def get_wechat_token():
import requests
data = {
'corpid': 'wwb4f39b*****a8a3a',
'corpsecret': 'Oyc2BalKGSP1KCmdld0P2pSBDaXSeNrHYEwKX8V4sB8'
}
response = requests.get(url='https://qyapi.weixin.qq.com/cgi-bin/gettoken',
params=data)
return response
from httprunner.response import ResponseObject
def setup_hook():
print("前置处理 >>> setup。")
def teardown_hook(response: ResponseObject):
token = response.resp_obj.json()['access_token']
print("后置处理 >>> response:", token)
return len(token)
测试用例get_depart_member.yml
代码如下:
config:
name: 获取企业微信的部门成员
verify: false
base_url: https://qyapi.weixin.qq.com
variables:
department_id: 1
export:
- token
teststeps:
- name: 获取token
request:
method: GET
params:
corpid: wwb4f39b*****a8a3a
corpsecret: Oyc2BalKGSP1KCmdld0P2pSBDaXSeNrHYEwKX8V4sB8
url: /cgi-bin/gettoken
extract:
token: body.access_token
teardown_hooks:
- ${teardown_hook($response)}
validate:
- eq:
- status_code
- 200
- name: 获取企业微信的部门成员
request:
method: GET
url: /cgi-bin/user/simplelist
params:
access_token: ${token}
department_id: ${department_id}
fetch_child: FETCH_CHILD
setup_hooks:
- ${setup_hook()}
validate:
- eq:
- status_code
- 200
使用命令执行:hrun -s testcases\wechat\get_depart_member.yml
后续有内容再补充。。。