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

Параллелизация стратегиясын тандоо (методдор, класстар, тесттер, сессиялар боюнча) тест frameworkтин архитектурасына жана долбоордун талаптарына жараша болот. Маанилүү — тесттердин өз ара көзкарандысыз болушу жана чөйрөнүн абалына таасир этпеши.