Sobes.tech
Junior

Mis on parallelliseerimine?

sobes.tech AI

Vastus AI-lt

P paralleelizatsioon testimise kontekstis tähendab mitme teststsenaariumi samaaegset täitmist erinevates keskkondades, brauserites või seadmetes.

Selle peamine eesmärk on lühendada kogu testide täitmise aega.

Eelised:

  • Kiirendus: Testid täidetakse märkimisväärselt kiiremini, võimaldades sagedamini käivitada täielikke regressioonide komplekte.
  • Tõhusus: olemasolevate ressursside (CPU, RAM) optimaalse kasutamise võimalus.
  • Paindlikkus: võimaldab samaaegselt testida rakendust erinevates konfiguratsioonides (näiteks Chrome Windowsil ja Firefox macOS-il).

Puudused:

  • Seadistamise keerukus: nõuab õiget testinfrastruktuuri konfiguratsiooni.
  • Sõltuvuste haldamine: tuleb vältida testide vahel sõltuvusi, mis võivad põhjustada soovimatuid kõrvaltoimeid samaaegse täitmise ajal.
  • Silumine: samaaegselt täidetavate testide silumine võib olla keerulisem.

Tegelikuks kasutamiseks kasutatakse sageli:

  • automaatikatööriistu, millel on sisseehitatud paralleelizatsiooni tugi (näiteks Selenium Grid, Playwright, Cypress).
  • testiraame, mis toetavad paralleelset täitmist (näiteks JUnit, TestNG, Pytest).
  • CI/CD-süsteeme, mis suudavad käivitada testülesandeid samaaegselt mitmel agentidel.

Näide TestNG-ga:

// testng.xml
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="MySuite" parallel="tests" thread-count="2"> // <-- parallel="tests" ja 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>

Näide Pytestiga:

# conftest.py
import pytest

def pytest_addoption(parser):
    parser.addoption("--browser", action="store", default="chrome", help="browser to run tests")

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

# test_example.py
def test_login(browser):
    print(f"Testing login on {browser}") # Logimine näide
    assert True

def test_product(browser):
    print(f"Testing product page on {browser}") # Logimine näide
    assert True

# Paralleelne käivitamine:
# pytest -n 2 --dist=loadfile --browser=chrome test_example.py & pytest -n 2 --dist=loadfile --browser=firefox test_example.py
# või pytest-xdist-iga
# pytest -n auto --dist=loadfile test_example.py --browser=chrome --browser=firefox

Paralelizatsiooni strateegia valik (meetodite, klasside, testide, sessioonide järgi) sõltub testiraamistiku arhitektuurist ja projekti nõuetest. Oluline on tagada, et testid oleksid sõltumatud üksteisest ning ei mõjutaks üksteise keskkonna olekut.