python - 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
也不足以修复它。
解决方案
使用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='')
推荐阅读
- c# - 使用 OpenXML 遍历 Excel 工作表中的所有超链接不会返回所有超链接
- php - 通过 .htaccess wordpress 升级 php
- python - 从字符串中返回最长的单词
- javascript - 在循环中填充数组的竞争问题
- system-verilog - 重载systemverilog系统任务
- django - 在 Django 2.1 中创建一个与现有模型关联的用户
- vue.js - 仅在渲染 Vue 组件时更改样式
- php - 如何通过选择菜单上的项目调用视图?
- node.js - 如何在 Mongoose 和 Nddejs 中使用 $elemMatch 设置默认值
- ruby-on-rails - Rails 5 连接表创建一个将新行添加到连接表的表单