Paralel Yürütme Selenium

⚡ Akıllı Özet

Oturumlar, paralel çalıştırma ve bağımlılıklar Selenium Her WebDriver örneği için benzersiz bir sessionId'yi birleştirin TestNG Bu paket kontrolleri, birçok tarayıcı penceresinin aynı anda bağımsız veya sıralı komut dosyaları çalıştırmasına ve regresyon döngüsünü daha hızlı tamamlamasına olanak tanır.

  • 🧩 Temel Prensip: Her yeni WebDriver örneği yeni bir sessionId oluşturur, bu nedenle iki sürücü aynı makinede asla komutları veya çerezleri paylaşmaz.
  • ⚙️ Uygulama: Parallel="methods" (veya tests, classes, instances) parametresine ek olarak thread-count değerini ayarlayın. TestNG Testng.xml dosyasındaki `suite` etiketi, yürütmenin dağıtılmasını sağlar.
  • 🧵 Paralellik: Eş zamanlı çalıştırmalar sırasında paylaşılan tarayıcı pencerelerinde yarış koşullarını önlemek için her @Test yöntemi için bir WebDriver kullanın.
  • 🔗 Bağımlılık: Bir metodun diğerinden önce gelmesi gerektiğinde, testng.xml dosyasındaki include etiketleri veya @Test ek açıklaması içinde dependsOnMethods ile testleri sıralayın.
  • 🤖 Yapay Zeka Kullanımı: Modern yapay zeka yardımcıları, en uygun iş parçacığı sayısını tahmin eder, güvenli paralel yöntemleri gruplandırır ve geçmiş çalışma verilerinden kararsız adayları ortaya çıkarır.

Paralel Yürütme Nasıl Çalıştırılır? Selenium

Komut dosyalarını paralel olarak çalıştırmayı anlamak için öncelikle nasıl yapılacağını bilmeniz gerekir. Selenium Her bir tarayıcıyı oturumlar aracılığıyla birbirinden ayırır.

Oturum İşleme'ye neden ihtiyacımız var?

Testin yürütülmesi sırasında, Selenium WebDriver, verilen komutları yürütmek için her adımda tarayıcıyla etkileşim kurmak zorundadır. Bu test çalışırken, başka bir kullanıcı aynı makinede ve aynı tür tarayıcıda ikinci bir komut dosyası başlatabilir.

Oturum Yönetimi

Böyle bir durumda, iki işlemin üst üste gelmemesini sağlayacak bir mekanizmaya ihtiyacımız var. Selenium Bu sorun oturum yönetimi yoluyla çözülür.

Oturum İşleme'ye nasıl ulaşılır? Selenium Web Sürücüsü?

Eğer incelerseniz Selenium WebDriver kaynak kodunda, adı geçen bir değişken bulacaksınız. sessionIdHer yeni WebDriver örneği oluşturduğunuzda, yeni bir örnek oluşturulur. sessionId oluşturulur ve ona eklenir. FirefoxChrome veya IE sürücüsü.

Oturum Yönetimini Gerçekleştirin Selenium Web Sürücüsü

Bundan sonraki her komut yalnızca o belirli tarayıcı oturumu içinde çalışır.

Oturum Yönetimini Gerçekleştirin Selenium Web Sürücüsü

Bu özellik WebDriver'a entegre edildiği için sessionId'yi manuel olarak atamanıza gerek yoktur.

Code Örnek: İki farklı WebDriver örneği için iki farklı oturum oluşturulur.

Oturum Yönetimi.java
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class SessionHandling {
    public static void main(String... strings) {
        // First session of WebDriver
        WebDriver driver = new FirefoxDriver();
        // Go to guru99 demo site
        driver.get("https://demo.guru99.com/V4/");

        // Second session of WebDriver
        WebDriver driver2 = new FirefoxDriver();
        // Go to guru99 demo site
        driver2.get("https://demo.guru99.com/V4/");
    }
}

Paralel Testler nasıl çalıştırılır? Selenium

Bazen aynı anda birden fazla test çalıştırmak isteyebilirsiniz, örneğin: tarayıcılar arası kontroller veya büyük sigara içme odaları.

Bu gibi durumlarda, parallel özniteliği TestNG Suite Tag işini hallediyor.

Paralel Testleri Çalıştırın Selenium

Suite etiketinin parallel özniteliği dört değer kabul eder:

öznitelik değerianlam
testleriTümü test senaryoları içeride etiketinin test yapmak XML dosyası paralel olarak çalıştırılıyor.
sınıflarBir içindeki tüm test durumları Java Sınıf paralel olarak çalıştırılıyor.
yöntemleri@Test ek açıklamasıyla işaretlenmiş tüm metotlar paralel olarak yürütülür.
durumlardaAynı örnek içindeki testler paralel olarak çalışırken, iki farklı örneğin iki yöntemi farklı iş parçacıklarında çalışır.

MKS thread-count Bu özellik, söz konusu yürütme için kaç iş parçacığının ayrılacağına karar verir. Bunu şununla birlikte kullanın: TestNG yapı hem de kurmak TestNG in Eclipse Çalıştırmadan önce. Tek bir makineden daha büyük ölçeklendirme için, aynı test paketini şu şekilde yönlendirin: Selenium Kılavuz 4 Dağıtılmış paralel yürütme için.

Örnek: Üç test senaryosu paralel olarak çalışır ve oturum açma verilerini doldurur. https://demo.guru99.com/.

Projenin tamamlanmış hali şöyle görünüyor:

Paralel Testleri Çalıştırın Selenium

testGuru99MultipleSession.java
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;

public class TestGuru99MultipleSession {

    @Test
    public void executeSessionOne() {
        // First session of WebDriver
        System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/V4/");
        // Find the user name text box and fill it
        driver.findElement(By.name("uid")).sendKeys("Driver 1");
    }

    @Test
    public void executeSessionTwo() {
        // Second session of WebDriver
        System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/V4/");
        driver.findElement(By.name("uid")).sendKeys("Driver 2");
    }

    @Test
    public void executeSessionThree() {
        // Third session of WebDriver
        System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/V4/");
        driver.findElement(By.name("uid")).sendKeys("Driver 3");
    }
}

TestNG.XML

testng.xml (paralel yöntemler)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestSuite" thread-count="3" parallel="methods">
  <test name="testGuru">
    <classes>
      <class name="TestGuru99MultipleSession"/>
    </classes>
  </test>
</suite>

Test Senaryosu sırası ve Bağımlılık

Sıralamayı ve bağımlılıkları ayarlayabilirsiniz. test durumu Yürütme. Diyelim ki iki test senaryonuz var, testGuru99TC1 hem de testGuru99TC2, ve sen istiyorsun testGuru99TC2 önce çalıştırmak testGuru99TC1. Kullan dependsOnMethods özellik (veya dependsOnGroups (Grup düzeyinde zincirleme için) bu sırayı düzeltmek için. Daha geniş kapsamlı otomasyon çerçevesi tasarım, karşılaştır JUnit vs TestNGve gözden geçirin findElement Bağımlı testlerinizin aynı konum belirleyicileri paylaşıp paylaşmadığını kontrol edin.

testng.xml (dependsOnMethods)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestSuite" thread-count="3" parallel="methods">
  <test name="testGuru">
    <classes>
      <class name="TestGuru99MultipleSession">
        <include name="testGuru99TC1" dependsOnMethods="testGuru99TC2"/>
        <include name="testGuru99TC2"/>
      </class>
    </classes>
  </test>
</suite>

MKS TestNG çalışma zamanı, şu adreste barındırılıyor: testng.orgBu bildirimleri iş parçacıklarını başlatmadan önce değerlendirir, böylece bağımlı yöntemler her zaman ön koşulları tamamlandıktan sonra başlar.

SSS

Oturum, her yeni WebDriver örneği oluşturulduğunda üretilen benzersiz bir sessionId'dir. Bu sürücüden gelen her komut, ilgili tarayıcı oturumuna yönlendirilir ve böylece bir test diğerinden izole edilir.

Suite etiketindeki parallel özniteliği testleri, sınıfları, metotları veya örnekleri kabul eder. TestNG Birden fazla iş parçacığı (iş parçacığı sayısı ile belirlenir) oluşturur ve seçilen birimi eş zamanlı olarak çalıştırarak toplam yürütme süresini kısaltır.

testng.xml dosyasındaki include etiketinin içinde dependsOnMethods özniteliğini kullanın veya kodda @Test(dependsOnMethods = “name”) ifadesini kullanın. TestNG Önce ön koşul testini çalıştırır ve başarısız olması durumunda bağımlı testi atlar.

Yapay zeka araçları, ilgili testleri kümelendirir, geçmiş çalışma sürelerinden en uygun iş parçacığı sayısını tahmin eder ve yavaş testlerin önce başlaması için test paketlerini yeniden sıralayarak derleme hattının toplam çalışma süresini kısaltır.

Evet. Yapay zeka, çağrı grafiklerini ve geçmiş hata kayıtlarını ayrıştırarak dependsOnMethods bağlantıları önerir, döngüsel bağımlılıkları işaretler ve güvenli paralel gruplar önerir; böylece testng.xml dosyasının manuel olarak güncellenmesi azalır.

Bu yazıyı şu şekilde özetleyin: