首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pytest-yaml-sanmu(八):定义和使用变量

如果用例内容(如:测试账号、对象 id 等)经常需要更新、变化,那么对用例文件的修改就是一个稍显麻烦的问题。特别是内容比较繁多的用例文件,寻找内容很麻烦,修改起来更麻烦。

在实践中,一个好的思路是将【会变化的内容】放到变量中,那么在需要更新时只集中修改变量即可,避免了从众多文件中进行搜寻,从众多内容中进行搜寻,然后小心翼翼的修改。

pytest-yaml-sanmu 支持 3 种变量的设置方式:

局部变量

共享变量

全局变量

1. 设置局部变量

局部变量在 yaml 用例的vars字段下进行创建

重新执行用例结果如下

图 2. 可以在 setps 中使用变量

2. 设置共享变量

共享变量也写在 yaml 用例的vars字段下,但不是直接写,而是通过include方式加载数据文件。

因为数据文件可以被多个用例include,所以其变量值也被多个用例共享,但其本质还是局部变量。

pytest -vs tests/test_vars_shared.yaml

图 3. 从 json 文件中加载共享变量

3. 设置全局变量

全局变量和共享变量不一样的是:全局变量会自动被所有用例读取

所有不需要用例文件中进行设置

而是在配置文件中进行设置全局变量文件

全局变量文件内容如下

图 4. 用例使用全局变量

4. 变量优先级和作用域

1. 优先级

目前,在 yaml 中通过使${var_name}的方式使用变量,这一用法和 JMeter 相似。

在前文中,fixture 返回值的使用方式也是${var_name},

那么,当变量名、fixture 名相同时当多种变量具有变量名,优先使用哪一个?

在 pytest-yaml-sanmu 中,对于同名变量,会按照以下顺序返回值:

fixture

局部变量

全局变量

如果某个变量不存在,则返回空字符串(这一点和 JMeter 是不同的)

也就是说,fixture 的优先级最高,全局变量的优先级最低

2. 作用域

作用域决定了变量可以被哪些用例使用,具体区别如下:

局部变量:当前 yaml 用例

共享变量:加载了该变量文件的 yaml 用例

全局变量:所有 yaml 用例

这使得我们可以放心的地在不同 yaml 用中使用相同的局部变量名,而不担心产生额外影响和冲突。

相反,如果需要创建(或修改)一个可以被其他 yaml 用例使用的数据,则应该使用全局变量

5. 配置项

默认情况下,${var_name}仅支持在 steps 中使用

添加以下配置,${var_name}支持在 mark 中使用变量

添加以下配置,自动从指定的文件中加载数据,作为全局变量

yaml_global_variable_paths = abc.yaml data.yaml

注意:

支持指定多个全局变量文件

支持使用相对路径或绝对路径

如果文件不存在,则引发错误

图 5. 变量文件不存在时显示绝对路径

添加以下配置,当全局变量文件不存在时,忽略错误

yaml_global_variable_paths_ignore_if_non_existent = True

能看到这里说明是真爱,关注一下吧

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OhHYfz3V3zAjuQeo7RO0Er6g0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券