Удалённый запуск тестов PyTest

Введение

В этой статье вы можете познакомиться с различными примерами удалённого запуска тестов на PyTest.

FastAPI и subprocess

Рассмотрим следующий сетап: две машины с Windows 7. Нужно запустить тесты на машине W01 из машины W02

На обеих машинах рекомендую создать и активировать виртуальное окружение например, с помощью venv

python -m venv venv
.\venv\Scripts\activate

Машина 1, с на который будут запущены тесты

python -m pip install fastapi uvicorn

# HOST W01 FastAPI api_demo.py import subprocess import sys import uvicorn from fastapi import FastAPI app = FastAPI() python_venv = sys.prefix + "\" + "Scripts\python.exe" @app.get("/test") def test(): subprocess.run([ python_venv, "-m" "pytest", "--maxfail=1", "--disable-warnings", "-vv", "--tb=long", "--html=report.html", "--self-contained-html", "test_smoke.py" ]) if __name__ == "__main__": uvicorn.run("api_demo:app", host="0.0.0.0", port=5000, log_level="info")

Машина 1, тесты. Замените их на нужные вам и доустановите необходимые библиотеки.

# HOST W01 Tests smoke_test.py import pytest def test_pass(): assert 1 == 1 def test_fail(): assert 1 == 2

Машина 2, с которой посылается сигнал о запуске тестов

python -m pip install requests

# HOST W02 trigger.py import requests W01_IP = "10.8.1.101:5000" r = requests.get(f"http://{W01_IP}/test") print(r.status_code)

На первой машине нужно открыть порт 5000.

Открыть порт в Windows через PowerShell
Открыть порт в Windows вручную

Затем нужно запустить FastAPI

python .\api_demo.py

←[32mINFO←[0m: Started server process [←[36m2156←[0m] ←[32mINFO←[0m: Waiting for application startup. ←[32mINFO←[0m: Application startup complete. ←[32mINFO←[0m: Uvicorn running on ←[1mhttp://0.0.0.0:5000←[0m (Press CTRL+C to quit)

На второй машине нужно запустить скрипт

python .\trigger.py

200

Автор статьи: Андрей Олегович