[英]Select pytest tests dynamically at the beginning of test run
我正在使用pytest为我的Python应用程序编写单元测试。 我在单元测试编写方面的大部分经验都来自Javacript框架(例如Jasmine),您可以在其中将单个标记测试标记为在下一个测试回合中使用单词“ fit”运行,或者将标记测试排除为单词“ xit”。 当我只想运行非常具体的测试子集以减少运行时间并导致结果输出混乱时,“ fit”在开发过程中很好。 Xit已经用mark.skip装饰器实现,但我想适合。
我如何配置pytest以执行以下操作:
我知道我可以使用-m标志选择要在命令行中运行的测试,但是我想动态地检测可运行测试的子集,因此在开发过程中,我不必使用两个不同的命令来运行测试。具有-m标志,其他不具有该标志。
我想conftest.py可能是添加此逻辑的地方,但是我找不到关于它的配置的太多信息。
Pytest插件pytest_collection_modifyitems
似乎是您需要的。 (将以下代码放入conftest.py
)
def pytest_collection_modifyitems(session, config, items):
""" called after collection has been performed, may filter or re-order
the items in-place."""
found_only_marker = False
for item in items.copy():
if item.get_marker('only'):
if not found_only_marker:
items.clear()
found_only_marker = True
items.append(item)
列表items
是收集的测试。
注意: list.copy
仅在python3中有效,如果您使用的是python2,请参考: 如何克隆或复制列表?
这个想法很简单:
收集所有测试(项目)后,只需检查标记“ only”是否存在于任何测试中。 如果是这样,请清除列表items
并仅添加标记为only
测试,否则请保持原样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.