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

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

结语

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值