我正在尝试使用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子过程方法执行时,会出现相同的问题:
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对我来说很好用。