Контекст:
Я создал приложение Flask, которое делает объект JSON доступным на localhost/api. Я также использую nginx и Gunicorn для создания своего сервера. Все это приложение контейнеризируется с помощью Docker.
Докерфайл:
FROM python:3.10
ENV CONTAINER_HOME=/var/www
ADD . $CONTAINER_HOME
WORKDIR $CONTAINER_HOME
RUN pwd
RUN pip3 install -r $CONTAINER_HOME/requirements.txt
# RUN python3 $CONTAINER_HOME/src/tests/tests.py ???? Should I add this line?
докер-compose.yml:
version: '3.8'
services:
nginx:
image: nginx:1.25
container_name: nginx
volumes:
- ./nginx-config/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- 80:80
networks:
- my-network
depends_on:
- flask
flask:
build:
context: ./
dockerfile: Dockerfile
container_name: flask
command: gunicorn --bind 0.0.0.0:8000 "src.api.app:app"
volumes:
- ./:/var/www
networks:
my-network:
aliases:
- project
networks:
my-network:
Требования:
Теперь я хочу протестировать свой API. Я написал скрипт Python (см. test.py в Dockerfile), который отлично работает в моей локальной среде и выполняет тесты.
Проблема:
Как мне решить эту проблему? Как автоматизировать тест с помощью Docker? Возможно, в Dockerfile или в docker-compose. Или мне следует создать другой подкаталог в каталоге моего проекта и создать отдельный файл Dockerfile для запуска test.py?
Пожалуйста помоги.






Предположим, что структура проекта такая:
├── app.py
├── docker-compose.yml
├── Dockerfile
├── nginx-config
│ └── nginx.conf
├── requirements.txt
└── test.py
🗎 docker-compose.yml (Добавьте сервис test, который использует то же изображение, что и созданный для сервиса flask.)
version: '3.8'
services:
nginx:
image: nginx:1.25
container_name: nginx
volumes:
- ./nginx-config/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- 80:80
depends_on:
- flask
flask:
container_name: flask
image: flask:latest
build:
context: ./
dockerfile: Dockerfile
container_name: flask
command: gunicorn --bind 0.0.0.0:8000 "app:app"
test:
image: flask:latest
container_name: test
depends_on:
- nginx
command: python3 test.py
🗎 Dockerfile
FROM python:3.10
ARG CONTAINER_HOME=/var/www
ADD . $CONTAINER_HOME
WORKDIR $CONTAINER_HOME
RUN pip3 install -r requirements.txt
🗎 requirements.txt
Flask==3.0.2
gunicorn==21.2.0
requests==2.31.0
Минимальное приложение и тесты:
🗎 app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True)
🗎 test.py
import requests
def test_api():
url = "http://nginx:80/"
response = requests.get(url)
assert response.status_code == 200, "API did not return 200 OK!"
assert response.text == "Hello, World!", "API response did not match!"
if __name__ == "__main__":
test_api()
print("Test passed!")
Теперь, когда вы запускаете стек, служба test будет запускаться последней и проверять API через NGINX.
Благодаря тонну! Принял ваш ответ 👍