如何在每个测试用例后运行指定标记的测试?是否可以通过自定义插件或在conftest.py文件中的回调函数配合yield from实现这一目标?
时间: 2024-11-06 18:36:54 浏览: 15
python pytest进阶之conftest.py详解
在pytest中,确实可以通过自定义插件或者在`conftest.py`文件中的回调函数配合`yield from`来在每个测试用例后运行指定标记的测试。这通常涉及到使用pytest的`pytest_runtest_protocol`或`pytest_runtest_makereport`这两个钩子函数。
在`conftest.py`中,你可以创建一个函数,比如`run_post_marked_tests(item)`,接收测试实例`item`作为参数。然后,在这个函数内部,你可以检查每个测试用例报告的标记,如果包含你想要执行的标记,就执行后续的测试。
示例代码如下:
```python
def run_post_marked_tests(item):
report = yield from item.runtestprotocol()
if hasattr(report, 'wasxfail'):
# 这里处理xfail的情况
if any(mark.name == 'post_test' for mark in item.iter_markers()):
# 找到有'post_test'标记的测试
post_test_items = [i for i in item.session.items if 'post_test' in (mark.name for mark in i.iter_markers())]
for pt_item in post_test_items:
yield from pt_item.runtestprotocol()
pytest_runtest_protocol = run_post_marked_tests
```
在这个例子中,`yield from`允许你在原生的测试流程中插入新的操作。每当一个测试用例执行完毕后,就会触发`run_post_marked_tests`函数,检查是否有`post_test`标记,并执行那些同样有该标记的测试。
阅读全文