TestNG: Cara Menjalankan Beberapa Test Suites di Selenium

TestNG memungkinkan Anda menjalankan metode pengujian, kelas pengujian, dan kasus pengujian secara paralel di dalam proyek Anda. Dengan melakukan eksekusi paralel, kita dapat mengurangi 'waktu eksekusi' karena pengujian dimulai dan dieksekusi secara bersamaan di berbagai thread.

Di sini kita akan melihat cara menjalankan beberapa kelas (alias rangkaian berbeda) menggunakan TestNG.

Langkah 1) Membuat a TestNGFile .xml untuk menjalankan tes

Untuk melakukannya ikuti langkah-langkah di bawah ini.

  1. Buat proyek baru di eclipse
  2. Buat dua paket di proyek (beri nama sebagai com.suite1 dan com.suite2)
  3. Buat kelas di setiap paket (beri nama Flipkart.java dan Snapdeal.java) dan salin kode di bawah ini di masing-masing kelas
  4. Buat file baru di proyek Anda dan beri nama testng.xml (Pastikan Anda telah menginstal plugin pengujian untuk eclipse, petunjuk tersedia di sini). Testng.xml berisi semua konfigurasi (nama kelas, nama uji, dan nama setelan.

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();
	}
}

UjiNg.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>

Struktur tugas akhir terlihat seperti di bawah ini,

Membuat TestNGFile .xml untuk Menjalankan Tes

Langkah 2) Eksekusi paralel di TestNG

Setelah membuat file xml seperti gambar di atas, pada langkah selanjutnya kita akan menjalankan tes paralel. Di bawah ini adalah kodenya.

Eksekusi Paralel di TestNG

1) jumlah benang: Ini digunakan untuk eksekusi paralel, berdasarkan skrip nomor. Ini akan dijalankan secara paralel atau berurutan.

2) bertele-tele: Digunakan untuk mencatat detail eksekusi di konsol. Nilainya harus 1-10. Detail log di jendela konsol akan menjadi lebih terperinci dan lebih jelas saat Anda meningkatkan nilai atribut verbose di berkas konfigurasi testng.xml.

3) nama: Nama suite. Ini adalah “Gmail Suite”

4) Paralel: Untuk menjalankan skrip secara paralel, nilainya dapat berupa tes/kelas/metode/suite. Nilai defaultnya adalah tak satupun

Klik kanan pada testng.xml dan pilih run as testing, setelah berhasil Anda akan melihat semua hasilnya

Ketika Anda mengeksekusi kode di atas, Anda akan mendapatkan keluaran berikut.

Keluaran:

Eksekusi Paralel di TestNG

1) nama suite yang diberikan di testng.xml

Eksekusi Paralel di TestNG

2) nama tes yang diberikan di testng.xml

Eksekusi Paralel di TestNG

3) nama kelas yang diberikan di testng.xml

Eksekusi Paralel di TestNG

4) nama metode dianotasi dengan @Test di file .java

Eksekusi Paralel di TestNG

Demikian pula, ia akan menjalankan rangkaian pengujian untuk snap deal juga.

Kesimpulan

Di sini kita telah melihat contoh di atas, cara menggunakannya Pengujian untuk menjalankan tes paralel. TestNG memberikan opsi untuk menjalankan beberapa pengujian secara paralel dalam satu file konfigurasi (XML).