Sobes.tech
Junior

Paralelleştirme nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Test bağlamında paralelleştirme, farklı ortamlar, tarayıcılar veya cihazlar üzerinde aynı anda birkaç test senaryosunun yürütülmesidir.

Ana amacı, toplam test seti yürütme süresini azaltmaktır.

Avantajlar:

  • Hızlandırma: Testler önemli ölçüde daha hızlı yürütülür, bu da daha sık tam regresyon setlerinin çalıştırılmasına olanak tanır.
  • Verimlilik: Mevcut kaynakların (CPU, RAM) en iyi şekilde kullanılması.
  • Esneklik: Uygulamayı aynı anda farklı konfigürasyonlarda test etme imkanı sağlar (örneğin, Windows'ta Chrome ve macOS'ta Firefox).

Dezavantajlar:

  • Yapılandırma karmaşıklığı: Test altyapısının doğru yapılandırılmasını gerektirir.
  • Bağımlılıkların yönetimi: Paralel yürütme sırasında istenmeyen yan etkilere yol açabilecek testler arasındaki bağımlılıkların önlenmesi gerekir.
  • Hata ayıklama: Paralel çalışan testleri hata ayıklamak daha zor olabilir.

Uygulama genellikle şu araçlar kullanılarak yapılır:

  • Paralel çalışmayı destekleyen test otomasyon araçları (örneğin, Selenium Grid, Playwright, Cypress).
  • Paralel yürütmeyi destekleyen test frameworkleri (örneğin, JUnit, TestNG, Pytest).
  • Birden fazla ajan üzerinde paralel test görevleri çalıştırabilen CI/CD sistemleri.

TestNG örneği:

// testng.xml
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="MySuite" parallel="tests" thread-count="2"> // <-- parallel="tests" ve 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 örneği:

# conftest.py
import pytest

def pytest_addoption(parser):
    parser.addoption("--browser", action="store", default="chrome", help="Testleri çalıştırmak için tarayıcı")

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

# test_example.py
def test_login(browser):
    print(f"{browser} üzerinde giriş testi") # Örnek loglama
    assert True

def test_product(browser):
    print(f"{browser} üzerinde ürün sayfası testi") # Örnek loglama
    assert True

# Paralel çalıştırma
# pytest -n 2 --dist=loadfile --browser=chrome test_example.py & pytest -n 2 --dist=loadfile --browser=firefox test_example.py
# veya pytest-xdist ile
# pytest -n auto --dist=loadfile test_example.py --browser=chrome --browser=firefox

Paralelizasyon stratejisi (metodlar, sınıflar, testler, oturumlar) test framework'ünün mimarisi ve proje gereksinimlerine bağlıdır. Testlerin birbirinden bağımsız olması ve ortam durumunu etkilememesi önemlidir.