我正在尝试使用 pytest-xdist 通过在多个 CPU 上运行来更快地运行我的测试。但是,当我切换到使用多个 CPU 时,测试不会运行,因为收集测试时出现错误。
更具体地说,错误是
AttributeError: module '__main__' has no attribute '__file__'
这是因为正在测试的脚本导入了我编写的日志记录模块。日志记录模块使用
__main__.__file__
确定主应用程序的名称,以便将其添加到日志输出文件名中。
我似乎无法弄清楚 pytest 在多 CPU 模式下的作用与在单 CPU 模式下的不同。
所以当我执行我的测试时
python3 -m pytest
一切运行良好,但一旦我切换到
python3 -m pytest -n 4
我收到这些错误:
____________________ ERROR collecting ***.py
***/logging/log_setup.py:21: in <module>
app_name = os.path.basename(__main__.__file__)[:-3]
E AttributeError: module '__main__' has no attribute '__file__'
当我尝试使用 Python subprocess 方法执行时,也会出现同样的问题:
python3 -m pytest -d --tx 3*popen//python=python3
编辑: 我现在在我的日志模块中使用以下代码解决这个问题:
if hasattr(__main__, '__file__'):
app_name = os.path.basename(__main__.__file__)[:-3]
else:
app_name = 'unknown_app_name'
现在具有多个 CPU 的 pytest 对我来说可以正常工作。