Sobes.tech
Junior

Mi a párhuzamosítás?

sobes.tech MI

Válasz az MI-től

A párhuzamosítás a tesztelés kontextusában több tesztesemény egyidejű végrehajtását jelenti különböző környezetekben, böngészőkben vagy eszközökön.

Fő célja a tesztkészlet összes végrehajtási idejének csökkentése.

Előnyei:

  • Gyorsítás: A tesztek jelentősen gyorsabban futnak, így gyakrabban lehet teljes regressziós készleteket indítani.
  • Hatékonyság: A rendelkezésre álló erőforrások (CPU, RAM) optimális kihasználása.
  • Rugalmasság: Lehetővé teszi az alkalmazás különböző konfigurációkban történő tesztelését egyidejűleg (például Chrome Windows-on és Firefox macOS-en).

Hátrányok:

  • Beállítási bonyolultság: Megfelelő teszt infrastruktúra konfigurációt igényel.
  • Függőségek kezelése: El kell kerülni a tesztek közötti függőségeket, amelyek nem kívánt mellékhatásokat okozhatnak párhuzamos végrehajtás során.
  • Hibakeresés: A párhuzamosan futó tesztek hibakeresése bonyolultabb lehet.

A megvalósítás gyakran a következő eszközökkel történik:

  • Automatikus tesztelést támogató eszközök beépített párhuzamosítási támogatással (például Selenium Grid, Playwright, Cypress).
  • Párhuzamos végrehajtást támogató teszt keretrendszerek (például JUnit, TestNG, Pytest).
  • CI/CD rendszerek, amelyek képesek párhuzamosan futtatni tesztfeladatokat több ügynökön.

Példa TestNG-vel:

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

Példa Pytest-hez:

# 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}") # Naplózás példaként
    assert True

def test_product(browser):
    print(f"Testing product page on {browser}") # Naplózás példaként
    assert True

# Párhuzamos futtatás
# pytest -n 2 --dist=loadfile --browser=chrome test_example.py & pytest -n 2 --dist=loadfile --browser=firefox test_example.py
# vagy pytest-xdist-tel
# pytest -n auto --dist=loadfile test_example.py --browser=chrome --browser=firefox

A párhuzamosítás stratégiájának kiválasztása (módszerek, osztályok, tesztek, sytuk) a teszt keretrendszer architektúrájától és a projekt követelményeitől függ. Fontos, hogy a tesztek függetlenek legyenek egymástól, és ne befolyásolják egymás környezetének állapotát.