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.

  1. Eclipse'de yeni bir proje oluşturun
  2. Projelerde iki paket oluşturun (bunları com.suite1 ve com.suite2 olarak adlandırın)
  3. 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
  4. 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,

Bir oluşturma TestNGTestin Yürütülmesi için .xml Dosyası

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.

Paralel Yürütme TestNG

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ı:

Paralel Yürütme TestNG

1) testng.xml'de verilen paketin adı

Paralel Yürütme TestNG

2) testng.xml'de verilen testin adı

Paralel Yürütme TestNG

3) testng.xml'de verilen sınıfın adı

Paralel Yürütme TestNG

4) .java dosyasında @Test ile açıklamalı yöntem adları

Paralel Yürütme TestNG

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.