带有 FastAPI 和 Docker 的 Testdriven.io:运行 pytest 会为 app.main 提供导入错误

时间:2021-08-01 21:03:15

标签: python docker pytest fastapi

我正在尝试通过我的 docker 容器运行我的测试用例。我的应用程序运行良好。所以我的用于 web 和 web_db 的 docker 容器可以工作。

 /> docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED         STATUS         PORTS                                       NAMES
20466fad870e   fastapi_tdd_docker_web-db   "docker-entrypoint.s…"   4 minutes ago   Up 4 minutes   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   fastapi_tdd_docker_web-db_1
5195473076db   fastapi_tdd_docker_web      "/usr/src/app/entryp…"   4 minutes ago   Up 4 minutes   0.0.0.0:8004->8000/tcp, :::8004->8000/tcp   fastapi_tdd_docker_web_1

但是,当我尝试运行简单的 ping 测试时,conftest.py 无法解析主应用程序的 main.py?我收到此错误:

/> docker-compose exec web python -m pytest
ImportError while loading conftest '/usr/src/app/tests/conftest.py'.
tests/conftest.py:9: in <module>
    from app import main
E   ImportError: cannot import name 'main' from 'app' (/usr/src/app/__init__.py)

我的树看起来像这样:

tree
.
├── aerich.ini
├── app
│   ├── config.py
│   ├── db.py
│   ├── __init__.py
│   ├── main2.py
│   ├── main.py
│   ├── models
│   │   ├── __init__.py
│   │   └── tortoise.py
│   └── __pycache__
│       ├── config.cpython-37.pyc
│       ├── __init__.cpython-37.pyc
│       ├── main2.cpython-37.pyc
│       └── main.cpython-37.pyc
├── db
│   ├── create.sql
│   └── Dockerfile
├── Dockerfile
├── entrypoint.sh
├── __init__.py
├── migrations
│   └── models
│       └── 0_20210801184928_init.sql
├── __pycache__
│   └── __init__.cpython-37.pyc
├── requirements.txt
├── tests
│   ├── conftest.py
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── conftest.cpython-37-pytest-6.2.4.pyc
│   │   ├── __init__.cpython-37.pyc
│   │   ├── test_first.cpython-37-pytest-6.2.4.pyc
│   │   └── test_ping.cpython-37-pytest-6.2.4.pyc
│   ├── test_first.py
│   └── test_ping.py
└── text.txt

有人遇到过这个问题吗? 由于这是课程代码的精确副本,我很困惑为什么它无法解析模块名称空间?

0 个答案:

没有答案