TestNG: Birden Çok Test Paketi Nasıl Çalıştırılır Selenium
TestNG projenizin içinde test yöntemlerini, test sınıflarını ve test vakalarını paralel olarak çalıştırmanızı sağlar. Paralel yürütme gerçekleştirerek, testler farklı iş parçacıklarında aynı anda başlatılıp yürütüldüğünden 'yürütme süresini' azaltabiliriz.
Burada birden fazla sınıfın (başka bir deyişle farklı süitlerin) nasıl çalıştırılacağını göreceğiz. TestNG.
Adım 1) Oluşturma TestNGTesti yürütmek için .xml dosyası
Bunu yapmak için aşağıdaki adımları izleyin.
- Eclipse'de yeni bir proje oluşturun
- Projelerde iki paket oluşturun (bunları com.suite1 ve com.suite2 olarak adlandırın)
- Her pakette bir sınıf oluşturun (bunları Flipkart.java ve Snapdeal.java olarak adlandırın) ve aşağıdaki kodu ilgili sınıflara kopyalayın
- Projenizde yeni bir dosya oluşturun ve adını testng.xml olarak belirleyin (Eclipse için test eklentisini yüklediğinizden emin olun, talimatlar mevcuttur) okuyun). Testng.xml tüm konfigürasyonları içerir (sınıf adları, test adları ve takım adları).
Flipkart.java
package com.suite1; import java.util.concurrent.TimeUnit; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class Flipkart{ WebDriver driver = new FirefoxDriver(); String username = ""; // Change to your username and passwrod String password = ""; // This method is to navigate flipkart URL @BeforeClass public void init() { driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.navigate().to("https://www.flipkart.com"); } // To log in flipkart @Test public void login() { driver.findElement(By.partialLinkText("Login")).click(); driver.findElement( By.cssSelector(".fk-input.login-form-input.user-email")) .sendKeys(username); driver.findElement( By.cssSelector(".fk-input.login-form-input.user-pwd")) .sendKeys(password); driver.findElement(By.cssSelector(".submit-btn.login-btn.btn")).click(); } // Search For product @Test public void searchAndSelectProduct() { driver.findElement(By.id("fk-top-search-box")).sendKeys("moto g3"); driver.findElement( By.cssSelector("search-bar-submit.fk-font-13.fk-font-bold")) .click(); // select the first item in the search results String css = ".gd-row.browse-grid-row:nth-of-type(1) > div:nth-child(1)>div>div:nth-child(2)>div>a"; driver.findElement(By.cssSelector(css)).click(); } @Test public void buyAndRemoveFromCart() { driver.findElement( By.cssSelector(".btn-express-checkout.btn-big.current")) .click(); driver.findElement(By.cssSelector(".remove.fk-inline-block")).click(); Alert a = driver.switchTo().alert(); a.accept(); } @Test public void logout() { Actions s = new Actions(driver); WebElement user = driver.findElement(By.partialLinkText(username)); s.moveToElement(user).build().perform(); driver.findElement(By.linkText("Logout")).click(); } @AfterClass public void quit() { driver.close(); } }
SnapDeal.java
package com.suite2; import java.util.concurrent.TimeUnit; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class SnapDeal { WebDriver driver = new FirefoxDriver(); String username = ""; // Change to your username and passwrod String password = ""; String pinCode = ""; // This method is to navigate snapdeal URL @BeforeClass public void init() { driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.navigate().to("https://www.snapdeal.com"); } // To log in flipkart @Test public void login() { driver.findElement(By.xpath("//button[text()='Login']")).click(); driver.switchTo().frame("loginIframe"); driver.findElement(By.cssSelector("div[onClick='getLoginForm()']")) .click(); driver.findElement(By.id("j_username")).sendKeys(username); driver.findElement(By.id("j_password_login")).sendKeys(password); driver.findElement(By.id("signin_submit")).click(); driver.switchTo().defaultContent(); } // Search For product @Test public void searchAndSelectProduct() { driver.findElement(By.cssSelector(".col-xs-20.searchformInput.keyword")) .sendKeys("iphone 6s"); driver.findElement(By.cssSelector(".sd-icon.sd-icon-search")).click(); // select the first item in the search results String css = ".product_grid_row:nth-of-type(1)>div:nth-child(1)"; driver.findElement(By.cssSelector(css)).click(); } @Test public void buyAndRemoveFromCart() { driver.findElement(By.xpath("//li[contains(text(),'Silver')]")).click(); driver.findElement(By.id("pincode-check")).sendKeys(pinCode); driver.findElement(By.id("buy-button-id")).click(); driver.findElement(By.cssSelector("i[title='Delete Item']")).click(); Alert a = driver.switchTo().alert(); a.accept(); } @Test public void logout() { driver.findElement(By.linkText("START SHOPPING NOW")).click(); Actions s = new Actions(driver); WebElement user = driver.findElement(By.cssSelector(".sd-icon.sd-icon-user")); s.moveToElement(user).build().perform(); driver.findElement(By.linkText("Logout")).click(); } @AfterClass public void quit() { driver.close(); } }
TestNg.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite thread-count="1" verbose="1" name="Gmail Suite" annotations="JDK" parallel="tests"> <test name="flipkart"> <classes> <class name="com.suite1.Flipkart"/> </classes> </test> <test name="Myntra"> <classes> <class name="com.suite2.SnapDeal"/> </classes> </test> </suite>
Nihai proje yapısı aşağıdaki gibi görünür,
Adım 2) Paralel yürütme TestNG
Yukarıda gösterildiği gibi xml dosyasını oluşturduktan sonra bir sonraki adımda paralel testi gerçekleştireceğiz. Kod aşağıdadır.
1) iş parçacığı sayımı: Bu, sayı komut dosyasına dayalı olarak paralel yürütme için kullanılır. Paralel veya sıralı sırayla yürütülecektir.
2) ayrıntılı: Konsoldaki yürütme ayrıntılarını günlüğe kaydetmek için kullanılır. Değer 1-10 olmalıdır. Konsol penceresindeki günlük ayrıntıları, testng.xml yapılandırma dosyasındaki ayrıntılı özniteliğin değerini artırdıkça daha ayrıntılı ve daha net hale gelecektir.
3) isim: Suite'in adı. İşte "Gmail Suite"
4) Paralel: Komut dosyalarını paralel çalıştırmak için değer testler/sınıflar/yöntemler/süitler olabilir. Varsayılan değer: Yok
Testng.xml dosyasına sağ tıklayın ve test olarak çalıştır'ı seçin, başarılı olduğunuzda tüm sonuçları göreceksiniz
Yukarıdaki kodu çalıştırdığınızda aşağıdaki çıktıyı alacaksınız.
Çıktı:
1) testng.xml'de verilen paketin adı
2) testng.xml'de verilen testin adı
3) testng.xml'de verilen sınıfın adı
4) .java dosyasında @Test ile açıklamalı yöntem adları
Aynı şekilde anlık anlaşma için de test paketini yürütecek.
Sonuç
Yukarıdaki örnekte nasıl kullanılacağını gördük. Test Paralel testi yürütmek için. TestNG tek bir yapılandırma dosyasında (XML) birden fazla testi paralel olarak yürütme seçeneği sunar.