Sobes.tech
Junior

Шта је паралелизација?

sobes.tech АИ

Одговор од АИ

Paralelizacija u kontekstu testiranja podrazumeva istovremeno izvršavanje više test scenarija na različitim okruženjima, pregledačima ili uređajima.

Njena glavna svrha je skraćivanje ukupnog vremena izvršavanja test seta.

Prednosti:

  • Ubrzanje: Testovi se izvršavaju znatno brže, što omogućava češće pokretanje punih regresionih setova.
  • Efikasnost: Optimalno korišćenje dostupnih resursa (CPU, RAM).
  • Fleksibilnost: Omogućava testiranje aplikacije u različitim konfiguracijama istovremeno (na primer, Chrome na Windows-u i Firefox na macOS-u).

Nedostaci:

  • Složenost podešavanja: Zahteva pravilnu konfiguraciju testne infrastrukture.
  • Upravljanje zavisnostima: Potrebno je izbegavati zavisnosti između testova koje mogu izazvati neželjene sporedne efekte pri paralelnom izvršavanju.
  • Debugovanje: Debugovanje paralelno izvršavajućih testova može biti složenije.

Implementacija se često sprovodi pomoću:

  • Alata za automatizaciju testiranja sa ugrađenom podrškom za paralelizaciju (na primer, Selenium Grid, Playwright, Cypress).
  • Test okvira sa podrškom za paralelno izvršavanje (na primer, JUnit, TestNG, Pytest).
  • CI/CD sistema koji mogu pokretati test zadatke paralelno na više agenata.

Primer na TestNG:

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

Primer na 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}") # Logovanje za primer
    assert True

def test_product(browser):
    print(f"Testing product page on {browser}") # Logovanje za primer
    assert True

# Pokretanje sa paralelom
# pytest -n 2 --dist=loadfile --browser=chrome test_example.py & pytest -n 2 --dist=loadfile --browser=firefox test_example.py
# ili sa pytest-xdist
# pytest -n auto --dist=loadfile test_example.py --browser=chrome --browser=firefox

Izbor strategije paralelizacije (po metodama, klasama, testovima, sesijama) zavisi od arhitekture test okvira i zahteva projekta. Važno je osigurati da testovi budu nezavisni jedni od drugih i da ne utiču na stanje okruženja međusobno.