pytest前置后置
时间: 2023-09-21 11:09:55 浏览: 110
pytest中有两种方式可以实现用例的前后置处理:一种是通过xunit风格的前后置方法,另一种是通过测试夹具(fixtrue)来实现。对于函数用例的前后置方法,可以使用xunit风格的setup和teardown方法来实现。例如,可以在测试模块中定义setup_module和teardown_module方法,在每个测试用例之前和之后执行相应的前后置操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [超详细的pytest教程(二)之前后置方法和fixture机制](https://blog.csdn.net/a448335587/article/details/128268279)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
相关问题
pytest 前置后置
pytest提供了两个装饰器fixture和yield_fixture来实现前置和后置操作。其中fixture是yield_fixture的升级版,建议使用fixture。
以下是pytest前置后置的例子:
```python
import pytest
@pytest.fixture(scope="module")
def open():
print("打开浏览器,并且打开百度首页")
yield
print("执行teardown!")
print("最后关闭浏览器")
def test_soso(open):
print("case1:搜索不到的情况")
def test_search(open):
print("case2:搜索到的情况")
```
在上面的例子中,@pytest.fixture(scope="module")表示open是一个前置操作,作用域是整个模块。yield表示前置操作的结束,后面的语句表示后置操作。
pytest前置后置 模块关系
### Pytest 中前置后置处理与模块间的关系
在 pytest 测试框架中,`setup` 和 `teardown` 方法用于定义测试前后的准备和清理工作。这些方法可以作用于不同级别,包括函数级(function),类级(class),模块级(module)以及会话(session)[^1]。
#### 函数级别的设置与清除
对于每一个单独的测试函数,在执行之前都会调用一次对应的 `setup_method()` 或者使用装饰器的方式通过 `@pytest.fixture(scope="function")` 来实现类似的逻辑;而在该测试完成后则会自动触发相应的 `teardown_method()`, 同样也可以利用 fixture 的返回值来完成特定的操作[^2].
```python
import pytest
class TestExample:
@pytest.fixture(autouse=True)
def setup(self):
self.resource = acquire_resource()
def test_something(self, setup):
assert check_something(self.resource)
def teardown(self):
release_resource(self.resource)
```
#### 类级别的设置与清除
当多个测试案例共享相同的资源时,可以在类层次上应用 `setup_class(cls)` 及其配对的方法 `teardown_class(cls)` 。这允许在整个测试类运行前后仅初始化/销毁一次公共资源[^3].
```python
def setup_class(cls):
cls.shared_resource = initialize_shared_resource()
def teardown_class(cls):
cleanup_shared_resource(cls.shared_resource)
```
#### 模块级别的设置与清除
如果整个 Python 文件中的所有测试都需要某些共同的前提条件,则可以通过编写名为 `setup_module(module)` 和 `teardown_module(module)` 的特殊函数来进行全局性的配置管理[^4]. 这些操作会在导入此 .py 文件作为模块时被执行,并且只发生一次.
```python
def setup_module(module):
global GLOBAL_RESOURCE
GLOBAL_RESOURCE = prepare_global_environment()
def teardown_module(module):
destroy_global_environment(GLOBAL_RESOURCE)
```
#### 会话级别的设置与清除
最后一种范围是最广泛的 session 级别,它跨越了所有的测试文件。此类别的钩子函数分别是 `pytest_sessionstart(session)` 和 `pytest_sessionfinish(session)` ,它们适用于跨多文件场景下的环境搭建与回收需求[^5].
综上所述,pytest 提供了一套灵活而强大的机制让用户能够精确控制各个层面的测试上下文环境构建过程,从而使得自动化测试更加高效可靠。
阅读全文