pytest parametrize scope参数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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` 参数。