4

我正在尝试使用 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 对我来说可以正常工作。

4

0 回答 0