Sobes.tech
Junior

Какво е паралелизация?

sobes.tech AI

Отговор от AI

Паралелизацията в контекста на тестването означава едновременно изпълнение на няколко тестови сценария на различни среди, браузъри или устройства.

Основната й цел е да съкрати общото време за изпълнение на тестовия набор.

Предимства:

  • Ускорение: Тестовете се изпълняват значително по-бързо, което позволява по-често стартиране на пълни регресионни набори.
  • Ефективност: Оптимално използване на наличните ресурси (CPU, RAM).
  • Гъвкавост: Позволява тестване на приложението в различни конфигурации едновременно (например Chrome на Windows и Firefox на macOS).

Недостатъци:

  • Сложност при настройка: Изисква правилна конфигурация на тестовата инфраструктура.
  • Управление на зависимости: Необходимо е да се избягват зависимости между тестовете, които могат да предизвикат нежелани странични ефекти при паралелното изпълнение.
  • Дебъгване: Дебъгването на паралелно изпълняващите се тестове може да бъде по-сложно.

Реализацията често се осъществява с помощта на:

  • Инструменти за автоматизация на тестовете с вградена поддръжка за паралелизация (например Selenium Grid, Playwright, Cypress).
  • Тестови рамки с поддръжка за паралелно изпълнение (например, JUnit, TestNG, Pytest).
  • CI/CD системи, които могат да стартират тестови задачи паралелно на няколко агента.

Пример с TestNG:

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

Пример с 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}") # Логирование за пример
    assert True

def test_product(browser):
    print(f"Testing product page on {browser}") # Логирование за пример
    assert True

# Стартиране с паралел
# pytest -n 2 --dist=loadfile --browser=chrome test_example.py & pytest -n 2 --dist=loadfile --browser=firefox test_example.py
# или с pytest-xdist
# pytest -n auto --dist=loadfile test_example.py --browser=chrome --browser=firefox

Изборът на стратегия за паралелизация (по методи, класове, тестове, сесии) зависи от архитектурата на тестовия фреймуърк и изискванията на проекта. Важно е да се гарантира, че тестовете са независими един от друг и не влияят на състоянието на околната среда един на друг.