Sobes.tech
Junior

Ce este paralelizarea?

sobes.tech AI

Răspuns de la AI

Paralelizarea în contextul testării reprezintă executarea simultană a mai multor scenarii de testare pe medii, browsere sau dispozitive diferite.

Scopul principal este de a reduce timpul total de execuție al setului de teste.

Avantaje:

  • Accelerare: Testele sunt executate mult mai rapid, permițând rularea mai frecventă a seturilor complete de regresie.
  • Eficiență: Utilizarea optimă a resurselor disponibile (CPU, RAM).
  • Flexibilitate: Permite testarea aplicației în diferite configurații în același timp (de exemplu, Chrome pe Windows și Firefox pe macOS).

Dezavantaje:

  • Complexitatea configurării: Necesită o configurare corectă a infrastructurii de testare.
  • Gestionarea dependențelor: Este necesar să se evite dependențele între teste care pot cauza efecte secundare nedorite în timpul execuției paralele.
  • Depanare: Debugging-ul testelor care rulează în paralel poate fi mai dificil.

Implementarea se face adesea cu:

  • Instrumente de automatizare a testelor cu suport încorporat pentru paralelizare (de exemplu, Selenium Grid, Playwright, Cypress).
  • Framework-uri de testare care suportă execuția paralelă (de exemplu, JUnit, TestNG, Pytest).
  • Sisteme CI/CD care pot rula sarcini de testare în paralel pe mai mulți agenți.

Exemplu cu 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>

Exemplu cu Pytest:

# conftest.py
import pytest

def pytest_addoption(parser):
    parser.addoption("--browser", action="store", default="chrome", help="browser pentru rularea testelor")

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

# test_example.py
def test_login(browser):
    print(f"Testing login pe {browser}") # Logare pentru exemplu
    assert True

def test_product(browser):
    print(f"Testing pagina de produs pe {browser}") # Logare pentru exemplu
    assert True

# Rulare cu paralelism
# pytest -n 2 --dist=loadfile --browser=chrome test_example.py & pytest -n 2 --dist=loadfile --browser=firefox test_example.py
# sau cu pytest-xdist
# pytest -n auto --dist=loadfile test_example.py --browser=chrome --browser=firefox

Strategia de paralelizare (pe metode, clase, teste, suite-uri) depinde de arhitectura framework-ului de testare și de cerințele proiectului. Este important ca testele să fie independente între ele și să nu afecteze starea mediului între ele.