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

პარალელიზაციის სტრატეგიის არჩევანი (მეთოდებით, კლასებით, ტესტებით, სესიებით) დამოკიდებულია ტესტირების ფრეიმვორკის არქიტექტურაზე და პროექტის მოთხოვნებზე. მნიშვნელოვანია, რომ ტესტები იყოს დამოუკიდებელი ერთმანეთისგან და არ ზეგავლენდეს გარემოს მდგომარეობაზე.