Sobes.tech
Junior

Parallellashuv nima?

sobes.tech AI

AIdan javob

Test mühitində 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ədi, ü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.