这一篇主要讲如何匹配h的获取的依赖数据
安装库 jsonpath_rw
然后给封装的codition_data文件里新添加一个函数 用来根据匹配规则 获取 依赖字段
这里需要注意的是 规则以这种格式写:“banner[1].c”;具体例子看以下代码
# -*-coding:utf-8-*-
from Base.handle_excel import *
from jsonpath_rw import *
'''拆分前置条件'''
def split_data(data):
case_id = data.split(">")[0]
rule_data = data.split(">")[1]
return case_id,rule_data
'''根据前置条件获取依赖数据'''
def depend_data(data):
case_id =split_data(data)[0]
'''获取行号'''
row_number = excel_data.get_rows_number(case_id)
'''此处获取某单元格的函数之前hand_excle中已经封装好这里直接用'''
data = excel_data.get_cell_value(row_number,13)
return data
'''根据匹配规则和响应数据来获取依赖字段'''
def get_depend_data(res_data,key):
'''加载规则key'''
json_exe = parse(key)
'''根据规则再数据res_data寻找'''
madle = json_exe.find(res_data)
'''返回依赖字段返回的是列表,所以加【0】返回成字符串'''
return [math.value for math in madle][0]
if __name__ == '__main__':
data = {
"a":"b",
"banner":[
{
"c":"d"
},
{
"c":"f"
}
]
}
key ="banner[1].c"
print(get_depend_data(data,key))
输出的结果是f
condition_data里再封装一个根据前置条件获取依赖字段的函数
# -*-coding:utf-8-*-
from Base.handle_excel import *
from jsonpath_rw import *
'''拆分前置条件'''
def split_data(data):
case_id = data.split(">")[0]
rule_data = data.split(">")[1]
return case_id,rule_data
'''根据前置条件获取依赖数据'''
def depend_data(data):
case_id =split_data(data)[0]
'''获取行号'''
row_number = excel_data.get_rows_number(case_id)
'''此处获取某单元格的函数之前hand_excle中已经封装好这里直接用'''
data = excel_data.get_cell_value(row_number,13)
return data
'''根据匹配规则和响应数据来获取依赖字段'''
def get_depend_data(res_data,key):
'''加载规则key'''
json_exe = parse(key)
'''根据规则再数据res_data寻找'''
madle = json_exe.find(res_data)
'''返回依赖字段返回的是列表,所以加【0】返回成字符串'''
return [math.value for math in madle][0]
'''根据前置条件获取,获取依赖字段'''
def get_data(data):
res_data = depend_data(data)
rule_data = split_data(data)[1]
return get_depend_data(res_data,rule_data)
if __name__ == '__main__':
然后我们再完善run_main函数
当前置条件有值的时候我们获取依赖字段
# -*-coding:utf-8-*-
from Base.handle_excel import *
from Base.base_request import *
from Base.handle_result import *
from Base.handle_cookie import *
from Base.handle_header import *
from Base.codition_data import *
'''创建RunMain类实现运行用例的功能'''
class RunMain:
def run_case(self):
''' 获取行数'''
rows = excel_data.get_rows()
'''除去表头需要遍历rows-1次'''
for i in range(rows-1):
'''给一个默认值'''
cookies = None
get_cookie = None
headers = None
'''i是从0开始,所以i+2,就和用例可以对应上,获取第i+2用例数据'''
data = excel_data.get_rows_value(i+2)
is_run = data[2]
'''判断如果第二列数据为yes则执行'''
if is_run == "yes":
'''获取前置条件'''
is_depend = data[3]
'''如果前置条件存在,获取依赖字段'''
if is_depend:
is_depend_data = get_data(is_depend)
'''获取请求方法'''
method = data[5]
'''获取请求url'''
url = data[4]
cookie_method = data[8]
header_method = data[7]
if cookie_method == "yes":
cookies = handlecookie.get_cookie_value("app")
if cookie_method == "write":
get_cookie = {"is_cookie":"web"}
'''操作header的情况'''
if header_method == "yes":
headers = getHeader.get_header()
'''用封装的request发送请求'''
res = request.run_main(method=method,url=url,get_cookie = get_cookie,cookies = cookies,headers = headers)
'''调试打印'''
print(res)
'''获取实际result对应的code'''
code = res["result"]
'''获取实际的msg的值'''
msg = res["msg"]
'''获取断言方法'''
assertion_method = data[9]
'''获取预期结果'''
excepect_result = data[10]
'''如果断言方法是mer'''
if assertion_method == "mer":
'''传入实际code获取config对应的msg值'''
config_msg = data_result.get_result(url,code)
'''进行断言'''
if msg == config_msg:
excel_data.excel_write_data(i + 2,12,"case通过")
else:
excel_data.excel_write_data(i + 2, 12, "case失败")
'''如果断言方法是result'''
if assertion_method == "result":
'''这块需要注意返回结果获取的result是整型,而我们Excel中获取
的是字符串,所以这边需要把格式统一再做比对'''
if str(res["result"]) == excepect_result:
excel_data.excel_write_data(i + 2, 12, "case通过")
else:
excel_data.excel_write_data(i + 2, 12, "case失败")
if __name__ == '__main__':
run = RunMain()
run.run_case()