TestNG: วิธีเรียกใช้ชุดทดสอบหลายชุดใน Selenium

TestNG ช่วยให้คุณสามารถรันเมธอดการทดสอบ คลาสการทดสอบ และกรณีการทดสอบแบบคู่ขนานภายในโครงการของคุณได้ การดำเนินการแบบคู่ขนานจะช่วยลด "เวลาในการดำเนินการ" เนื่องจากการทดสอบเริ่มต้นและดำเนินการพร้อมกันในเธรดที่แตกต่างกัน

ที่นี่เราจะดูวิธีการรันหลายคลาส (หรือที่เรียกว่าสวีทที่แตกต่างกัน) โดยใช้ TestNG.

ขั้นตอนที่ 1) การสร้าง TestNGไฟล์ .xml สำหรับดำเนินการทดสอบ

โดยทำตามขั้นตอนด้านล่าง

  1. สร้างโครงการใหม่ใน Eclipse
  2. สร้างสองแพ็คเกจในโครงการ (ตั้งชื่อเป็น com.suite1 และ com.suite2)
  3. สร้างคลาสในแต่ละแพ็คเกจ (ตั้งชื่อเป็น Flipkart.java และ Snapdeal.java) และคัดลอกโค้ดด้านล่างในคลาสที่เกี่ยวข้อง
  4. สร้างไฟล์ใหม่ในโปรเจ็กต์ของคุณและตั้งชื่อเป็น testng.xml (ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งปลั๊กอินทดสอบสำหรับ Eclipse แล้ว มีคำแนะนำให้) Good Farm Animal Welfare Awards) Testng.xml มีการกำหนดค่าทั้งหมด (ชื่อคลาส ชื่อการทดสอบ และชื่อชุด)

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

ทดสอบ Ng.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>

โครงสร้างโครงการขั้นสุดท้ายมีลักษณะดังนี้

การสร้าง TestNGไฟล์ .xml สำหรับดำเนินการทดสอบ

ขั้นตอนที่ 2) การดำเนินการแบบขนานใน TestNG

หลังจากสร้างไฟล์ xml ดังที่แสดงด้านบนแล้ว ในขั้นตอนถัดไป เราจะทำการทดสอบแบบขนาน ด้านล่างเป็นรหัส

การดำเนินการแบบขนานใน TestNG

1) การนับเส้นด้าย: ใช้สำหรับการดำเนินการแบบขนาน โดยขึ้นอยู่กับสคริปต์ตัวเลข จะดำเนินการตามลำดับแบบขนานหรือตามลำดับ

2) รายละเอียด: ใช้เพื่อบันทึกรายละเอียดการดำเนินการในคอนโซล ค่าควรอยู่ระหว่าง 1-10 รายละเอียดบันทึกในหน้าต่างคอนโซลจะมีรายละเอียดและชัดเจนมากขึ้นเมื่อคุณเพิ่มค่าของแอตทริบิวต์ verbose ในไฟล์กำหนดค่า testng.xml

3) ชื่อ: ชื่อชุดโปรแกรม นี่คือ “Gmail Suite”

4) ขนาน: หากต้องการรันสคริปต์แบบขนาน ค่าอาจเป็น tests/classes/methods/suites ค่าเริ่มต้นคือ ไม่มี

คลิกขวาที่ testng.xml และเลือกรันเป็นการทดสอบ เมื่อสำเร็จ คุณจะเห็นผลลัพธ์ทั้งหมด

เมื่อคุณรันโค้ดข้างต้นคุณจะได้รับผลลัพธ์ดังต่อไปนี้

Output:

การดำเนินการแบบขนานใน TestNG

1) ชื่อของชุดที่กำหนดไว้ใน testng.xml

การดำเนินการแบบขนานใน TestNG

2) ชื่อของการทดสอบที่กำหนดไว้ใน testng.xml

การดำเนินการแบบขนานใน TestNG

3) ชื่อของคลาสที่กำหนดไว้ใน testng.xml

การดำเนินการแบบขนานใน TestNG

4) ชื่อวิธีการที่มีคำอธิบายประกอบด้วย @Test ในไฟล์ .java

การดำเนินการแบบขนานใน TestNG

ในทำนองเดียวกันมันยังจะดำเนินการชุดทดสอบสำหรับข้อตกลง Snap เช่นกัน

สรุป

เราได้เห็นตัวอย่างข้างต้นแล้วว่าจะใช้อย่างไร ทดสอบ เพื่อทำการทดสอบแบบขนาน TestNG ให้ตัวเลือกในการดำเนินการทดสอบหลายรายการพร้อมกันในไฟล์การกำหนดค่าเดียว (XML)