Sobes.tech
Junior

Wat is parallelisatie?

sobes.tech AI

Antwoord van AI

Parallelisatie in de context van testen is het gelijktijdig uitvoeren van meerdere testscenario's op verschillende omgevingen, browsers of apparaten.

Het belangrijkste doel is om de totale uitvoeringstijd van de testset te verkorten.

Voordelen:

  • Versnelling: Tests worden aanzienlijk sneller uitgevoerd, waardoor volledige regressiesets vaker kunnen worden uitgevoerd.
  • Efficiëntie: Optimale benutting van beschikbare bronnen (CPU, RAM).
  • Flexibiliteit: Het stelt je in staat om de applicatie gelijktijdig in verschillende configuraties te testen (bijvoorbeeld Chrome op Windows en Firefox op macOS).

Nadelen:

  • Complexiteit van configuratie: Vereist een correcte configuratie van de testinfrastructuur.
  • Beheer van afhankelijkheden: Het is noodzakelijk om afhankelijkheden tussen tests te vermijden die ongewenste bijwerkingen kunnen veroorzaken tijdens gelijktijdige uitvoering.
  • Foutopsporing: Het debuggen van tests die parallel worden uitgevoerd, kan moeilijker zijn.

De implementatie wordt vaak gedaan met:

  • Testautomatiseringstools met ingebouwde ondersteuning voor parallelisatie (bijvoorbeeld Selenium Grid, Playwright, Cypress).
  • Testframeworks die ondersteuning bieden voor gelijktijdige uitvoering (bijvoorbeeld JUnit, TestNG, Pytest).
  • CI/CD-systemen die testtaken parallel kunnen uitvoeren op meerdere agents.

Voorbeeld met TestNG:

// testng.xml
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="MySuite" parallel="tests" thread-count="2"> // <-- parallel="tests" en thread-count="2"
    <test name="TestOnChrome">
        <parameter name="browser" value="chrome"/>
        <classes>
            <class name="com.example.tests.LoginTest"/>
            <class name="com.example.tests.ProductTest"/>
        </classes>
    </test>
    <test name="TestOnFirefox">
        <parameter name="browser" value="firefox"/>
        <classes>
            <class name="com.example.tests.LoginTest"/>
             <class name="com.example.tests.ProductTest"/>
        </classes>
    </test>
</suite>

Voorbeeld met Pytest:

# conftest.py
import pytest

def pytest_addoption(parser):
    parser.addoption("--browser", action="store", default="chrome", help="browser om tests uit te voeren")

@pytest.fixture
def browser(request):
    return request.config.getoption("--browser")

# test_example.py
def test_login(browser):
    print(f"Testing login op {browser}") # Logging voor voorbeeld
    assert True

def test_product(browser):
    print(f"Testing productpagina op {browser}") # Logging voor voorbeeld
    assert True

# Uitvoeren met parallelisatie
# pytest -n 2 --dist=loadfile --browser=chrome test_example.py & pytest -n 2 --dist=loadfile --browser=firefox test_example.py
# of met pytest-xdist
# pytest -n auto --dist=loadfile test_example.py --browser=chrome --browser=firefox

De strategie voor parallelisatie (per methoden, klassen, tests, suites) hangt af van de architectuur van het testframework en de projectvereisten. Het is belangrijk dat tests onafhankelijk zijn van elkaar en de omgevingstoestand niet beïnvloeden.