首页 > 解决方案 > PytestWarning:模块已导入,因此无法重写:pytest_remotedata

问题描述

我创建了一些单元测试并从同一个文件中运行它们。对于同一文件中的测试:

if __name__ == "__main__":
    import pytest
    pytest.main(['--tb=short', __file__])

对于另一个文件中的测试:

if __name__ == '__main__':
    import pytest
    pytest.main(['./test_stuff.py', "--capture=sys"])

在任何一种情况下,当我第一次执行该文件时,它都可以正常工作,但第二次和随后的时间它会给出一堆警告:

============================== warnings summary ===============================
C:\Anaconda3\lib\site-packages\_pytest\config\__init__.py:754
  C:\Anaconda3\lib\site-packages\_pytest\config\__init__.py:754: PytestWarning: Module already imported so cannot be rewritten: pytest_remotedata
    self._mark_plugins_for_rewrite(hook)
  C:\Anaconda3\lib\site-packages\_pytest\config\__init__.py:754: PytestWarning: Module already imported so cannot be rewritten: pytest_openfiles
    self._mark_plugins_for_rewrite(hook)
  C:\Anaconda3\lib\site-packages\_pytest\config\__init__.py:754: PytestWarning: Module already imported so cannot be rewritten: pytest_doctestplus
    self._mark_plugins_for_rewrite(hook)
  C:\Anaconda3\lib\site-packages\_pytest\config\__init__.py:754: PytestWarning: Module already imported so cannot be rewritten: pytest_arraydiff
    self._mark_plugins_for_rewrite(hook)

-- Docs: https://docs.pytest.org/en/latest/warnings.html
==================== 1 passed, 4 warnings in 0.06 seconds 

有没有办法让这些警告消失?

重新启动内核可以工作,但 IPython%reset%clear也不足以修复它。

标签: pythonpython-importpytest

解决方案


使用subprocess代替pytest.main

if __name__ == "__main__":
    import subprocess
    subprocess.call(['pytest', '--tb=short', str(__file__)])

如果上面没有打印任何内容,请尝试解决方法(如评论中建议的那样):

if __name__ == "__main__":
    from subprocess import Popen, PIPE
    with Popen(['pytest',
                '--tb=short',  # shorter traceback format
                str(__file__)], stdout=PIPE, bufsize=1,
                universal_newlines=True) as p:
        for line in p.stdout:
            print(line, end='')

推荐阅读