У меня есть простое python докеризованное приложение со структурой
/src
- server.py
- test_server.py
Dockerfile
requirements.txt
, в котором базовый образ docker основан на Linux, а server.py
предоставляет конечную точку FastAPI. Для полноты, server.py
выглядит так:
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
number: int
app = FastAPI(title="Sum one", description="Get a number, add one to it", version="0.1.0")
@app.post("/compute")
async def compute(input: Item):
return {'result': input.number + 1}
Тесты должны выполняться с помощью pytest (после https://fastapi.tiangolo.com/tutorial/testing/) с test_server.py
:
from fastapi.testclient import TestClient
from server import app
import json
client = TestClient(app)
def test_endpoint():
"""test endpoint"""
response = client.post("/compute", json={"number": 1})
values = json.loads(response.text)
assert values["result"] == 2
Dockerfile
выглядит так:
FROM tiangolo/uvicorn-gunicorn:python3.7
COPY . /app
RUN pip install -r requirements.txt
WORKDIR /app/src
EXPOSE 8000
CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]
На данный момент, если я хочу запустить тесты на моем локальном компьютере в контейнере, один из способов сделать это:
- Создайте контейнер Docker
- Запустите контейнер, получите его имя через
docker ps
- Запустите
docker exec -it <mycontainer> bash
и выполните pytest
, чтобы увидеть прохождение тестов.
Теперь я хотел бы запустить тесты в Azure DevOps (Server), прежде чем помещать образ в мой Docker реестр и запускать конвейер выпуска. Если это звучит нормально, как это сделать?
До сих пор я надеялся, что что-то вроде добавления шага «PyTest» в конвейер сборки сработает волшебным образом:
![enter image description here](https://i.stack.imgur.com/qcD55.png)
I am currently using a Linux agent, and the step fails with
введите описание изображения здесь
Ошибка неудивительна, поскольку (я думаю) контейнер не запускается после сборки, и поэтому pytest также не может работать в нем: (
Другой способ Решить эту проблему можно, включив команды pytest в файл Docker и обработав тесты в конвейере выпуска. Однако я хотел бы отделить тестирование от контейнера, который в конечном итоге помещается в реестр и развертывается.
Is есть ли стандартный способ запустить pytest в контейнере Docker в Azure DevOps и получить графический отчет?