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

In Python, how to mark some tests to only execute when a condition is met

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

鉴于项目规模和我们的资源,并且看到这是唯一必须使用外部依赖项进行测试的功能,因此创建单独的集成测试环境是不可行的。我更喜欢 Word 阅读功能的测试而不是 运行 以及真正的单元测试。但是我们并没有在所有开发机器上安装 Word,然后这些测试失败了。

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

我想简单地在每个测试中放入类似 if not word_discovered: pass 的东西,但看起来它们都有效。我更喜欢测试框架在其中打印报告跳过这八个测试的解决方案。

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

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

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