TestNG การกวดวิชา
⚡ สรุปอย่างชาญฉลาด
TestNG เป็นรุ่นต่อไป Java กรอบการทดสอบที่ทำงานร่วมกับ Selenium สำหรับการทำงานอัตโนมัติแบบมีโครงสร้าง การรายงานที่ครบถ้วน และการประมวลผลแบบขนาน บทช่วยสอนนี้ครอบคลุมคำอธิบายประกอบหลัก การตั้งค่าโปรเจ็กต์ใน Eclipseรวมถึงการเขียนกรณีทดสอบแรก การสร้างรายงาน HTML และการใช้งานพารามิเตอร์ขั้นสูง

ความหมายของ TestNG?
TestNG เป็นเฟรมเวิร์กสำหรับการทดสอบอัตโนมัติ โดยที่ “NG” ย่อมาจาก “Next Generation” (รุ่นต่อไป) TestNG ได้รับแรงบันดาลใจจาก JUnit และการใช้งาน Java การใช้คำอธิบายประกอบ (@) เพื่อควบคุมการไหลของการทดสอบ ช่วยแก้ปัญหาดังกล่าวได้ JUnitข้อจำกัดก่อนหน้านี้และได้รับการออกแบบมาเพื่อให้ การทดสอบแบบ end-to-end ง่ายดาย
ด้วยระบบเส้นทาง TestNG คุณสามารถสร้างรายงานที่ถูกต้องและดูได้ทันทีว่ามีการทดสอบผ่าน ล้มเหลว หรือถูกข้ามไปกี่รายการ นอกจากนี้ คุณยังสามารถเรียกใช้การทดสอบซ้ำเฉพาะกรณีที่ล้มเหลวได้อีกด้วย
ตัวอย่างเช่น:
- สมมติว่าคุณมีกรณีทดสอบห้ากรณี แต่ละกรณีเขียนด้วยเมธอดของตัวเอง โดยไม่มี TestNGผ่านสามครั้ง ครั้งที่สี่ล้มเหลว หลังจากแก้ไขครั้งที่สี่แล้ว คุณต้องการรันซ้ำเฉพาะครั้งที่สี่เท่านั้น เนื่องจากสามครั้งแรกผ่านแล้ว การทำเช่นนี้ด้วยโค้ดเมธอด main() ธรรมดานั้นทำได้ยาก
- TestNG ให้
testng-failed.xmlแฟ้มในtest-outputโฟลเดอร์ การเรียกใช้ไฟล์ XML นั้นจะดำเนินการซ้ำเฉพาะกรณีที่ล้มเหลวเท่านั้น
นอกจากนั้น คุณจะได้เรียนรู้ข้อดีของ... TestNGวิธีการเขียนเมธอดทดสอบด้วยคำอธิบายประกอบ @Test และวิธีการแปลงคลาสของคุณให้เป็นชุดทดสอบที่สามารถทำงานได้จาก... Eclipse หรือผ่านทางบรรทัดคำสั่ง
ทำไมต้องใช้ TestNG สีสดสวย Selenium?
โดยค่าเริ่มต้น Selenium การทดสอบไม่ได้แสดงผลลัพธ์ที่จัดรูปแบบอย่างสวยงาม ด้วย TestNG เมื่อเชื่อมต่อแล้ว โปรแกรมทดสอบจะส่งรายงานที่มีโครงสร้างซึ่งคุณสามารถแชร์กับทีมได้
ส่วนมาก Selenium ผู้ใช้ชอบ TestNG เกินกว่า JUnit เนื่องจากมีฟังก์ชันการใช้งานที่หลากหลายกว่า ฟังก์ชันหลักสำหรับ Selenium คือ:
- รายงานที่แสดงจำนวนกรณีทดสอบที่ดำเนินการ ผ่าน ล้มเหลว และข้ามไป
- กลุ่มง่ายๆping ของกรณีทดสอบผ่านทาง
testng.xmlไฟล์ที่มีลำดับความสำคัญในการดำเนินการ - ทำการทดสอบซ้ำหลายครั้งโดยไม่ต้องใช้ลูปโดยใช้
invocationCount. - ทำการทดสอบหลายครั้งบนเบราว์เซอร์หลายตัว — การทดสอบข้ามแพลตฟอร์มการทดสอบเบราว์เซอร์ สนับสนุน
- การทำงานร่วมกับ Maven เป็นไปอย่างราบรื่น Jenkinsและเครื่องมือ CI อื่นๆ
- Readable คำอธิบายประกอบ — ตัวอย่างเช่น @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
- Selenium WebDriver ไม่มีระบบรายงานในตัว TestNG เติมเต็มช่องว่างนั้นด้วยรายงาน HTML ที่เรียบร้อยเหมือนตัวอย่างด้านล่าง
- TestNG ช่วยลดความซับซ้อนของโค้ดทดสอบ คุณไม่จำเป็นต้องมีเมธอด main แบบ static อีกต่อไปแล้ว annotation จะกำหนดว่าอะไรจะทำงานและเมื่อไหร่
- ข้อผิดพลาดที่ไม่ได้ถูกจัดการจะได้รับการจัดการอย่างราบรื่นโดย TestNGขั้นตอนเหล่านี้จะถูกรายงานว่าเป็นขั้นตอนที่ล้มเหลวโดยไม่ทำให้การทำงานทั้งหมดหยุดลง
ข้อดีของการ TestNG เกินกว่า JUnit
TestNG มีข้อดีหลักๆ สามประการเหนือกว่า JUnit:
- คำอธิบายประกอบนั้นเข้าใจและใช้งานได้ง่ายกว่า
- สามารถจัดกลุ่มและจัดลำดับความสำคัญของกรณีทดสอบได้โดยใช้ความพยายามน้อยลง
- ระบบรองรับการรันการทดสอบแบบขนานได้ทันทีโดยไม่ต้องตั้งค่าเพิ่มเติม
คำอธิบายประกอบคืออะไรใน TestNG?
คำอธิบายประกอบใน TestNG คือบรรทัดโค้ดที่วางไว้เหนือเมธอดเพื่อควบคุมวิธีการทำงานของเมธอดนั้น โดยจะเริ่มต้นด้วยสัญลักษณ์ @ เสมอ ตัวอย่างง่ายๆ แสดงอยู่ด้านล่าง
คำอธิบายประกอบจะกล่าวถึงโดยละเอียดในส่วนถัดไป “คำอธิบายประกอบที่ใช้ใน TestNG" ตัวอย่างข้างต้นเป็นเพียงการกำหนดความคาดหวังเท่านั้น ซึ่งจะกล่าวถึงในส่วนต่อไปของบทเรียนนี้ TestNG คำอธิบายประกอบนั้นเขียนโค้ดและอ่านง่ายกว่า JUnit ค่าเทียบเท่า และค่าเหล่านี้มีความสำคัญอย่างยิ่งเมื่อทำการทดสอบ Selenium ตะแกรง ในกรณีที่การประมวลผลแบบขนานมีความสำคัญ
วิธีเขียนกรณีทดสอบในรูปแบบ TestNG
การเขียน TestNG กรณีทดสอบประกอบด้วยสามขั้นตอน:
- เขียนตรรกะทางธุรกิจของคุณและวางลงไป TestNG คำอธิบายประกอบอยู่เหนือแต่ละวิธี
- เพิ่มข้อมูลเมตา เช่น ชื่อคลาส ชื่อกลุ่ม และชื่อแพ็กเกจ
- เรียกใช้ TestNG เรียกใช้คลาสจาก IDE หรือจากบรรทัดคำสั่ง
สร้างกรณีทดสอบโดยใช้ TestNG คำอธิบายประกอบ
ต่อไปนี้เราจะสร้างกรณีทดสอบแรกโดยใช้ TestNG คำอธิบายประกอบใน Seleniumก่อนเขียนข้อสอบ ให้ตั้งค่าใหม่ TestNG โครงการใน Eclipse และเรียกมันว่า ชื่อจริงTestNGโครงการ.
การตั้งค่าใหม่ TestNG โครงการ
ขั้นตอน 1) คลิก ไฟล์ > สร้างใหม่ > Java โครงการ.
ขั้นตอน 2) เข้าสู่ ชื่อจริงTestNGโครงการ ระบุชื่อโปรเจ็กต์แล้วคลิก ถัดไป.
ขั้นตอน 3) นำเข้า TestNG ห้องสมุด คลิกที่นี่ ห้องสมุด จากนั้น เพิ่มห้องสมุด….
ขั้นตอน 4) ตัว Vortex Indicator ได้ถูกนำเสนอลงในนิตยสาร เพิ่มไลบรารี โต้ตอบเลือก TestNG และคลิก ถัดไป.
ขั้นตอน 5) คลิก เสร็จสิ้น.
TestNG ตอนนี้ควรปรากฏในรายการห้องสมุดแล้ว
ขั้นตอน 6) เพิ่มไฟล์ JAR ที่มีข้อมูลต่อไปนี้ Selenium API เหล่านี้มาจาก Java ดาวน์โหลดไดรเวอร์ไคลเอ็นต์จาก selenium.dev/downloads.
ไปยังโฟลเดอร์ที่... Selenium ไฟล์ JAR ถูกจัดเก็บไว้
หลังจากเพิ่มไฟล์ JAR ภายนอกแล้ว หน้าจอควรมีลักษณะดังนี้
ขั้นตอน 7) คลิก เสร็จสิ้น. ใหม่ ชื่อจริงTestNGโครงการ ปรากฏใน Package Explorer
วิธีการสร้างใหม่ TestNG ไฟล์ทดสอบ
เมื่อโปรเจ็กต์พร้อมแล้ว ให้สร้างโปรเจ็กต์ใหม่ TestNG ไฟล์
ขั้นตอน 1) คลิกขวาที่ src โฟลเดอร์และเลือก ใหม่ > อื่นๆ….
ขั้นตอน 2) ขยาย TestNG โฟลเดอร์ เลือก TestNG ชั้นและคลิก ถัดไป.
ขั้นตอน 3) ป้อนค่าที่แสดงด้านล่างแล้วคลิก เสร็จสิ้นส่วน Java ไฟล์ชื่อ ชื่อจริงTestNGเนื้อไม่มีมัน.
ขั้นตอน 4) Eclipse สร้าง TestNG แม่แบบแสดงอยู่ด้านล่าง
การเขียนโค้ดครั้งแรกของคุณ TestNG กรณีทดสอบ
สร้างสิ่งแรก กรณีทดสอบ ที่ตรวจสอบความถูกต้องของกรรมสิทธิ์ Mercury หน้าแรกของทัวร์
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@Test
public void verifyHomepageTitle() {
System.out.println("launching firefox browser");
// Selenium 4 ships Selenium Manager, so the driver path is no longer required.
driver = new FirefoxDriver();
driver.get(baseUrl);
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
driver.quit();
}
}
สิ่งที่ควรสังเกต:
- TestNG ไม่จำเป็นต้องมี
main()วิธี - เมธอดไม่จำเป็นต้องเป็นแบบสแตติกเสมอไป
- การขอ @ทดสอบ เครื่องหมายคำอธิบาย
verifyHomepageTitle()เพื่อเป็นกรณีทดสอบ - คำอธิบายประกอบจะอยู่ใน
org.testng.annotations.*บรรจุภัณฑ์ - การขอ ยืนยัน ชั้นเรียนจาก
org.testng.Assertตรวจสอบความถูกต้องของไดรฟ์
คุณสามารถมีคำอธิบายประกอบ @Test หลายรายการในที่เดียวได้ TestNG ไฟล์นั้น เราจะกล่าวถึงเรื่องนั้นใน... “คำอธิบายประกอบที่ใช้ใน TestNG" มาตรา.
เรียกใช้การทดสอบ
คลิกขวาที่ไฟล์แล้วเลือกเรียกใช้เป็น... TestNG ทดสอบ Eclipse จะแสดงผลลัพธ์สองอย่าง คือ ผลลัพธ์ที่เป็นข้อความในหน้าต่าง Console และผลลัพธ์ที่เป็นกราฟิกในหน้าต่างอื่น TestNG หน้าต่างผลลัพธ์
การตรวจสอบรายงานที่สร้างโดย TestNG
หน้าต่าง Console จะแสดงสรุปข้อมูลในรูปแบบข้อความ ในขณะที่ TestNG หน้าต่างแสดงผลลัพธ์จะแสดงผลในรูปแบบกราฟิก
การสร้างรายงาน HTML
TestNG นอกจากนี้ยังสามารถสร้างรายงาน HTML แบบเต็มรูปแบบได้อีกด้วย
ขั้นตอน 1) หลังจากวิ่ง ชื่อจริงTestNGเนื้อไม่มีมันคลิกขวาที่โปรเจ็กต์แล้วเลือก รีเฟรช.
ขั้นตอน 2) A เอาต์พุตทดสอบ โฟลเดอร์จะปรากฏขึ้น ขยายโฟลเดอร์นั้นแล้วค้นหา index.html — รายงาน HTML สำหรับการประมวลผลครั้งล่าสุด
ขั้นตอน 3) Double-คลิก index.html เพื่อเปิดมันจากด้านใน Eclipseเบราว์เซอร์ของคุณ กด F5 เพื่อรีเฟรชหลังจากใช้งานครั้งต่อไป
คำอธิบายประกอบที่ใช้ใน TestNG
คุณได้เห็นคำอธิบายประกอบ @Test ไปแล้ว ส่วนที่เหลือของหัวข้อนี้จะกล่าวถึงคำอธิบายประกอบขั้นสูงที่มีประโยชน์ที่สุด
กรณีทดสอบหลายกรณี
โสด TestNG ไฟล์หนึ่งสามารถมีคำอธิบายประกอบ @Test ได้หลายรายการ โดยค่าเริ่มต้น เมธอดที่ติดคำอธิบายประกอบ @Test จะทำงานตามลำดับตัวอักษร ในโค้ดด้านล่าง เมธอดต่างๆ จะทำงานตามลำดับตัวอักษร c_test, a_testและ b_test ดำเนินการตามลำดับตัวอักษรโดยไม่คำนึงถึงลำดับของแหล่งที่มา
รันโค้ดและเปิด index.html. คลิก มุมมองตามลำดับเวลา.
พารามิเตอร์
หากต้องการเปลี่ยนแปลงลำดับเริ่มต้น ให้ใช้ priority พารามิเตอร์. พารามิเตอร์คือคำหลักที่ใช้ปรับเปลี่ยนพฤติกรรมของคำอธิบายประกอบ
- กำหนดค่าด้วย
=. - ครอบพารามิเตอร์ด้วยวงเล็บที่วางไว้ทันทีหลังคำอธิบายประกอบ ดังแสดงด้านล่าง
TestNG ดำเนินการตามคำอธิบายประกอบ @Test จากค่าลำดับความสำคัญต่ำสุดไปยังค่าลำดับความสำคัญสูงสุด โดยหมายเลขลำดับความสำคัญไม่จำเป็นต้องต่อเนื่องกัน
รายงาน HTML ยืนยันว่าวิธีการต่างๆ ถูกดำเนินการตามลำดับความสำคัญจากน้อยไปมาก
พารามิเตอร์หลายตัว
นอกเหนือจาก priority@Test ยอมรับ alwaysRun พารามิเตอร์ (จริงหรือเท็จ) หากต้องการใช้พารามิเตอร์สองตัวขึ้นไปในคำอธิบายประกอบเดียว ให้คั่นด้วยเครื่องหมายจุลภาค:
@Test(priority = 0, alwaysRun = true)
@BeforeTest และ @AfterTest
| @ก่อนสอบ | เมธอดภายใต้คำอธิบายประกอบนี้ทำงาน ก่อนกรณีทดสอบแรกใน TestNG ไฟล์. |
| @หลังทดสอบ | เมธอดภายใต้คำอธิบายประกอบนี้ทำงาน หลังจากกรณีทดสอบทั้งหมดใน TestNG ไฟล์เสร็จสิ้น. |
พิจารณารหัสด้านล่าง
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@AfterTest
public void terminateBrowser() {
driver.quit();
}
}
จากตารางและโค้ด เราสามารถคาดการณ์ลำดับได้ดังนี้:
- อันดับที่ 1 —
launchBrowser() - ที่ 2 —
verifyHomepageTitle() - ที่ 3 —
terminateBrowser()
ตำแหน่งของบล็อกคำอธิบายประกอบในไฟล์ต้นฉบับไม่มีผลต่อลำดับการทำงานของบล็อกเหล่านั้น ลองสลับลำดับวิธีการดังที่แสดงด้านล่าง
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@AfterTest // Jumbled
public void terminateBrowser() {
driver.quit();
}
@BeforeTest // Jumbled
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test // Jumbled
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
}
รันโค้ดและตรวจสอบผลลัพธ์
@BeforeMethod และ @AfterMethod
| @ก่อนวิธีการ | เมธอดภายใต้คำอธิบายประกอบนี้ทำงาน ก่อนวิธีการทดสอบแต่ละวิธี. |
| @AfterMethod | เมธอดภายใต้คำอธิบายประกอบนี้ทำงาน หลังจากวิธีการทดสอบแต่ละวิธี. |
In Mercury สมมติว่าเราต้องการตรวจสอบชื่อของสองหน้าเป้าหมายที่เข้าถึงได้จากหน้าแรก
ขั้นตอนการทดสอบมีดังนี้:
- เปิดหน้าแรกและตรวจสอบชื่อเรื่อง
- คลิกลงทะเบียนและตรวจสอบชื่อของหน้าเป้าหมาย
- กลับไปที่หน้าแรกและตรวจสอบชื่อเรื่องอีกครั้ง
- คลิก SUPPORT และตรวจสอบชื่อของเพจเป้าหมาย
- กลับไปที่หน้าแรกและตรวจสอบชื่อเรื่องอีกครั้ง
โค้ดด้านล่างแสดงให้เห็นว่า @BeforeMethod และ @AfterMethod จัดการกับขั้นตอนที่ทำซ้ำอย่างไร
package firsttestngpackage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
public String expected = null;
public String actual = null;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@BeforeMethod
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@Test(priority = 0)
public void register() {
driver.findElement(By.linkText("REGISTER")).click();
expected = "Register: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@Test(priority = 1)
public void support() {
driver.findElement(By.linkText("SUPPORT")).click();
expected = "Under Construction: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@AfterMethod
public void goBackToHomepage() {
driver.findElement(By.linkText("Home")).click();
}
@AfterTest
public void terminateBrowser() {
driver.quit();
}
}
หลังจากทำการทดสอบเสร็จสิ้น TestNG รายงานลำดับดังต่อไปนี้
โดยสรุป: ใส่ขั้นตอนการตั้งค่าไว้ด้านใน @ก่อนวิธีการ และการล้างข้อมูลหรือการรีเซ็ตการนำทางภายใน @AfterMethod ดังนั้นแต่ละกรณีทดสอบจึงเริ่มต้นและสิ้นสุดในสถานะที่ทราบได้
สรุปสาระสำคัญของ TestNG คำอธิบายประกอบ
- @BeforeSuite: รันก่อนการทดสอบทั้งหมดในชุดทดสอบ
- @AfterSuite: รันหลังจากทำการทดสอบทั้งหมดในชุดทดสอบเสร็จสิ้น
- @BeforeTest: ทำงานก่อนเมธอดทดสอบใดๆ ที่อยู่ในคลาสภายใน แท็ก
- @AfterTest: รันหลังจากเมธอดทดสอบทั้งหมดที่อยู่ในคลาสภายใน แท็ก
- @BeforeGroups: ทำงานก่อนวิธีการทดสอบแรกที่อยู่ในกลุ่มใดกลุ่มหนึ่งที่ระบุไว้เล็กน้อย
- @AfterGroups: จะทำงานหลังจากวิธีการทดสอบสุดท้ายที่อยู่ในกลุ่มใดกลุ่มหนึ่งที่ระบุไว้ไม่นาน
- @ก่อนเรียน: รันก่อนเมธอดทดสอบแรกในคลาสปัจจุบัน
- @AfterClass: รันหลังจากเมธอดทดสอบทั้งหมดในคลาสปัจจุบันเสร็จสิ้น
- @BeforeMethod: ดำเนินการก่อนวิธีการทดสอบแต่ละวิธี
- @AfterMethod: ดำเนินการหลังจากวิธีการทดสอบแต่ละวิธี
- @ทดสอบ: กำหนดให้เมธอดดังกล่าวเป็นกรณีทดสอบ

































