Python 测试数据放 yaml 文件,不同接口存在关联参数怎么做更好

smelody · 2021年01月11日 · 最后由 高手 回复于 2021年01月12日 · 292 次阅读

pytest 框架,测试数据放 yaml 文件,这个接口的请求会用到上个接口的返回,怎么做更好?

我现在的做法是先把读取 yaml 文件,然后对应的字段赋值,然后再用赋值后的内容请求,类似这样:
url = env + params[16][1]['url'] # 取出 url
data = params[16][1]['params'] # 取出请求数据
params[16][1]['storageId'] = globals()['storageID'] # 赋值
header = {'Content-Type': 'application/json',
'Authorization': token}
result = self.Storage.send_post(url, json.dumps(data), header)

但是这样做,又背离了用例和数据分开的原则,有没有更好的办法?

globals()['storageID'] 这个是来自另外一个接口的返回,是把返回存放到一个公共变量:
def test_QueryStorage(self):
…………………………
globals()['storageID'] = result[1]['data']['storageId']

yaml 文件的内容示例如下:

共收到 8 条回复 时间 点赞

测试数据放 yaml,为什么不直接用 HttpRunner

dongfanger 回复

现在改框架成本太高了……

没看懂正文里提的方案。。。globals()['storageID'] 没看懂怎么冒出来的。

要做关联参数而且数据放 yaml ,核心点是要让 yaml 具备取值和赋值的能力。因为你没提到你原来 yml 是怎么样的,所以不好给具体建议,建议可以参考下 httprunner 的写法。

建议使用公共变量的方法,参考 postman。

陈恒捷 回复

我在主题里说明了,我参考下 httprunner,谢谢

可以参考我的方式,我们之前是按用例划分 testcase,这个 testcase 如果需要某个接口的返回值,就将该接口请求放置到前置条件,提取返回供用例执行,不违背用例原则。

可以通过中间变量存储返回值,使用这个返回值的时候再去读取这个中间变量,等用例全部执行完再删除这些中间变量或者中间文件

用模型处理动态参数:
1、全局参数或者变量使用 $G_{变量}代替,threadLocal 存储基本也够了,随用随取
2、接口依赖,可以考虑使用 $C_{case 英文简称}来处理

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册