Sobes.tech
Junior

Paralelləşdirmə nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Testlərin kontekstində paralelləşdirmə, müxtəlif mühitlərdə, brauzerlərdə və ya cihazlarda eyni vaxtda bir neçə test ssenarisinin icrasıdır.

Əsas məqsəd, ümumi test dəstinin icra vaxtını azaltmaqdır.

Üstünlüklər:

  • Sürətləndirmə: Testlər əhəmiyyətli dərəcədə daha sürətli icra olunur, bu da tam regresiya dəstlərinin daha tez-tez işlədilməsinə imkan verir.
  • Effektivlik: Mövcud resursların (CPU, RAM) optimal istifadəsi.
  • Esneklik: Tətbiqi eyni zamanda müxtəlif konfiqurasiyalarda test etməyə imkan verir (məsələn, Windows-da Chrome və macOS-da Firefox).

Çətinliklər:

  • Quruluşun mürəkkəbliyi: Doğru test infrastrukturunun qurulmasını tələb edir.
  • Asılılıqların idarə olunması: Paralel icra zamanı arzuolunmaz yan təsirlərə səbəb ola biləcək testlər arasındakı asılılıqları qarşısını almaq lazımdır.
  • Hata ayıklama: Paralel işləyən testləri hata ayıklamaq daha çətin ola bilər.

Tətbiq tez-tez aşağıdakı vasitələrlə həyata keçirilir:

  • Paralel işləməyə dəstək verən test avtomatlaşdırma alətləri (məsələn, Selenium Grid, Playwright, Cypress).
  • Paralel icra dəstəyi olan test çərçivələri (məsələn, JUnit, TestNG, Pytest).
  • Bir neçə agentdə paralel test tapşırıqlarını işlədə bilən CI/CD sistemləri.

TestNG nümunəsi:

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

# conftest.py
import pytest

def pytest_addoption(parser):
    parser.addoption("--browser", action="store", default="chrome", help="Testləri işlətmək üçün brauzer")

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

# test_example.py
def test_login(browser):
    print(f"{browser} üzərində giriş testidir") # Nümunə qeydiyyat
    assert True

def test_product(browser):
    print(f"{browser} üzərində məhsul səhifəsi testidir") # Nümunə qeydiyyat
    assert True

# Paralel işlətmə
# pytest -n 2 --dist=loadfile --browser=chrome test_example.py & pytest -n 2 --dist=loadfile --browser=firefox test_example.py
# və ya pytest-xdist ilə
# pytest -n auto --dist=loadfile test_example.py --browser=chrome --browser=firefox

Paralelizasiya strategiyası (metodlar, siniflər, testlər, sətirlər) test çərçivəsinin memarlığı və layihənin tələblərinə uyğun olaraq seçilir. Testlərin bir-birindən müstəqil olması və mühitin vəziyyətinə təsir etməməsi vacibdir.