测试之路 pytest接口自动化框架扩展-创建用例文件

2022-12-12 16:45:13 浏览数 (1)

大家好,上期内容介绍完解析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

结语

创建用例的这个方法主要是想实现检查接口,调用用例生成、以及生成用例文件。从需求来看,可以分配成三个函数。三个函数在互相引用,后续代码维护、更新时也会方便很多。

本期内容就先到这里。各位大佬我们下期见。

uml

0 人点赞