一般情况下开发在 yapi 上面写完接口文档,测试需要根据接口文档内容来准备测试,我们可以手动去写,也可以根据代码快速拉取生成,本文主要讲解拿到这些数据后怎么自动生成基础用例,如何拉取在另一篇说
这篇主要讲的是如何依据规则生成基础用例 (包含两部分:根据参数类型生成用例 + 根据是否必选项生成用例)

1.根据参数是否必选生成用例
一般我们会找到根据参数类型生成的写的比较多,但是是否根据是否必选生成这个没有,此处分享一下我写的

data = {
    "product_id": "amy",
    "skus": [
        {
            "sku_id": 123456,
            "sku_value": {
                "test1": "abc",
                "test2": "efg"
            }
        }
    ],
    "address": {
        "province": "知识",
        "town": "力量"
    }
}

required = {
    "product_id": "1",
    "skus": [
        {
            "sku_id": "1",
            "sku_value": {
                "test1": "0",
                "test2": "1"
            }
        }
    ],
    "address": {
        "province": "1",
        "town": "0"
    }
}

def generate_required_case(_source, _param):
    new_dict = {}
    for k, v in _param.items():
        if v == "0" or v == "1":
            data_cp = copy.deepcopy(_source)
            data_cp.pop(k)
            data_map = {"0": "非必选", "1": "必选"}
            param = k + ":" + data_map[v] + "删除"
            new_dict.update({param: data_cp})
        else:
            if isinstance(v, list):
                if isinstance(v[0], dict):
                    for _k, _v in generate_required_case(_source[k][0], _param[k][0]).items():
                        data_cp = copy.deepcopy(_source)
                        data_cp[k] = [_v]
                        param = k + ":" + _k
                        new_dict.update({param: data_cp})
            if isinstance(v, dict):
                for _k, _v in generate_required_case(_source[k], _param[k]).items():
                    data_cp = copy.deepcopy(_source)
                    data_cp[k] = [_v]
                    param = k + ":" + _k
                    new_dict.update({param: data_cp})

    return new_dict


a = generate_required_case(data, required)

for k, v in a.items():
    print(k)
    print(v)
--product_id:必选删除
{'skus': [{'sku_id': 123456, 'sku_value': {'test1': 'abc', 'test2': 'efg'}}], 'address': {'province': '知识', 'town': '力量'}}
--skus:sku_id:必选删除
{'product_id': 'amy', 'skus': [{'sku_value': {'test1': 'abc', 'test2': 'efg'}}], 'address': {'province': '知识', 'town': '力量'}}
--skus:sku_value:test1:非必选删除
{'product_id': 'amy', 'skus': [{'sku_id': 123456, 'sku_value': [{'test2': 'efg'}]}], 'address': {'province': '知识', 'town': '力量'}}
---skus:sku_value:test2:必选删除
{'product_id': 'amy', 'skus': [{'sku_id': 123456, 'sku_value': [{'test1': 'abc'}]}], 'address': {'province': '知识', 'town': '力量'}}
---address:province:必选删除
{'product_id': 'amy', 'skus': [{'sku_id': 123456, 'sku_value': {'test1': 'abc', 'test2': 'efg'}}], 'address': [{'town': '力量'}]}
---address:town:非必选删除
{'product_id': 'amy', 'skus': [{'sku_id': 123456, 'sku_value': {'test1': 'abc', 'test2': 'efg'}}], 'address': [{'province': '知识'}]}

data 是我们的接口中的 body 部分,required 是根据 yapi 中的参数项目映射生成的规则,比如 1 代表必填项,0 代表不必填项目,这样的话我们就可以得到必填项参数被删除,非必填项被删除的测试用例
2.根据参数类型生成基础用例
这个我是参考的https://www.cnblogs.com/twofool/p/10396710.html,写的很好,不再赘述了
一般这些是需要和测试平台接口自动化一系列联系起来的,用于快速接口测试的前置部分,分享一下我之前做的


↙↙↙阅读原文可查看相关链接,并与作者交流