Sobes.tech
Junior

O que é paralelização?

sobes.tech IA

Resposta da IA

A paralelização no contexto de testes é a execução simultânea de vários cenários de teste em diferentes ambientes, navegadores ou dispositivos.

O seu objetivo principal é reduzir o tempo total de execução do conjunto de testes.

Vantagens:

  • Aceleração: Os testes são executados muito mais rapidamente, permitindo executar com mais frequência conjuntos completos de regressão.
  • Eficiência: Uso ótimo dos recursos disponíveis (CPU, RAM).
  • Flexibilidade: Permite testar a aplicação em diferentes configurações ao mesmo tempo (por exemplo, Chrome no Windows e Firefox no macOS).

Desvantagens:

  • Complexidade de configuração: Requer uma configuração adequada da infraestrutura de testes.
  • Gestão de dependências: É necessário evitar dependências entre testes que possam causar efeitos secundários indesejados durante a execução paralela.
  • Depuração: Depurar testes que são executados em paralelo pode ser mais difícil.

A implementação muitas vezes é feita usando:

  • Ferramentas de automação de testes com suporte incorporado para paralelização (por exemplo, Selenium Grid, Playwright, Cypress).
  • Frameworks de testes com suporte para execução paralela (por exemplo, JUnit, TestNG, Pytest).
  • Sistemas CI/CD que podem executar tarefas de teste em paralelo em vários agentes.

Exemplo com TestNG:

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

Exemplo com Pytest:

# conftest.py
import pytest

def pytest_addoption(parser):
    parser.addoption("--browser", action="store", default="chrome", help="navegador para executar testes")

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

# test_example.py
def test_login(browser):
    print(f"Testando login no {browser}") # Registo para exemplo
    assert True

def test_product(browser):
    print(f"Testando página de produto no {browser}") # Registo para exemplo
    assert True

# Execução com paralelismo
# pytest -n 2 --dist=loadfile --browser=chrome test_example.py & pytest -n 2 --dist=loadfile --browser=firefox test_example.py
# ou com pytest-xdist
# pytest -n auto --dist=loadfile test_example.py --browser=chrome --browser=firefox

A estratégia de paralelização (por métodos, classes, testes, suites) depende da arquitetura do framework de testes e dos requisitos do projeto. É importante garantir que os testes sejam independentes entre si e não afetem o estado do ambiente entre eles.