pytest-yaml-sanmu(六):YAML数据驱动测试

发布于:2024-07-06 ⋅ 阅读:(36) ⋅ 点赞:(0)

图片

如果说 pytest 中哪些标记使用得最多,那无疑是 parametrize 了,

它为用例实现了参数化测试的能力,进而实现了数据驱动测试的能力。

1. 使用标记

parametrize 的使用需要提高两个内容:

  • 参数名

  • 参数值

pytest 在执行用例时,会分别将参数值,传递给参数名,以此自动生成多个用例。

所以参数化测试的显著结果是:用例执行数量等于参数值的数量。

test_name: 参数化测试mark:  - parametrize:      - n  # 第一个 是参数名      - [1,2,3] # 第二个是参数值steps:  - request:      method: get      url: http://baidu.com

执行结果如下:

图片

图 1.parametrize 标记让用例执行多次

由结果可见,使用了 parametrize 标记的用例一共执行了 3 次,与 parametrize 标记中的参数值的数量是相同的

2. 使用参数

parametrize 中的参数并不仅仅是用来控制数量的,

正如前文所述,pytest 在执行用例时,会分别将参数值传递给参数名。

那么在用例中如何使用参数的?可以使用 ${参数名} 的格式来使用,比如这样

test_name: 参数化测试mark:  - parametrize:      - n      - [1,2,3]steps:  - request:      method: get      url: https://baidu.com?o=${n} # 使用n参数

执行结果如下:

图片

图 2. 在用例中使用 parametrize 标记的参数值

由结果可见,每个用例都得到的 n 是不同的参数值。

3. 加载数据文件

如果参数值较多,yaml 用例文件可能会臃肿,不便于维护。

此时,可将参数值保存在单独数据文件中,并在 yaml 用例中加载该数据文件。

test_name: 从文件中加载数据mark:  - parametrize:      - n      - !include ddt_n.yamlsteps:  - request:      method: get      url: https://baidu.com?o=${n} # 使用n参数

执行结果如下

图片

图 3. 从数据文件中加载参数值

关于 !include 有几点需要注意:

  • 会从当前所在的目录中加载文件文件

  • 也支持相对路径和绝对路径

  • 相对路径是相对于当前 yaml 用例

4. 传递多个参数

在使用参数化时,可以同时传递多个参数,

为了实现这一目标,需要将多个参数放在共一个列表中

test_name: 参数化测试mark:  - parametrize:      - x,y,z # 每次传递3个参数      - [        [1,2,3],        ["a","b","c"],        ["!","?","#"],      ]steps:  - request:      method: get      url: https://baidu.com?o=${x}-${y}-${z}

执行结果如下

图片

图 4. 一个标记传递多个参数

5. 使用多个标记

除了同时传递多个参数之外,也可以使用多个标记

test_name: 参数化测试mark:  - parametrize:      - x      - [1,2,3]  - parametrize:      - y      - ["a","b","c"]  - parametrize:      - z      - ["!","?","#"]steps:  - request:      method: get      url: https://baidu.com?o=${x}-${y}-${z}

执行结果如下

图片

图 5. 多标记会生成更多的用例数量

由结果可知,当使用多个标记时,用例数量不再是参数值的数量,而是所有标记参数的笛卡儿积


网站公告

今日签到

点亮在社区的每一天
去签到