测试之路 pytest接口自动化框架扩展-创建用例文件
2023-06-13 09:15:51 时间
大家好,上期内容介绍完解析json类型数据参数,数据解析部分就结束了。本期就创建用例文件主方法,以及整体的逆向用例生成思路做一个分享。废话不多,昊料开始~
开篇
在参数解析好以后,我们就可以请下一位大佬上场,来帮我们生成用例文件。
这位大佬的职责如下:
- 调用参数解析方法,获取接口字段的所有属性
- 判断当前接口是否存在,如果是新接口,进行字段参数解析,生成用例,如果是老接口,提示用户该接口已存在
- 对于新接口,首先定义一个用例模板,并定义好用例名称、请求url、请求方式等,值就从解析数据中提取
- 然后将拿到的接口名称、类型、是否必填等字段属性进行解析,并分配给自己的组员,让组员来帮助生成用例
- 最后生成将组员的工作汇总,生成用例文件,以及test.py文件内的用例代码
代码分享
上面简单介绍了一下这个大佬的职责。下面有请这位臃肿富态的大佬登场
# 创建用例文件
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
结语
创建用例的这个方法主要是想实现检查接口,调用用例生成、以及生成用例文件。从需求来看,可以分配成三个函数。三个函数在互相引用,后续代码维护、更新时也会方便很多。
本期内容就先到这里。各位大佬我们下期见。
相关文章
- C++输入输出文件流[通俗易懂]
- linux 更改文件读写权限_如何查看自己文件的权限
- 编译适用于 PHP 8.2 的 redis.dll 扩展文件
- PyQt5编程扩展 3.2 资源文件的使用
- 【Google Play】APK 扩展包 ( 2021年09月02日最新处理方案 | 制作 APK 扩展包 | 上传 APK 扩展包到 Google Play | APK 扩展文件上传时机 )
- 【Kotlin】扩展函数总结 ★ ( 超类扩展函数 | 私有扩展函数 | 泛型扩展函数 | 扩展属性 | 定义扩展文件 | infix 关键字用法 | 重命名扩展函数 | 标准库扩展函数 )
- 如何在Linux使用 chattr 命令更改文件或目录的扩展属性?
- 解决Linux用户模板文件被删除后显示不正常问题详解程序员
- oracle创建表空间 扩展表空间文件 修改表空间自动增长详解数据库
- C++文件打开模式详解
- Fedora 15解决播放RMVB/MP3文件问题
- Oracle数据库的扩张——自动增长文件(oracle扩展数据文件)
- Linux快速去除文字文件多余空行(linux 去除空行)
- 数据极速导入CSV文件快速进入MySQL6(csv导入mysql6)
- 后缀就扩展名为js的文件是什么文件原创
- Asp.net获取指定目录下的后缀名为".doc"的所有文件名和文件路径