Pytest with Docker - improved
examples/pytest/docker/test_with_docker_improved.py
import pytest import requests import time import os @pytest.fixture(autouse = True, scope="module") def image(): image_name = 'test_image_' + str(int(time.time()*1000)) print(f"image: {image_name}") print("setup_module ", os.system(f"docker build -t {image_name} .")) yield image_name print("teardown_module ", os.system(f"docker rmi -f {image_name}")) @pytest.fixture() def myport(image): port = '5001' container_name = 'test_container_' + str(int(time.time()*1000)) print(f"container: {container_name}") print("setup_function ", os.system(f"docker run --rm -d -v$(pwd):/workdir -p{port}:5000 --name {container_name} {image}")) time.sleep(1) # Let the Docker container start yield port print("teardown_function ", os.system(f"docker stop -t 0 {container_name}")) def test_app(myport): url = f"http://localhost:{myport}/api/calc?a=3&b=10" print(url) res = requests.get(url) assert res.status_code == 200 assert res.json() == {'a': 3, 'add': 13, 'b': 10} def test_app_again(myport): url = f"http://localhost:{myport}/api/calc?a=-1&b=1" print(url) res = requests.get(url) assert res.status_code == 200 assert res.json() == {'a': -1, 'add': 0, 'b': 1}