大家好,上期内容介绍完解析json类型数据参数,数据解析部分就结束了。本期就创建用例文件主方法,以及整体的逆向用例生成思路做一个分享。废话不多,昊料开始~
开篇
在参数解析好以后,我们就可以请下一位大佬上场,来帮我们生成用例文件。
这位大佬的职责如下:
- 调用参数解析方法,获取接口字段的所有属性
- 判断当前接口是否存在,如果是新接口,进行字段参数解析,生成用例,如果是老接口,提示用户该接口已存在
- 对于新接口,首先定义一个用例模板,并定义好用例名称、请求url、请求方式等,值就从解析数据中提取
- 然后将拿到的接口名称、类型、是否必填等字段属性进行解析,并分配给自己的组员,让组员来帮助生成用例
- 最后生成将组员的工作汇总,生成用例文件,以及test.py文件内的用例代码
代码分享
上面简单介绍了一下这个大佬的职责。下面有请这位臃肿富态的大佬登场
代码语言:javascript复制# 创建用例文件
def create_case_file(filename):
# 获取接口字段参数
apis = get_ms_data(filename)
# 获取当前已经存在的接口
case_list = check_case_list("testcase/sp_meeting")
# 创建test.py用例代码
create_case_clasee()
# 遍历参数,并按照模板将参数写入
for key, value in apis.items():
# 初始化模板
caseinfo = CASETEMPLATE
if value["api_name"] ".yaml" not in case_list:
create_case(value["api_name"])
caseinfo["api_name"] = value.pop("api_name")
caseinfo["request"]["method"] = value.pop("method")
caseinfo["request"]["url"] = key
caseinfo["request"]["base_url"] = GetConfig().read_base_url("base_url_224")
request_type = value.pop("content_type")
if caseinfo["request"]["method"].lower() in ["get", "put", "delete"]:
par_datas = join_dict(value)
# 调用生成par参数方法
parameterize = create_case_value(par_datas)
caseinfo["request"]["params"] = {}
for i in range(1, len(parameterize[0])):
if "_" in parameterize[0][i]:
spli_list = parameterize[0][i].split("_")
data_key = spli_list[0]
data_value = spli_list[1]
caseinfo["request"]["params"].update({data_key: {
data_value: "$ddt{" str(parameterize[0][i]) "}"
}})
else:
caseinfo["request"]["params"].update({
parameterize[0][i]: "$ddt{" str(parameterize[0][i]) "}"
})
caseinfo["content_type"] = request_type
caseinfo["parameterize"] = parameterize
elif caseinfo["request"]["method"].lower() == "post":
params_type = "json"
if 'params' in caseinfo["request"]:
del caseinfo["request"]["params"]
if request_type == "application/text":
params_type = "params"
if NODE:
caseinfo["request"][params_type] = {"root": {}}
else:
caseinfo["request"][params_type] = {}
datas = join_dict(value)
# 调用生成json参数方法
parameterize = create_case_value(datas)
for i in range(1, len(parameterize[0])):
if NODE:
if "_" in parameterize[0][i]:
spli_list = parameterize[0][i].split("_")
data_key = spli_list[0]
data_value = spli_list[1]
caseinfo["request"][params_type]["root"].update({data_key: {
data_value: "$ddt{" str(parameterize[0][i]) "}"
}})
else:
caseinfo["request"][params_type]["root"].update({
parameterize[0][i]: "$ddt{" str(parameterize[0][i]) "}"
})
else:
if "_" in parameterize[0][i]:
spli_list = parameterize[0][i].split("_")
data_key = spli_list[0]
data_value = spli_list[1]
caseinfo["request"][params_type].update({data_key: {
data_value: "$ddt{" str(parameterize[0][i]) "}"
}})
else:
caseinfo["request"][params_type].update({
parameterize[0][i]: "$ddt{" str(parameterize[0][i]) "}"
})
caseinfo["content_type"] = "application/json"
caseinfo["parameterize"] = parameterize
# 最后将参数写入yaml文件中
write_yaml("testcase/sp_meeting/" caseinfo["api_name"] ".yaml", [caseinfo])
return 200
else:
print_log("接口已存在")
return 500
结语
创建用例的这个方法主要是想实现检查接口,调用用例生成、以及生成用例文件。从需求来看,可以分配成三个函数。三个函数在互相引用,后续代码维护、更新时也会方便很多。
本期内容就先到这里。各位大佬我们下期见。