0

我有一个这样的项目结构:

project_root/
├─ __init__.py
├─ src/
│  ├─ __init__.py
│  ├─ etl/
│     ├─ __init__.py
│     ├─ module1.py
│     ├─ module2.py
│
├─ tests/
   ├─ __init__.py
   ├─ module_tests/
      ├─ __init__.py
      ├─ conftest.py
      ├─ test_module1.py
      ├─ test_module2.py

模块 1 和 2 必须从命令行运行,并且由于项目的奇怪限制只能使用python -m命令运行。因此,在我的测试模块中,我有这样的东西。

from subprocess import run


def test_module_1(request):
    assert run("python -m src.etl.module1") == 0

不幸的是,出于上述相同的原因,我无法使用pytest tests/module_tests/. 我必须使用python -m pytest tests/module_tests/. 然而,问题在于,当我以这种方式运行它时run,测试方法中的命令无法找到module1并引发FileNotFoundError. 我尝试pwd在测试中运行一个命令,它返回正确的根路径。我还尝试使用打印当前工作目录,os.getcwd()但它仍然是正确的根路径。使用手动将工作目录更改为项目根目录os.chdir也不起作用。我已经在网上检查了多个帖子和问题以找到解决方案,但到目前为止还没有找到任何东西。有谁知道如何解决这个问题?谢谢。

更新 1

正如有人在另一个问题中提到的那样,我只是尝试将 conftest.py 移动到项目根目录,但它仍然没有帮助。

更新 2

使用os.system而不是subrpocess.run似乎有效。但现在我无法得到命令的结果。

4

0 回答 0