Sobes.tech
Junior

Ի՞նչ է պառալելիզացիան։

sobes.tech AI

Պատասխան AI-ից

Պարալելիզացիան փորձարկման համատեքստում նշանակում է միաժամանակյա մի քանի փորձարկման սցենարների կատարմամբ տարբեր միջավայրերում, բրաուզերներում կամ սարքավորումներում:

Նրա հիմնական նպատակն է կրճատել ընդհանուր ժամանակը փորձարկման հավաքածուի կատարման համար:

Առավելություններ՝

  • Արագացում՝ փորձարկումները կատարվում են զգալիորեն արագ, ինչը թույլ է տալիս ավելի հաճախ գործարկել լրիվ ռեգրեսիոն հավաքածուներ:
  • Արդյունավետություն՝ հասանելի ռեսուրսների (CPU, RAM) օպտիմալ օգտագործում:
  • Գնահատելիություն՝ թույլ է տալիս միաժամանակ փորձարկել տարբեր կոնֆիգուրացիաներում (օրինակ՝ Chrome Windows-ում և Firefox macOS-ում):

Կարծրություններ՝

  • Կարգավորման բարդություն՝ պահանջում է ճիշտ կարգավորել փորձարկման ենթակառուցվածքը:
  • Վերահսկում կախվածություններից՝ անհրաժեշտ է խուսափել փորձարկումների միջև կախվածություններից, որոնք կարող են առաջացնել undesirable կողմնակի ազդեցություններ միաժամանակ կատարման ժամանակ:
  • Համակարգում՝ միաժամանակ կատարվող փորձարկումների սխալների հայտնաբերումն ավելի բարդ է:

Իրականացմանը հաճախ աջակցում են՝

  • Ավտոմատիզացիայի գործիքներ՝ ներառված միավորով միաժամանակյա կատարման աջակցությամբ (օրինակ՝ 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

Ընտրությունը՝ միաժամանակյա կատարման ռազմավարությունը (մեթոդներով, դասերով, փորձարկումներով, սեսիաներով) կախված է փորձարկման ֆրեյմվորկի կառուցվածքից և նախագծի պահանջներից: Կարևոր է ապահովել, որ փորձարկումները լինեն անկախ միմյանցից և չազդեն միմյանց միջավայրի վիճակի վրա։