Sobes.tech
Junior

Kas ir paralelizācija?

sobes.tech AI

Atbilde no AI

P paralelizācija testēšanas kontekstā nozīmē vairākas testu scenāriju vienlaicīgu izpildi dažādās vidēs, pārlūkprogrammās vai ierīcēs.

Tās galvenais mērķis ir saīsināt kopējo testu izpildes laiku.

Priekšrocības:

  • Paātrinājums: Testi tiek izpildīti ievērojami ātrāk, ļaujot biežāk palaist pilnus regresijas komplektus.
  • Efektivitāte: optimāla pieejamo resursu (CPU, RAM) izmantošana.
  • Elastība: ļauj testēt lietotni dažādās konfigurācijās vienlaicīgi (piemēram, Chrome Windows un Firefox macOS).

Trūkumi:

  • Iestatīšanas sarežģītība: prasa pareizu testēšanas infrastruktūras konfigurāciju.
  • Atkarību pārvaldība: ir jāizvairās no atkarībām starp testiem, kas var radīt nevēlamas blakusparādības vienlaicīgas izpildes laikā.
  • Atkļūdošana: paralēli izpildāmo testu atkļūdošana var būt sarežģītāka.

Īstenošana bieži tiek veikta ar:

  • automatizācijas rīkiem ar iebūvētu paralelizācijas atbalstu (piemēram, Selenium Grid, Playwright, Cypress).
  • testu ietvariem ar paralēlas izpildes atbalstu (piemēram, JUnit, TestNG, Pytest).
  • CI/CD sistēmām, kas var palaist testu uzdevumus paralēli vairākos aģentos.

Piemērs ar TestNG:

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

Piemērs ar Pytest:

# 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}") # Žurnāls piemēram
    assert True

def test_product(browser):
    print(f"Testing product page on {browser}") # Žurnāls piemēram
    assert True

# Darbināšana ar paralēli
# pytest -n 2 --dist=loadfile --browser=chrome test_example.py & pytest -n 2 --dist=loadfile --browser=firefox test_example.py
# vai ar pytest-xdist
# pytest -n auto --dist=loadfile test_example.py --browser=chrome --browser=firefox

Paralelizācijas stratēģijas izvēle (pēc metodēm, klasēm, testiem, sesijām) ir atkarīga no testēšanas ietvara arhitektūras un projekta prasībām. Svarīgi ir nodrošināt, lai testi būtu neatkarīgi viens no otra un neietekmētu apkārtējās vides stāvokli.