常用的内置fixture的用法,包括怎么通过内置fixture获取测试的状态,比如当前运行的用例名字,在用例之间传递状态
时间: 2024-02-13 08:07:52 浏览: 100
pytest 内置了许多 fixture,可以帮助我们在测试用例中获取测试状态、共享测试状态等。下面是常用的内置 fixture 的用法:
1. request
request fixture 可以用来获取测试用例的信息,如测试用例的名称、参数等。示例代码如下:
```python
def test_case(request):
print("当前运行的测试用例名称:", request.node.name)
```
2. tmpdir
tmpdir fixture 可以用来在测试用例中创建临时文件或目录,可以方便地进行文件操作。示例代码如下:
```python
def test_case(tmpdir):
file_path = tmpdir.join('test.txt')
with open(file_path, 'w') as f:
f.write('hello world')
assert file_path.read() == 'hello world'
```
3. capsys
capsys fixture 可以用来获取测试用例中的输出信息,可以方便地进行输出断言。示例代码如下:
```python
def test_case(capsys):
print("hello world")
captured = capsys.readouterr()
assert captured.out == "hello world\n"
```
4. monkeypatch
monkeypatch fixture 可以用来在测试用例中修改代码的行为,可以方便地进行代码覆盖。示例代码如下:
```python
def test_case(monkeypatch):
def mock_func():
return "mocked result"
monkeypatch.setattr('module.func', mock_func)
assert module.func() == "mocked result"
```
5. pytestconfig
pytestconfig fixture 可以用来获取 pytest 的配置信息,可以方便地进行配置管理。示例代码如下:
```python
def test_case(pytestconfig):
print("pytest 配置信息:", pytestconfig.option)
```
除了以上常用的内置 fixture,pytest 还提供了很多其他的 fixture,可以满足不同的测试需求。另外,通过 fixture 可以在测试用例之间共享状态,例如在 conftest.py 文件中定义一个共享的 fixture,可以让所有测试用例都可以使用这个 fixture。示例代码如下:
```python
# conftest.py 文件中定义共享的 fixture
@pytest.fixture(scope="session")
def shared_data():
return {"data": []}
# 测试用例中使用共享的 fixture
def test_case(shared_data):
shared_data["data"].append("test data")
assert len(shared_data["data"]) == 1
def test_case2(shared_data):
assert len(shared_data["data"]) == 1
```
在上面的示例中,我们在 conftest.py 文件中定义了一个共享的 fixture shared_data,它是一个字典,用来存储测试用例的共享数据。在测试用例中,我们可以通过参数 shared_data 来使用这个 fixture,然后在测试用例中操作 shared_data,例如向其中添加一个元素。在另一个测试用例中,我们可以再次使用 shared_data,验证它是否包含了我们添加的元素。这样可以方便地在测试用例之间传递状态,避免了重复编写代码的问题。