Testen met PyTest - ZuydUniversity/B2C6_B2A_Backend GitHub Wiki

Het maken van een test file

Maak per python file een nieuwe test file aan waar je je unit tests in kan zetten. De unit-test files moeten beginnen met โ€œtest_โ€ op deze manier worden ze herkend door pytest. De test file moet geplaatst worden in de root van de tests folder.

Het maken van een test

Een unit test in python is een functie waarbij je assert of input leidt tot een verwachte output. Hiervoor gebruik je het keyword assert. (https://docs.pytest.org/en/7.1.x/getting-started.html#create-your-first-test)

Meerdere test cases (Parametrize)

Bij het testen van verschillende inputs kan je gebruik maken van @pytest.mark.parametrize. Deze functie zorgt ervoor dat je test meerdere keren wordt uitgevoerd met verschillende input. Parametrize accepteerd de namen van de verschillende inputs en outputs, en een lijst met de waardes van de input en verwachte output. (https://docs.pytest.org/en/7.1.x/how-to/parametrize.html#parametrizemark)

@pytest.mark.parametrize("name, expected_output", [
    (None, "Hello world!"),
    ("", "Hello world!"),
    ("John", "Hello John!")
])
def test_hello_world_parameters(client, name, expected_output):
    response = client.get('/helloWorldParameters', query_string={'name': name})
    assert response.status_code == 200
    assert response.data.decode() == expected_output

Testen van API endpoint

Om een endpoint te testen kan je een python fixture maken waarin de API geconfigureerd wordt. Hiervoor word de app.test_client() van Flask gebruikt. https://flask.palletsprojects.com/en/1.1.x/testing/.

@pytest.fixture
def client():
    app.config['TESTING'] = True
    with app.test_client() as client:
        yield client

Mocking Input

Indien je unit test bepaalde input van je gebruiker verwacht kan je met PyTests monkeypatch deze mocken. (https://docs.pytest.org/en/7.1.x/how-to/monkeypatch.html?highlight=mock)

(https://pavolkutaj.medium.com/simulating-single-and-multiple-inputs-using-pytest-and-monkeypatch-6968274f7eb9)

Het lokaal uitvoeren van tests

Om de pytests lokaal uit te voeren moet je in de terminal het command pytest uitvoeren. Deze Terminal command moet uitgevoerd worden wanneer de terminal zich bevindt in de root van het project (dus gebruik geen cd directory/file om te navigeren buiten de root. Indien je een specifieke test file wilt uitvoeren dan voer je het command pytest test_filename.py uit.

Het maken van pull requests met automatische testen

Wanneer je een pull request maakt zal er via de github actions een build worden gemaakt waarop testen worden uitgevoerd. Het kan enkele seconden duren voordat de build gemaakt is en alle testen zijn uitgevoerd.

image

Indien de testen niet slagen kan je in de details naar de test resultaten gaan om te kijken waarom ze niet geslaagd zijn. Verwijder de pull request, verander je code zodat de testen slagen en maak een nieuwe pull request.

Github actions (.yml file)