零基础小白 接口自动化测试集锦: https://www.jianshu.com/nb/49125734
引言
上篇文章https://www.jianshu.com/p/7a18f530b5b0 分享了执行前置条件测试用例方法,本篇继续探讨当前用例token实时动态替换为参数传入。
思路分析
-
替换传参变量--验证请求中是否含有下图标识符,返回下图标识符内容
- 根据内容token,查询前置条件测试用例返回结果token = 值
- 根据变量结果内容,替换
通过思路分析发现引用了正则表达式,通过举例学习正则表达式
正则表达式--样例
#1.验证请求中是否${}$,返回${}$内容
import re
str1 = '{"deviceType": "2","requestToken":"${requestToken}$"}'
if '${' in str1:
print(str1)
pattern = re.compile('\${(.*)}\$')
re_res = pattern.findall(str1)
print(re_res)
print(re_res[0])
#2.根据内容token,查询前置条件测试用例返回结果token = 值
requestToken = 'I5NTkxNWIzYi1iZWZkLTM1ZWQtYWZiNi0yM2Q3MDkyZDBiODIiLCJhcHBJZCI6ODAwMDUsImNoYW5uZWwiOjIwM'
#3.根据变量结果内容,替换
res = re.sub(pattern,requestToken,str1)
print(res)
通过实例总结思路
- 1、公共方法--查询和替换
- 2、公共方法--验证请求中是否,返回内容
- 3、关联方法
代码设计
Base.py公共脚本-新增正则查询
def res_find(data,pattern_data = p_data):
"""
前置条件--正则查询
:param data:
:param pattern_data:
:return:
"""
# pattern = re.compile('\${(.*)}\$')
pattern = re.compile(pattern_data)
re_res = pattern.findall(data)
return re_res
if __name__ == "__main__":
print(res_find('{"deviceType": "2","requestToken":"${requestToken}$"}')[0])
Base.py公共脚本-新增正则替换
def res_sub(data,replace,pattern_data = p_data):
"""
前置条件--正则替换
:param data: 参数化值在所需查询范围内的值
:param replace: 前置条件接收的值用来替换
:param pattern_data: 默认p_data固定值
:return:
"""
pattern = re.compile(pattern_data)
re_res = pattern.findall(data)
if re_res: #判断是否查询到前置条件值
return re.sub(pattern_data,replace,data)
return re_res
if __name__ == "__main__":
print(res_find('{"deviceType": "2","requestToken":"${requestToken}$"}')[0])
print(res_sub('"deviceType": "2","requestToken":"${requestToken}$"}',"I5NTkxNWIzYTM1ZiNi0yM2"))
Base.py公共脚本-新增结果关联
#验证请求中是否有依赖结果的
def params_find(headers,cookies,params):
"""
验证请求中是否有${}$需要结果关联
:param headers: 游戏Api使用accessToken"
:param cookies:
:param params: SDK Api使用到参数化
:return:
"""
if '${' in headers:
headers = res_find(headers)
if '${' in cookies:
headers = res_find(cookies)
if '${' in params:
headers = res_find(params)
return headers,cookies,params
test_excel_case.py新增关联方法
def get_correlation(self,headers,cookies,params,pre_res):
"""
关联
:param headers:
:param cookies:
:param pre_res:
:return:
"""
# 验证是否有关联
headers_para, cookies_para, params_para = Base.params_find(headers, cookies, params)
# # print(headers_para)
# 有关联,执行前置用例,获取结果
if len(headers_para):
headers_data = pre_res["data"][headers_para[0]]
# 结果替换
headers = Base.res_sub(headers, headers_data)
# 有关联,执行前置用例,获取结果
if len(params_para):
params_data = pre_res["data"][params_para[0]]
# 结果替换
params = Base.res_sub(params, params_data)
# 有关联,执行前置用例,获取结果
if len(cookies_para):
cookies_data = pre_res["data"][cookies_para[0]]
# 结果替换
cookies = Base.res_sub(cookies, cookies_data)
return headers, cookies, params