【问题标题】:Deselect a pytest test in the test itself在测试本身中取消选择 pytest 测试
【发布时间】:2020-06-16 08:54:27
【问题描述】:

我已经知道我们可以使用标记,然后用 -m 调用 pytest 来只执行某些测试

我的问题是:有没有办法标记测试,以便在调用 pytest 时不添加任何 -m 就不会执行该测试?

编辑:

我在想这样的事情:

  1. 用特殊标记测试(我不知道是否存在,这就是为什么这个问题)将测试thespecialtest.py标记为 @pytest.mark.notselect

然后像往常一样运行测试:pytest 将排除该测试。

  1. 如果我想专门运行该测试,我可以明确地进行pytest thescpecialtest.py

我知道最好和最简单的方法就是在调用 pytest 时使用 -m 但我想问一下是否有不需要这样做的选项

【问题讨论】:

  • 你可以使用@unittest.skip注解来忽略一个测试,但是我不认为你可以在不再次删除注解的情况下重新启用它。
  • 所以你想在运行pytest时默认忽略测试?您可以将命令行参数放入pytest.ini,这样您就不必每次都输入它们,因此使用addopts = --ignore test_module.py 运行pytest 与显式调用pytest --ignore test_module.py 相同。
  • 您也可以通过编程方式排除测试,但这在 IMO 中有点过头了。

标签: pytest


【解决方案1】:

-m 选项可能是最适合此用例的选项。

但是,您可以使用-k option 选择根据名称运行哪些测试,这与 -m 选项基本相同,但您根据名称而不是标记选择测试用例。

另一个选项是您可以更改 test discovery process,例如,您可以告诉 pytest 仅收集和执行符合特定名称模式的函数,例如你添加到你的pytest.ini:

[pytest]
python_functions = *_check

告诉 pytest 只收集和执行符合这个 glob 模式的函数。您也可以对类和文件执行此操作。

【讨论】:

  • 我想知道是否有办法标记测试,这样我就不必修改运行 pytest 的方式(不使用 -m 或 -k)。我知道这有点牵强,但如果没有办法,我想放弃
  • 至少我不知道除了使用命令行选项或更改测试发现过程之外的任何其他方式。我还简要查看了 pytest 文档,但我没有看到任何更接近您正在寻找的东西。也许其他人会来为你找到更好的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多