在Python中,如何将一些测试标记为只在满足条件时执行



我正在编写一个小的Python程序。它有一个函数,它必须打开一个Word文件并从中读取一些信息,并通过win32com调用实际的Word应用程序。所以这个函数的执行取决于机器上是否安装了Word。

给定项目的规模和我们的资源,并且看到这是必须使用外部依赖进行测试的唯一功能,创建单独的集成测试环境是不可可行的。我更希望Word读取函数的测试与实际的单元测试一起运行。但是我们并不是在所有的开发机器上都安装了Word,所以这些测试会失败。

我可以通过编程测试Word在机器上是否可用。问题是,我是否可以以某种方式注释测试,以便它们仅在Word存在时运行?

我想简单地把像if not word_discovered: pass这样的东西放在每个测试中,但这样看起来它们都有效。我更喜欢这样的解决方案:测试框架在它的报告中打印出这8个测试被跳过了。

如果您使用pytest(我强烈推荐)运行测试,您可以使用skipif标记:

@pytest.mark.skipif(not word_discovered, reason="MS Word not available")
def test_thing():
"""test your thing"""

Pytest docs: https://docs.pytest.org/en/6.2.x/skipping.html#id1

最新更新