İçeriğe geç

Parallel and Cross Browser Testing

🎯 1. Parallel ve Cross Browser Test Nedir?

Section titled “🎯 1. Parallel ve Cross Browser Test Nedir?”
  • Parallel Testing (Paralel Test): Testlerin aynı anda birden fazla thread veya ortamda çalıştırılmasıdır.
    → Zaman kazandırır, test süresini azaltır.

  • Cross Browser Testing: Testlerin Chrome, Firefox, Edge, Safari gibi farklı tarayıcılarda çalıştırılmasıdır.
    → Uygulamanın farklı tarayıcılarda aynı şekilde çalıştığından emin olunur.

💡 Cucumber + TestNG veya JUnit kombinasyonu ile paralel ve çoklu tarayıcı testleri yapılabilir.


src
├── main
│ └── java
│ └── utilities/
│ └── Driver.java
└── test
├── java
│ ├── runners/
│ │ ├── ChromeRunner.java
│ │ ├── FirefoxRunner.java
│ │ └── ParallelRunner.java
│ ├── stepdefinitions/
│ └── hooks/
└── resources/
└── features/
└── login.feature

package utilities;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Driver {
private static WebDriver driver;
public static WebDriver getDriver(String browser) {
if (driver == null) {
switch (browser.toLowerCase()) {
case "firefox":
driver = new FirefoxDriver();
break;
default:
driver = new ChromeDriver();
}
}
return driver;
}
public static void quitDriver() {
if (driver != null) {
driver.quit();
driver = null;
}
}
}

💡 Bu sınıf, dinamik olarak farklı tarayıcıları başlatmak için kullanılır.


package hooks;
import io.cucumber.java.Before;
import io.cucumber.java.After;
import org.openqa.selenium.WebDriver;
import utilities.Driver;
public class Hooks {
WebDriver driver;
@Before
public void setup() {
String browser = System.getProperty("browser", "chrome");
driver = Driver.getDriver(browser);
System.out.println("Tarayıcı başlatıldı: " + browser);
}
@After
public void tearDown() {
Driver.quitDriver();
System.out.println("Tarayıcı kapatıldı.");
}
}

💡 Komut satırından farklı tarayıcı seçimi yapılabilir:
mvn test -Dbrowser=firefox


🔹 5. Paralel Çalıştırma (TestNG Suite)

Section titled “🔹 5. Paralel Çalıştırma (TestNG Suite)”

TestNG kullanarak birden fazla Runner’ı paralel çalıştırabilirsiniz.

testng.xml

<suite name="Cucumber Suite" parallel="tests" thread-count="2">
<test name="Chrome Tests">
<parameter name="browser" value="chrome"/>
<classes>
<class name="runners.ChromeRunner"/>
</classes>
</test>
<test name="Firefox Tests">
<parameter name="browser" value="firefox"/>
<classes>
<class name="runners.FirefoxRunner"/>
</classes>
</test>
</suite>

💡 thread-count="2" → 2 test aynı anda çalışır.
@Parameters ile tarayıcı adı dinamik olarak alınabilir.


🔹 6. Tarayıcı Bazlı Runner Sınıfları

Section titled “🔹 6. Tarayıcı Bazlı Runner Sınıfları”
package runners;
import io.cucumber.testng.AbstractTestNGCucumberTests;
import io.cucumber.testng.CucumberOptions;
@CucumberOptions(
features = "src/test/resources/features",
glue = {"stepdefinitions", "hooks"},
plugin = {"pretty", "html:target/chrome-report.html"},
tags = "@smoke"
)
public class ChromeRunner extends AbstractTestNGCucumberTests { }
package runners;
import io.cucumber.testng.AbstractTestNGCucumberTests;
import io.cucumber.testng.CucumberOptions;
@CucumberOptions(
features = "src/test/resources/features",
glue = {"stepdefinitions", "hooks"},
plugin = {"pretty", "html:target/firefox-report.html"},
tags = "@smoke"
)
public class FirefoxRunner extends AbstractTestNGCucumberTests { }

Cucumber 6 ve sonrası sürümlerde paralel çalıştırma doğrudan desteklenir.

@CucumberOptions(
features = "src/test/resources/features",
glue = {"stepdefinitions"},
plugin = {"pretty", "html:target/parallel-report.html"},
monochrome = true
)
public class ParallelRunner extends AbstractTestNGCucumberTests {
@Override
@org.testng.annotations.DataProvider(parallel = true)
public Object[][] scenarios() {
return super.scenarios();
}
}

💡 parallel = true → Her senaryo ayrı thread’de çalıştırılır.


Terminal window
# Chrome testleri
mvn test -Dbrowser=chrome -Dcucumber.filter.tags="@smoke"
# Firefox testleri
mvn test -Dbrowser=firefox -Dcucumber.filter.tags="@regression"
# Paralel çalıştırma
mvn test -DsuiteXmlFile=testng.xml

🔹 9. Cross Browser Entegrasyon (Grid / Cloud)

Section titled “🔹 9. Cross Browser Entegrasyon (Grid / Cloud)”
  • Hub ve Node mimarisiyle testleri farklı makinelerde çalıştırabilirsiniz.
URL hubUrl = new URL("http://localhost:4444/wd/hub");
driver = new RemoteWebDriver(hubUrl, new ChromeOptions());
PlatformAçıklama
BrowserStackGerçek cihazlar ve tarayıcı kombinasyonları
Sauce LabsParalel ve gerçek tarayıcı desteği
LambdaTestCI/CD entegrasyonlu bulut test platformu

Cucumber paralel testlerde aşağıdaki raporlar önerilir:

PluginAçıklama
html:target/report.htmlBasit HTML raporu
json:target/cucumber.jsonJSON formatında veri
rerun:target/rerun.txtHatalı senaryolar listesi
extent:target/extent-report.htmlExtentReports (gelişmiş rapor)

✅ Tarayıcı adlarını sistem değişkeniyle yönetin
parallel = true ile çoklu thread desteğini aktif edin
✅ Her thread için bağımsız WebDriver örneği oluşturun
✅ Raporlar için target/ altına tarayıcı bazlı çıktı alın
✅ CI/CD (Jenkins, GitHub Actions) entegrasyonu ile otomatikleştirin


KavramAçıklama
Parallel TestingTestlerin aynı anda çoklu thread’de çalıştırılması
Cross Browser TestingFarklı tarayıcılarda testlerin yürütülmesi
HooksHer tarayıcı için setup/teardown yönetimi
TestNG SuiteParalel test yapılandırması
Cloud/GridDağıtık veya bulut test çalıştırma

💡 Not: Paralel ve Cross Browser test stratejileri, büyük ölçekli Cucumber projelerinde test süresini ciddi oranda azaltır.