pytest:是不是可以从代码中启用标记?
Posted
技术标签:
【中文标题】pytest:是不是可以从代码中启用标记?【英文标题】:pytest: is it possible to enable a marker from code?pytest:是否可以从代码中启用标记? 【发布时间】:2021-05-27 01:08:07 【问题描述】:在调用 pytest 时可以使用-m
参数只运行由某个标记标记的测试。
例如pytest -m testsubset_a
.
我想知道...是否也可以从代码内部启用这些标记之一?例如在pytest_collection_modifyitems()
期间的某个地方?
我问的原因是因为我正在开发一个测试工具,它将使用 pytest 标记来启用特定的测试子集,但过去没有这样做。由于我们希望向后兼容,因此我想在未给出 -m
参数时启用默认子集(标记)。
【问题讨论】:
@MrBeanBremen 这不是我要问的。我知道您可以将_marker 添加到测试中,我们已经在代码中这样做了。我要问的是你是否可以从代码内部“启用”一个标记(就像它是从 shell 传递给 pytest 一样)。 你需要一个例子来说明这一点吗?是的,我相当肯定这个钩子是可能的 @gold_cy:如果可能的话,当然可以。那会很有帮助!但要明确一点:我不是在谈论item.add_marker()
。我知道该怎么做。
@Opifex 正确,即使该人排除了 -m
标志,您也只想运行某些标记,这是期望的行为吗?
@gold_cy 是的,例如我有marker_a
和marker_b
;然后用户可以将这两个作为参数传递给-m
。但是,如果用户不使用-m
,它应该默认为marker_a
。
【参考方案1】:
您可以使用config.option.markerexpr
轻松地从代码内部访问传递给-m
的标记。
所以...在未传递任何选项时默认设置就像
一样简单def pytest_collection_modifyitems(config):
if config.option.markerexpr == "":
config.option.markerexpr == "mydefaultmarker"
【讨论】:
如果这对你有用,那么这就是你应该做的,显然我给出的例子没有考虑到不同类型的场景。我删除了我的其他答案,因为它不适用,但很高兴您找到了适合您的解决方案。 @gold_cy 实际上,我会赞成您的答案(也许在代码示例中进行了小幅更正之后),因为它也是相关的有用信息。但上面的代码更直接,更不“hacky”。 我不想让那些来到这个页面并试图找到解决方案的人感到困惑。我会赞成你的答案,因为它解决了手头的问题,让未来的读者更容易看到。以上是关于pytest:是不是可以从代码中启用标记?的主要内容,如果未能解决你的问题,请参考以下文章