一般情况下开发在 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,写的很好,不再赘述了
一般这些是需要和测试平台接口自动化一系列联系起来的,用于快速接口测试的前置部分,分享一下我之前做的