TestNG: วิธีเรียกใช้ชุดทดสอบหลายชุดใน Selenium
TestNG ช่วยให้คุณสามารถรันเมธอดการทดสอบ คลาสการทดสอบ และกรณีการทดสอบแบบคู่ขนานภายในโครงการของคุณได้ การดำเนินการแบบคู่ขนานจะช่วยลด "เวลาในการดำเนินการ" เนื่องจากการทดสอบเริ่มต้นและดำเนินการพร้อมกันในเธรดที่แตกต่างกัน
ที่นี่เราจะดูวิธีการรันหลายคลาส (หรือที่เรียกว่าสวีทที่แตกต่างกัน) โดยใช้ TestNG.
ขั้นตอนที่ 1) การสร้าง TestNGไฟล์ .xml สำหรับดำเนินการทดสอบ
โดยทำตามขั้นตอนด้านล่าง
- สร้างโครงการใหม่ใน Eclipse
- สร้างสองแพ็คเกจในโครงการ (ตั้งชื่อเป็น com.suite1 และ com.suite2)
- สร้างคลาสในแต่ละแพ็คเกจ (ตั้งชื่อเป็น Flipkart.java และ Snapdeal.java) และคัดลอกโค้ดด้านล่างในคลาสที่เกี่ยวข้อง
- สร้างไฟล์ใหม่ในโปรเจ็กต์ของคุณและตั้งชื่อเป็น 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>
โครงสร้างโครงการขั้นสุดท้ายมีลักษณะดังนี้
ขั้นตอนที่ 2) การดำเนินการแบบขนานใน TestNG
หลังจากสร้างไฟล์ xml ดังที่แสดงด้านบนแล้ว ในขั้นตอนถัดไป เราจะทำการทดสอบแบบขนาน ด้านล่างเป็นรหัส
1) การนับเส้นด้าย: ใช้สำหรับการดำเนินการแบบขนาน โดยขึ้นอยู่กับสคริปต์ตัวเลข จะดำเนินการตามลำดับแบบขนานหรือตามลำดับ
2) รายละเอียด: ใช้เพื่อบันทึกรายละเอียดการดำเนินการในคอนโซล ค่าควรอยู่ระหว่าง 1-10 รายละเอียดบันทึกในหน้าต่างคอนโซลจะมีรายละเอียดและชัดเจนมากขึ้นเมื่อคุณเพิ่มค่าของแอตทริบิวต์ verbose ในไฟล์กำหนดค่า testng.xml
3) ชื่อ: ชื่อชุดโปรแกรม นี่คือ “Gmail Suite”
4) ขนาน: หากต้องการรันสคริปต์แบบขนาน ค่าอาจเป็น tests/classes/methods/suites ค่าเริ่มต้นคือ ไม่มี
คลิกขวาที่ testng.xml และเลือกรันเป็นการทดสอบ เมื่อสำเร็จ คุณจะเห็นผลลัพธ์ทั้งหมด
เมื่อคุณรันโค้ดข้างต้นคุณจะได้รับผลลัพธ์ดังต่อไปนี้
Output:
1) ชื่อของชุดที่กำหนดไว้ใน testng.xml
2) ชื่อของการทดสอบที่กำหนดไว้ใน testng.xml
3) ชื่อของคลาสที่กำหนดไว้ใน testng.xml
4) ชื่อวิธีการที่มีคำอธิบายประกอบด้วย @Test ในไฟล์ .java
ในทำนองเดียวกันมันยังจะดำเนินการชุดทดสอบสำหรับข้อตกลง Snap เช่นกัน
สรุป
เราได้เห็นตัวอย่างข้างต้นแล้วว่าจะใช้อย่างไร ทดสอบ เพื่อทำการทดสอบแบบขนาน TestNG ให้ตัวเลือกในการดำเนินการทดสอบหลายรายการพร้อมกันในไฟล์การกำหนดค่าเดียว (XML)