转载请注明出处:https://blog.csdn.net/qq_33528044/article/details/108489280
1、返回数据参数化
1.1 常处理接口请求
返回值参数化是接口请求中避免大量维护测试用例关键,如何做好参数化是能否提高自动化用例转换效率的关键。通常接口自动化会将接口返回值所有内容保存到临时变量,在需要使用时按照层级接口取出,依据自定义规则替换到请求数据。
痛点:
- 保存完整数据结构内存消耗大
- 替换时需要写出长长的层级结构
- 接口使用到相同数据时,每次替换都需要写层级结构替换
- 替换数据时需要多次查看接口文档,观察层级结构
常用替换规则举例
import re
# 实例:接口B请求时依赖接口A返回的数据, A接口返回数据dict1,接口A请求参数request_body:`
dict1 = {
"code":0,
"message": "操作成功",
"data": [
{
"id": 1, "name": "大众", "car_info": {
"product_id":123}},
{
"id": 2, "name": "本田", "car_info": {
"product_id":123}},
{
"id": 3, "name": "奥迪", "car_info": {
"product_id":123}}
]}
request_body = "{'product_id':${dict1.data.0.car_info.product_id}}"
# 常用方法将dict1赋值给一个全局零食变量temprory_data
temprory_data = {
}
temprory_data['dict1'] = dict1
# 定义一个函数执行替换规则 replace_request_data
def replace_request_data(request_body):
res = re.findall('\${(.*?)}', request_body)
index_list = res[0].split('.')
value = temprory_data
for index in index_list:
value = value[eval(index)] if re.findall('^\d+$', index) else value[index]
return request_body.replace('${'+res[0]+'}', str(value))
res = replace_request_data(request_body)
print(res)
>>> {
'product_id':123}
以上替换数据使用${dict1.data.0.car_info.product_id}, 使用时执行层级匹配,当返回数据层结构更为复杂,请求参数需要多出使用到数据替换时将大大增加测试用例请求参数的编写难度。
1.2 使用key方法保存返回值
import re
save_response_key = {
}
dict1 = {
"code":0,
"message": "操作成功",
"data": [
{
"id": 1, "name": "大众", "car_info": {
"product_id": 123}},
{
"id": 2, "name": "本田", "car_info": {
"product_id": 123}},
{
"id": 3, "name": "奥迪", "car_info": {
"product_id": 123}}
]}
def save_key(request_body, save_key_list):
request_str =