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.