python - 将测试标记为在独立进程中运行

标签 python pytest

我正在使用 pytest。我有一个测试,其中涉及检查在发生某些事情时是否进行导入。这很容易制作,但是当测试在 pytest 中运行时,它会在与许多其他测试相同的进程中运行,这些测试可能会预先导入那个东西。

是否有某种方法可以将测试标记为在其自己的进程中运行?理想情况下会有某种装饰器,比如

@pytest.mark.run_in_isolation
def test_import_not_made():
    ....

但我还没有找到类似的东西。

最佳答案

我不知道允许将测试标记为在其自己的进程中运行的 pytest 插件。我要检查的两个是 pytest-xdistptyest-xprocess (这里是 a list of pytest plugins ),尽管它们看起来不像你想要的那样。

我会选择不同的解决方案。我假设您检查模块是否被导入的方式是它是否在 sys.modules 中。因此,我会确保 sys.modules 在测试运行之前不包含您感兴趣的模块。

这样的事情将确保 sys.modules 在测试运行之前处于干净状态。

import sys

@pytest.fixture
def clean_sys_modules():
    try:
        del sys.modules['yourmodule']
    except KeyError:
        pass
    assert 'yourmodule' not in sys.modules # Sanity check.

@pytest.mark.usefixtures('clean_sys_modules')
def test_foo():
    # Do the thing you want NOT to do the import.
    assert 'yourmodule' not in sys.modules 

关于python - 将测试标记为在独立进程中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45462374/

相关文章:

python - 如何在Python中检测staticmethod/classmethod的被调用者类?

python - 仅替换 DataFrame 中最后一次出现的列值

python - 有没有办法找出wav文件是否未压缩pcm?

python - 新行字符在 Pygame 窗口的格式化输出中不起作用

python - 在 pytest 覆盖率报告中, "->"对缺失行意味着什么?

django - 在 pytest-factoryboy 中参数化具有多表继承的 Django 模型的属性

python - 如何在 jenkins 控制台输出中获取 python 打印结果

python - pytester - testdir 找不到 pytest 插件

python - 如何避免在 PyTest 中从 session 范围固定装置中改变对象?

python - pytest 是否支持 "default"标记?