pytest parametrize scope参数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在 pytest 中,`parametrize` 函数用于提供测试用例的参数。

这个函数接受一个参数列表和一个测试函数,并根据参数列表生成多个测试用例。

在 pytest 中,`parametrize` 函数的一个可选参数是 `scope`,它定义了参数在测试函数中的可见性范围。

`scope` 参数可以接受以下值:
1. `function`: 默认值,参数是每个测试函数的局部变量。

在每个测试函数中都需要声明参数。

2. `module`: 参数是模块级别的全局变量。

在模块中的所有测试函数都可以访问这些参数。

3. `class`: 参数是类级别的成员变量。

在类中的所有测试方法都可以访问这些参数。

4. `moduleclass`: 参数是模块级别和类级别的全局变量。

在模块和类中的所有测试函数都可以访问这些参数。

5. `unique`: 每个测试函数都有独立的参数实例。

与 `function` 类似,但是在每个测试函数中都会创建一个新的参数实例,以避免不同测试之间的参数共享。

下面是一个示例,展示了如何使用 `parametrize` 函数的 `scope` 参数:
```python
import pytest
# 使用 scope="module" 定义模块级别的参数
# 在所有测试函数中都可以访问这些参数
@pytest.mark.parametrize("x,y", [(1,2), (3,4)], scope="module")
def test_add(x, y):
assert x + y == 2*x+y-1
# 使用 scope="class" 定义类级别的参数
# 在所有测试方法中都可以访问这些参数
class TestAdd:
@pytest.mark.parametrize("x,y", [(1,2), (3,4)], scope="class")
def test_add(self, x, y):
assert x + y == 2*x+y-1
```
请注意,`scope` 参数仅适用于通过 `pytest.mark.parametrize` 装饰器使用 `parametrize` 函数的情况。

如果直接在测试函数中使
用 `parametrize` 函数,则无法使用 `scope` 参数。

相关文档
最新文档