TestNG - คู่มือฉบับย่อ

การทดสอบเป็นกระบวนการตรวจสอบการทำงานของแอปพลิเคชันเพื่อให้แน่ใจว่าทำงานได้ตามข้อกำหนด การทดสอบหน่วยเป็นภาพรวมในระดับผู้พัฒนาซึ่งมีการใช้มาตรการที่เพียงพอเพื่อทดสอบเอนทิตี (คลาสหรือวิธีการ) เดียวเพื่อให้แน่ใจว่าผลิตภัณฑ์ขั้นสุดท้ายตรงตามข้อกำหนด

JUnit ได้ผลักดันให้นักพัฒนาเข้าใจถึงประโยชน์ของการทดสอบโดยเฉพาะการทดสอบหน่วยเมื่อเปรียบเทียบกับกรอบการทดสอบอื่น ๆ ด้วยการใช้สถาปัตยกรรมที่ค่อนข้างเรียบง่ายใช้งานได้จริงและเข้มงวด JUnit จึงสามารถ "แพร่เชื้อ" ให้กับนักพัฒนาจำนวนมากได้ ลองดูบทช่วยสอนของเราเกี่ยวกับ JUnit เพื่อให้เข้าใจถึงคุณสมบัติต่างๆเป็นอย่างดี ในขณะเดียวกัน JUnit ก็มีข้อบกพร่องบางประการเช่นกันซึ่งแสดงไว้ด้านล่าง -

  • เริ่มต้นออกแบบมาเพื่อเปิดใช้งานการทดสอบหน่วยเท่านั้นตอนนี้ใช้สำหรับการทดสอบทุกประเภท

  • ไม่สามารถทำการทดสอบการพึ่งพาได้

  • การควบคุมการกำหนดค่าไม่ดี (setUp / tearDown)

  • ล่วงล้ำ (บังคับให้คุณขยายชั้นเรียนและตั้งชื่อวิธีการของคุณด้วยวิธีใดวิธีหนึ่ง)

  • รูปแบบการเขียนโปรแกรมแบบคงที่ (บังคับให้คุณคอมไพล์ใหม่โดยไม่จำเป็น)

  • การจัดการชุดทดสอบต่างๆในโครงการที่ซับซ้อนอาจเป็นเรื่องยุ่งยากมาก

TestNG คืออะไร?

คำจำกัดความของ TestNG ตามเอกสารมีดังนี้ -

TestNG เป็นกรอบการทดสอบที่ได้รับแรงบันดาลใจจาก JUnit และ NUnit แต่มีฟังก์ชันใหม่บางอย่างที่ทำให้มีประสิทธิภาพและใช้งานง่าย

TestNG เป็นกรอบการทดสอบอัตโนมัติแบบโอเพนซอร์ส ที่ไหนNG หมายถึง Nต่อGeneration. TestNG คล้ายกับ JUnit (โดยเฉพาะ JUnit 4) แต่ไม่ใช่ส่วนขยาย JUnit ได้รับแรงบันดาลใจจาก JUnit ได้รับการออกแบบมาให้ดีกว่า JUnit โดยเฉพาะอย่างยิ่งเมื่อทดสอบคลาสรวม ผู้สร้าง TestNG เป็นเซดริก Beust

การขจัดข้อ จำกัด ส่วนใหญ่ของเฟรมเวิร์กรุ่นเก่า TestNG ช่วยให้นักพัฒนาสามารถเขียนการทดสอบที่ยืดหยุ่นและมีประสิทธิภาพมากขึ้น เนื่องจากมันยืมอย่างมากจาก Java Annotations (มาพร้อมกับ JDK 5.0) เพื่อกำหนดการทดสอบจึงสามารถแสดงวิธีใช้คุณลักษณะใหม่ของภาษา Java ในสภาพแวดล้อมการใช้งานจริง

คุณสมบัติ TestNG

  • รองรับคำอธิบายประกอบ

  • TestNG ใช้คุณสมบัติ Java และ OO เพิ่มเติม

  • รองรับการทดสอบคลาสรวม (เช่นโดยค่าเริ่มต้นไม่จำเป็นต้องสร้างอินสแตนซ์คลาสทดสอบใหม่สำหรับทุกวิธีการทดสอบ)

  • แยกรหัสทดสอบเวลาคอมไพล์ออกจากการกำหนดค่ารันไทม์ / ข้อมูลข้อมูล

  • การกำหนดค่ารันไทม์ที่ยืดหยุ่น

  • เปิดตัว 'กลุ่มทดสอบ' เมื่อคุณรวบรวมการทดสอบของคุณแล้วคุณสามารถขอให้ TestNG เรียกใช้การทดสอบ "ส่วนหน้า" ทั้งหมดหรือการทดสอบ "เร็ว" "ช้า" "ฐานข้อมูล" ฯลฯ

  • รองรับวิธีการทดสอบขึ้นอยู่กับการทดสอบแบบขนานการทดสอบโหลดและความล้มเหลวบางส่วน

  • API ปลั๊กอินที่ยืดหยุ่น

  • รองรับการทดสอบแบบมัลติเธรด

TestNG เป็นเฟรมเวิร์กสำหรับ Java ดังนั้นข้อกำหนดแรกสุดคือต้องติดตั้ง JDK ในเครื่องของคุณ

ความต้องการของระบบ

JDK 1.5 ขึ้นไป
หน่วยความจำ ไม่มีข้อกำหนดขั้นต่ำ
พื้นที่ดิสก์ ไม่มีข้อกำหนดขั้นต่ำ
ระบบปฏิบัติการ ไม่มีข้อกำหนดขั้นต่ำ

ขั้นตอนที่ 1 - ตรวจสอบการติดตั้ง Java ในเครื่องของคุณ

เปิดคอนโซลและดำเนินการคำสั่ง java ตามระบบปฏิบัติการที่คุณติดตั้งบนระบบของคุณ

ระบบปฏิบัติการ งาน คำสั่ง
Windows เปิด Command Console c: \> java - เวอร์ชัน
ลินุกซ์ เปิด Command Terminal $ java - รุ่น
Mac เปิด Terminal เครื่อง: ~ joseph $ java -version

มาตรวจสอบผลลัพธ์สำหรับระบบปฏิบัติการทั้งหมด -

ระบบปฏิบัติการ เอาต์พุต
Windows

เวอร์ชัน java "1.7.0_25"

Java (TM) SE Runtime Environment (บิวด์ 1.7.0_25-b15)

Java HotSpot (TM) 64-Bit Server VM (สร้าง 23.25-b01 โหมดผสม)

ลินุกซ์

เวอร์ชัน java "1.7.0_25"

Java (TM) SE Runtime Environment (บิวด์ 1.7.0_25-b15)

Java HotSpot (TM) 64-Bit Server VM (สร้าง 23.25-b01 โหมดผสม)

Mac

เวอร์ชัน java "1.7.0_25"

Java (TM) SE Runtime Environment (บิวด์ 1.7.0_25-b15)

Java HotSpot (TM) 64-Bit Server VM (สร้าง 23.25-b01 โหมดผสม)

หากคุณไม่มี Java ให้ติดตั้ง Java Software Development Kit (SDK) จาก https://www.oracle.com/technetwork/java/javase/downloads/index.html. เราถือว่า Java 1.7.0_25 เป็นเวอร์ชันที่ติดตั้งสำหรับบทช่วยสอนนี้

ขั้นตอนที่ 2: ตั้งค่าสภาพแวดล้อม JAVA

ตั้งค่า JAVA_HOMEตัวแปรสภาพแวดล้อมเพื่อชี้ไปยังตำแหน่งไดเร็กทอรีฐานที่ Java ติดตั้งบนเครื่องของคุณ ตัวอย่างเช่น,

ระบบปฏิบัติการ เอาต์พุต
Windows ตั้งค่าตัวแปรสภาพแวดล้อม JAVA_HOME เป็น C: \ Program Files \ Java \ jdk1.7.0_25
ลินุกซ์ ส่งออก JAVA_HOME = / usr / local / java-current
Mac ส่งออก JAVA_HOME = / Library / Java / Home

ผนวกตำแหน่งคอมไพเลอร์ Java เข้ากับ System Path

ระบบปฏิบัติการ เอาต์พุต
Windows ต่อท้ายสตริง C: \ Program Files \ Java \ jdk1.7.0_25 \ bin ที่ส่วนท้ายของตัวแปรระบบ Path
ลินุกซ์ ส่งออกเส้นทาง =$PATH:$JAVA_HOME / bin /
Mac ไม่จำเป็นต้องใช้

ตรวจสอบการติดตั้ง Java โดยใช้คำสั่ง java -version ตามที่อธิบายไว้ข้างต้น

ขั้นตอนที่ 3: ดาวน์โหลด TestNG Archive

ดาวน์โหลดไฟล์ jar TestNG เวอร์ชันล่าสุดจาก http://www.testng.org. ในขณะที่เขียนบทช่วยสอนนี้เราได้ดาวน์โหลดtestng-6.8.jarและคัดลอกลงในโฟลเดอร์ C: \> TestNG

ระบบปฏิบัติการ ชื่อที่เก็บถาวร
Windows testng-6.8.jar
ลินุกซ์ testng-6.8.jar
Mac testng-6.8.jar

ขั้นตอนที่ 4: ตั้งค่าสภาพแวดล้อม TestNG

ตั้งค่า TESTNG_HOMEตัวแปรสภาพแวดล้อมเพื่อชี้ไปยังตำแหน่งไดเร็กทอรีฐานโดยที่โถ TestNG ถูกเก็บไว้ในเครื่องของคุณ ตารางต่อไปนี้แสดงวิธีตั้งค่าตัวแปรสภาพแวดล้อมใน Windows, Linux และ Mac โดยสมมติว่าเราเก็บ testng-6.8.jar ไว้ที่ตำแหน่ง C: \> TestNG

ระบบปฏิบัติการ คำอธิบาย
Windows ตั้งค่าตัวแปรสภาพแวดล้อม TESTNG_HOME เป็น C: \ TESTNG
ลินุกซ์ ส่งออก TESTNG_HOME = / usr / local / TESTNG
Mac ส่งออก TESTNG_HOME = / Library / TESTNG

ขั้นตอนที่ 5: ตั้งค่าตัวแปร CLASSPATH

ตั้งค่า CLASSPATH ตัวแปรสภาพแวดล้อมเพื่อชี้ไปที่ตำแหน่งโถ TestNG

ระบบปฏิบัติการ คำอธิบาย
Windows ตั้งค่าตัวแปรสภาพแวดล้อม CLASSPATH เป็น% CLASSPATH%;% TESTNG_HOME% \ testng-6.8.jar
ลินุกซ์ ส่งออก CLASSPATH =$CLASSPATH:$TESTNG_HOME / testng-6.8.jar
Mac ส่งออก CLASSPATH =$CLASSPATH:$TESTNG_HOME / testng-6.8.jar

ขั้นตอนที่ 6: ทดสอบการตั้งค่า TestNG

สร้างไฟล์คลาส java ชื่อ TestNGSimpleTest ที่ C:\>TestNG_WORKSPACE.

import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;

public class TestNGSimpleTest {
   @Test
   public void testAdd() {
      String str = "TestNG is working fine";
      AssertEquals("TestNG is working fine", str);
   }
}

TestNG สามารถเรียกใช้งานได้หลายวิธี -

  • ด้วยไฟล์ testng.xml
  • ด้วย ANT.
  • จากบรรทัดคำสั่ง

ให้เราเรียกใช้โดยใช้ไฟล์ testng.xml สร้างไฟล์ xml โดยใช้ชื่อ testng.xml ในC:\>TestNG_WORKSPACE เพื่อดำเนินการกรณีทดสอบ

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
      <classes>
         <class name = "TestNGSimpleTest"/>
      </classes>
   </test>
</suite>

ขั้นตอนที่ 7: ตรวจสอบผลลัพธ์

รวบรวมคลาสโดยใช้ javac คอมไพเลอร์ดังนี้ -

C:\TestNG_WORKSPACE>javac TestNGSimpleTest.java

ตอนนี้เรียกใช้ testng.xml เพื่อดูผลลัพธ์ -

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

ตรวจสอบผลลัพธ์

===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================

การเขียนแบบทดสอบใน TestNG โดยทั่วไปเกี่ยวข้องกับขั้นตอนต่อไปนี้ -

  • เขียนตรรกะทางธุรกิจของการทดสอบของคุณและใส่คำอธิบายประกอบ TestNG ในโค้ดของคุณ

  • เพิ่มข้อมูลเกี่ยวกับการทดสอบของคุณ (เช่นชื่อคลาสกลุ่มที่คุณต้องการเรียกใช้ ฯลฯ ) ในไฟล์ testng.xml หรือใน build.xml

  • เรียกใช้ TestNG

ที่นี่เราจะเห็นตัวอย่างที่สมบูรณ์ของการทดสอบ TestNG โดยใช้คลาส POJO คลาสตรรกะทางธุรกิจและ xml การทดสอบซึ่งจะดำเนินการโดย TestNG

สร้าง EmployeeDetails.java ใน C:\>TestNG_WORKSPACEซึ่งเป็นคลาส POJO

public class EmployeeDetails {

   private String name;
   private double monthlySalary;
   private int age;
   
   // @return the name

   public String getName() {
      return name;
   }
   
   // @param name the name to set
   
   public void setName(String name) {
      this.name = name;
   }
   
   // @return the monthlySalary

   public double getMonthlySalary() {
      return monthlySalary;
   }
   
   // @param monthlySalary the monthlySalary to set
   
   public void setMonthlySalary(double monthlySalary) {
      this.monthlySalary = monthlySalary;
   }
   
   // @return the age
 
   public int getAge() {
      return age;
   }
   
   // @param age the age to set
 
   public void setAge(int age) {
      this.age = age;
   }
}

EmployeeDetails คลาสใช้เพื่อ -

  • รับ / กำหนดมูลค่าของชื่อพนักงาน
  • รับ / กำหนดมูลค่าเงินเดือนของพนักงานทุกเดือน
  • รับ / กำหนดมูลค่าตามอายุของพนักงาน

สร้างไฟล์ EmpBusinessLogic.java ใน C:\>TestNG_WORKSPACEซึ่งประกอบด้วยตรรกะทางธุรกิจ

public class EmpBusinessLogic {

   // Calculate the yearly salary of employee
   public double calculateYearlySalary(EmployeeDetails employeeDetails) {
      double yearlySalary = 0;
      yearlySalary = employeeDetails.getMonthlySalary() * 12;
      return yearlySalary;
   }
	
   // Calculate the appraisal amount of employee
   public double calculateAppraisal(EmployeeDetails employeeDetails) {
   
      double appraisal = 0;
      
      if(employeeDetails.getMonthlySalary() < 10000) {
         appraisal = 500;
         
      } else {
         appraisal = 1000;
      }
      
      return appraisal;
   }
}

EmpBusinessLogic คลาสใช้สำหรับคำนวณ -

  • เงินเดือนประจำปีของพนักงาน
  • จำนวนเงินประเมินของพนักงาน

ตอนนี้เรามาสร้างคลาส TestNG ที่เรียกว่า TestEmployeeDetails.javaใน C: \> TestNG_WORKSPACE คลาส TestNG เป็นคลาส Java ที่มีคำอธิบายประกอบ TestNG อย่างน้อยหนึ่งรายการ คลาสนี้ประกอบด้วยกรณีทดสอบที่จะทดสอบ การทดสอบ TestNG สามารถกำหนดค่าได้ด้วยคำอธิบายประกอบ @BeforeXXX และ @AfterXXX (เราจะเห็นสิ่งนี้ในบทTestNG - ขั้นตอนการดำเนินการ ) ซึ่งอนุญาตให้ดำเนินการตรรกะ Java ก่อนและหลังจุดหนึ่ง

import org.testng.Assert;
import org.testng.annotations.Test;

public class TestEmployeeDetails {
   EmpBusinessLogic empBusinessLogic = new EmpBusinessLogic();
   EmployeeDetails employee = new EmployeeDetails();

   @Test
   public void testCalculateAppriasal() {
   
      employee.setName("Rajeev");
      employee.setAge(25);
      employee.setMonthlySalary(8000);
      
      double appraisal = empBusinessLogic.calculateAppraisal(employee);
      Assert.assertEquals(500, appraisal, 0.0, "500");
   }

   // Test to check yearly salary
   @Test
   public void testCalculateYearlySalary() {
   
      employee.setName("Rajeev");
      employee.setAge(25);
      employee.setMonthlySalary(8000);
      
      double salary = empBusinessLogic.calculateYearlySalary(employee);
      Assert.assertEquals(96000, salary, 0.0, "8000");
   }
}

TestEmployeeDetails คลาสใช้สำหรับทดสอบวิธีการของ EmpBusinessLogicชั้นเรียน. มันทำสิ่งต่อไปนี้ -

  • ทดสอบเงินเดือนประจำปีของพนักงาน

  • ทดสอบจำนวนเงินประเมินของพนักงาน

ก่อนที่คุณจะสามารถเรียกใช้การทดสอบคุณต้องกำหนดค่า TestNG โดยใช้ไฟล์ XML พิเศษชื่อ testng.xml ตามอัตภาพ ไวยากรณ์สำหรับไฟล์นี้ง่ายมากและมีเนื้อหาตามที่แสดงด้านล่าง สร้างไฟล์นี้ในC:\>TestNG_WORKSPACE.

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
      <classes>
         <class name = "TestEmployeeDetails"/>
      </classes>
   </test>
</suite>

รายละเอียดของไฟล์ด้านบนมีดังนี้ -

  • ชุดจะแสดงโดยไฟล์ XML หนึ่งไฟล์ สามารถมีการทดสอบตั้งแต่หนึ่งรายการขึ้นไปและกำหนดโดยแท็ก <suite>

  • แท็ก <ทดสอบ> แสดงถึงการทดสอบหนึ่งรายการและสามารถมีคลาส TestNG ได้มากกว่าหนึ่งคลาส

  • แท็ก <class> แสดงถึงคลาส TestNG เป็นคลาส Java ที่มีคำอธิบายประกอบ TestNG อย่างน้อยหนึ่งรายการ สามารถมีวิธีการทดสอบอย่างน้อยหนึ่งวิธี

รวบรวมคลาสกรณีทดสอบโดยใช้ javac

C:\TestNG_WORKSPACE>javac EmployeeDetails.java EmpBusinessLogic.java TestEmployeeDetails.java

ตอนนี้ TestNG ด้วยคำสั่งต่อไปนี้ -

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

หากทำทุกอย่างถูกต้องคุณจะเห็นผลการทดสอบของคุณในคอนโซล นอกจากนี้ TestNG ยังสร้างรายงาน HTML ที่ดีมากในโฟลเดอร์ที่เรียกว่าtest-outputที่สร้างขึ้นโดยอัตโนมัติในไดเร็กทอรีปัจจุบัน หากคุณเปิดและโหลด index.html คุณจะเห็นหน้าที่คล้ายกับหน้าในภาพด้านล่าง -

วิธีดั้งเดิมในการระบุวิธีทดสอบใน JUnit 3 คือการใส่คำนำหน้าชื่อด้วยการทดสอบ นี่เป็นวิธีการที่มีประสิทธิภาพมากสำหรับการแท็กเมธอดบางอย่างในคลาสเนื่องจากมีความหมายพิเศษ แต่การตั้งชื่อไม่ได้ปรับขนาดได้ดีนัก (ถ้าเราต้องการเพิ่มแท็กเพิ่มเติมสำหรับเฟรมเวิร์กที่แตกต่างกันล่ะ?) และค่อนข้างยืดหยุ่น (ถ้าเรา ต้องการส่งผ่านพารามิเตอร์เพิ่มเติมไปยังกรอบการทดสอบหรือไม่)

คำอธิบายประกอบถูกเพิ่มอย่างเป็นทางการในภาษา Java ใน JDK 5 และ TestNG ได้เลือกใช้คำอธิบายประกอบเพื่อใส่คำอธิบายประกอบคลาสทดสอบ

นี่คือรายการคำอธิบายประกอบที่ TestNG รองรับ -

ซีเนียร์ คำอธิบายประกอบและคำอธิบาย
1

@BeforeSuite

วิธีการใส่คำอธิบายประกอบจะทำงานเพียงครั้งเดียวก่อนที่การทดสอบทั้งหมดในชุดนี้จะทำงาน

2

@AfterSuite

วิธีการใส่คำอธิบายประกอบจะทำงานเพียงครั้งเดียวหลังจากการทดสอบทั้งหมดในชุดนี้ทำงานแล้ว

3

@BeforeClass

วิธีการใส่คำอธิบายประกอบจะถูกเรียกใช้เพียงครั้งเดียวก่อนที่จะเรียกใช้วิธีการทดสอบแรกในคลาสปัจจุบัน

4

@AfterClass

วิธีการใส่คำอธิบายประกอบจะถูกเรียกใช้เพียงครั้งเดียวหลังจากที่รันวิธีการทดสอบทั้งหมดในคลาสปัจจุบันแล้ว

5

@BeforeTest

วิธีการใส่คำอธิบายประกอบจะถูกเรียกใช้ก่อนที่วิธีการทดสอบใด ๆ ที่เป็นของคลาสภายในแท็ก <test> จะถูกเรียกใช้

6

@AfterTest

วิธีการใส่คำอธิบายประกอบจะถูกเรียกใช้หลังจากวิธีการทดสอบทั้งหมดที่เป็นของคลาสภายในแท็ก <test> ได้ทำงานแล้ว

7

@BeforeGroups

รายชื่อกลุ่มที่วิธีการกำหนดค่านี้จะทำงานก่อน วิธีนี้รับประกันว่าจะทำงานในไม่ช้าก่อนที่จะมีการเรียกใช้วิธีทดสอบแรกที่เป็นของกลุ่มใด ๆ เหล่านี้

8

@AfterGroups

รายชื่อกลุ่มที่วิธีการกำหนดค่านี้จะทำงานหลังจากนั้น วิธีนี้รับประกันว่าจะทำงานในไม่ช้าหลังจากมีการเรียกใช้วิธีการทดสอบล่าสุดที่เป็นของกลุ่มใด ๆ เหล่านี้

9

@BeforeMethod

วิธีการใส่คำอธิบายประกอบจะถูกเรียกใช้ก่อนวิธีการทดสอบแต่ละวิธี

10

@AfterMethod

วิธีการใส่คำอธิบายประกอบจะทำงานหลังจากแต่ละวิธีการทดสอบ

11

@DataProvider

ทำเครื่องหมายวิธีการเป็นการจัดหาข้อมูลสำหรับวิธีการทดสอบ วิธีการใส่คำอธิบายประกอบต้องส่งคืน Object [] [] โดยที่แต่ละ Object [] สามารถกำหนดรายการพารามิเตอร์ของวิธีการทดสอบได้ วิธีการ @Test ที่ต้องการรับข้อมูลจาก DataProvider นี้จำเป็นต้องใช้ชื่อ dataProvider เท่ากับชื่อของคำอธิบายประกอบนี้

12

@Factory

ทำเครื่องหมายวิธีการเป็นโรงงานที่ส่งคืนอ็อบเจ็กต์ที่ TestNG จะใช้เป็นคลาสทดสอบ เมธอดต้องส่งคืน Object []

13

@Listeners

กำหนดผู้ฟังในชั้นเรียนทดสอบ

14

@Parameters

อธิบายวิธีการส่งพารามิเตอร์ไปยังเมธอด @Test

15

@Test

ทำเครื่องหมายคลาสหรือวิธีการเป็นส่วนหนึ่งของการทดสอบ

ประโยชน์ของการใช้คำอธิบายประกอบ

ต่อไปนี้เป็นประโยชน์บางประการของการใช้คำอธิบายประกอบ -

  • TestNG ระบุวิธีการที่สนใจโดยค้นหาคำอธิบายประกอบ ดังนั้นชื่อวิธีการจึงไม่ จำกัด เฉพาะรูปแบบหรือรูปแบบใด ๆ

  • เราสามารถส่งผ่านพารามิเตอร์เพิ่มเติมไปยังคำอธิบายประกอบ

  • คำอธิบายประกอบถูกพิมพ์อย่างรุนแรงดังนั้นคอมไพลเลอร์จะตั้งค่าสถานะข้อผิดพลาดทันที

  • คลาสทดสอบไม่จำเป็นต้องขยายอะไรอีกต่อไป (เช่น TestCase สำหรับ JUnit 3)

บทนี้อธิบายขั้นตอนการดำเนินการของวิธีการใน TestNG จะอธิบายลำดับของวิธีการที่เรียกว่า นี่คือขั้นตอนการดำเนินการของเมธอด TestNG test API พร้อมตัวอย่าง

สร้างชื่อไฟล์คลาส java TestngAnnotation.java ใน C:\>TestNG_WORKSPACE เพื่อทดสอบคำอธิบายประกอบ

import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.AfterSuite;

public class TestngAnnotation {
   // test case 1
   @Test
   public void testCase1() {
      System.out.println("in test case 1");
   }

   // test case 2
   @Test
   public void testCase2() {
      System.out.println("in test case 2");
   }

   @BeforeMethod
   public void beforeMethod() {
      System.out.println("in beforeMethod");
   }

   @AfterMethod
   public void afterMethod() {
      System.out.println("in afterMethod");
   }

   @BeforeClass
   public void beforeClass() {
      System.out.println("in beforeClass");
   }

   @AfterClass
   public void afterClass() {
      System.out.println("in afterClass");
   }

   @BeforeTest
   public void beforeTest() {
      System.out.println("in beforeTest");
   }

   @AfterTest
   public void afterTest() {
      System.out.println("in afterTest");
   }

   @BeforeSuite
   public void beforeSuite() {
      System.out.println("in beforeSuite");
   }

   @AfterSuite
   public void afterSuite() {
      System.out.println("in afterSuite");
   }

}

ต่อไปมาสร้างไฟล์ testng.xml ใน C:\>TestNG_WORKSPACE เพื่อดำเนินการคำอธิบายประกอบ

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
      <classes>
         <class name = "TestngAnnotation"/>
      </classes>
   </test>
</suite>

คอมไพล์คลาสกรณีทดสอบโดยใช้ javac

C:\TestNG_WORKSPACE>javac TestngAnnotation.java

ตอนนี้เรียกใช้ testng.xml ซึ่งจะเรียกใช้กรณีทดสอบที่กำหนดไว้ในคลาส Test Case ที่ให้มา

C:\TestNG_WORKSPACE>java org.testng.TestNG testng.xml

ตรวจสอบผลลัพธ์

in beforeSuite
in beforeTest
in beforeClass
in beforeMethod
in test case 1
in afterMethod
in beforeMethod
in test case 2
in afterMethod
in afterClass
in afterTest
in afterSuite

===============================================
Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================

จากผลลัพธ์ข้างต้นขั้นตอนการดำเนินการมีดังนี้ -

  • ก่อนอื่นเมธอด beforeSuite () จะดำเนินการเพียงครั้งเดียว

  • สุดท้ายวิธี afterSuite () ดำเนินการเพียงครั้งเดียว

  • แม้แต่เมธอด beforeTest (), beforeClass (), afterClass () และ afterTest () จะดำเนินการเพียงครั้งเดียว

  • beforeMethod () วิธีการดำเนินการสำหรับแต่ละกรณีการทดสอบ แต่ก่อนที่จะดำเนินการกรณีทดสอบ

  • afterMethod () วิธีการดำเนินการสำหรับแต่ละกรณีการทดสอบ แต่หลังจากดำเนินการกรณีทดสอบ

  • ระหว่าง beforeMethod () และ afterMethod () แต่ละกรณีทดสอบจะดำเนินการ

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

  • บน testng.xml ที่มีอยู่

  • บน testng.xml สังเคราะห์ที่สร้างขึ้นจาก Java ทั้งหมด

  • โดยการตั้งค่าคลาสทดสอบโดยตรง

คุณยังสามารถกำหนดกลุ่มที่จะรวมหรือไม่รวมกำหนดพารามิเตอร์ ฯลฯ พารามิเตอร์บรรทัดคำสั่งคือ -

  • -d outputdir: ระบุไดเร็กทอรีเอาต์พุต

  • -testclass class_name: ระบุชื่อคลาสหนึ่งหรือหลายชื่อ

  • -testjar jar_name: ระบุ jar ที่มีการทดสอบ

  • -sourcedir src1; src2:; แยกรายการไดเร็กทอรีต้นทาง (ใช้เฉพาะเมื่อใช้คำอธิบายประกอบ javadoc)

  • -target

  • -groups

  • -testrunfactory

  • -listener

เราจะสร้างออบเจ็กต์ TestNG เป็น testng.xml ที่มีอยู่ในตัวอย่างด้านล่าง

สร้างชั้นเรียน

สร้างคลาส java ที่จะทดสอบพูดว่า MessageUtil.java ใน C:\>TestNG_WORKSPACE.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message) {
      this.message = message;
   }
      
   // prints the message
   public String printMessage() {
      System.out.println(message);
      return message;
   }   
}

สร้างคลาสกรณีทดสอบ

  • สร้างคลาสทดสอบ java พูดว่า SampleTest.java.

  • เพิ่มวิธีการทดสอบ testPrintMessage () ในคลาสทดสอบของคุณ

  • เพิ่ม Annotation @Test ลงใน method testPrintMessage ()

  • ใช้เงื่อนไขการทดสอบและตรวจสอบเงื่อนไขโดยใช้ assertEquals API ของ TestNG

สร้างไฟล์คลาส java ที่เรียกว่า SampleTest.java ใน C:\>TestNG_WORKSPACE.

import org.testng.Assert;
import org.testng.annotations.Test;

public class SampleTest {
	
   String message = "Hello World";
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {
      Assert.assertEquals(message, messageUtil.printMessage());
   }
}

สร้าง testng.xml

ต่อไปมาสร้างไฟล์ testng.xml ใน C:\>TestNG_WORKSPACEเพื่อดำเนินการกรณีทดสอบ ไฟล์นี้รวบรวมการทดสอบทั้งหมดของคุณใน XML ไฟล์นี้ทำให้ง่ายต่อการอธิบายชุดทดสอบและพารามิเตอร์ทั้งหมดของคุณในไฟล์เดียวซึ่งคุณสามารถตรวจสอบในที่เก็บโค้ดของคุณหรือส่งอีเมลถึงเพื่อนร่วมงานได้ นอกจากนี้ยังทำให้ง่ายต่อการแยกชุดย่อยของการทดสอบของคุณหรือแยกการกำหนดค่ารันไทม์หลายรายการ (เช่น testngdatabase.xml จะรันเฉพาะการทดสอบที่ใช้ฐานข้อมูลของคุณ)

<?xml version = "1.0" encoding = "UTF-8"?>

<suite name = "Sample test Suite">
   <test name = "Sample test">
      <classes>
         <class name = "SampleTest" />
      </classes>
   </test>
</suite>

รวบรวมกรณีทดสอบโดยใช้ javac

C:\TestNG_WORKSPACE>javac MessageUtil.java SampleTest.java

ตอนนี้เรียกใช้ testng.xml ซึ่งจะเรียกใช้กรณีทดสอบที่กำหนดในแท็ก <test>

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

ตรวจสอบผลลัพธ์

Hello World

===============================================
Sample test Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================

test suiteคือชุดกรณีทดสอบที่มีวัตถุประสงค์เพื่อทดสอบพฤติกรรมหรือชุดพฤติกรรมของโปรแกรมซอฟต์แวร์ ใน TestNG เราไม่สามารถกำหนดชุดในการทดสอบซอร์สโค้ดได้ แต่จะแสดงโดยไฟล์ XML เดียวเนื่องจากชุดเป็นคุณลักษณะของการดำเนินการ นอกจากนี้ยังช่วยให้สามารถเรียกใช้การกำหนดค่าการทดสอบได้อย่างยืดหยุ่น ชุดสามารถมีการทดสอบอย่างน้อยหนึ่งรายการและกำหนดโดยแท็ก <suite>

<suite> คือแท็กรากของ testng.xml ของคุณ อธิบายถึงชุดทดสอบซึ่งประกอบด้วยส่วน <ทดสอบ> หลายส่วน

ตารางต่อไปนี้แสดงรายการแอตทริบิวต์ทางกฎหมายทั้งหมดที่ <suite> ยอมรับ

ซีเนียร์ คุณสมบัติและคำอธิบาย
1

name

ชื่อห้องชุดนี้ มันคือmandatory แอตทริบิวต์

2

verbose

ระดับหรือฟุ่มเฟื่อยสำหรับการรันนี้

3

parallel

TestNG ควรรันเธรดที่แตกต่างกันเพื่อเรียกใช้ชุดนี้หรือไม่

4

thread-count

จำนวนเธรดที่จะใช้หากเปิดใช้งานโหมดขนาน (ละเว้นอื่น ๆ ที่ชาญฉลาด)

5

annotations

ประเภทของคำอธิบายประกอบที่คุณใช้ในการทดสอบ

6

time-out

การหมดเวลาเริ่มต้นที่จะใช้กับวิธีการทดสอบทั้งหมดที่พบในการทดสอบนี้

ในบทนี้เราจะแสดงตัวอย่างที่มีคลาสทดสอบสองคลาสคือ Test1 และ Test2 เพื่อรันร่วมกันโดยใช้ Test Suite

สร้างชั้นเรียน

สร้างคลาส java ที่จะทดสอบพูดว่า MessageUtil.java ใน C:\>JUNIT_WORKSPACE.

/*
* This class prints the given message on console.
*/

public class MessageUtil {
   private String message;

   // Constructor
   // @param message to be printed
   public MessageUtil(String message) {
      this.message = message;
   }

   // prints the message
   public String printMessage() {
      System.out.println(message);
      return message;
   }

   // add "Hi!" to the message
   public String salutationMessage() {
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }
}

สร้างคลาสกรณีทดสอบ

สร้างไฟล์คลาส java ชื่อ Test1.java ใน C:\>TestNG_WORKSPACE.

import org.testng.Assert;
import org.testng.annotations.Test;

public class Test1 {
   String message = "Manisha";
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {
      System.out.println("Inside testPrintMessage()");
      Assert.assertEquals(message, messageUtil.printMessage());
   }
}

สร้างไฟล์คลาส java ชื่อ Test2.java ใน C:\>TestNG_WORKSPACE.

import org.testng.Assert;
import org.testng.annotations.Test;

public class Test2 {
   String message = "Manisha";	
   MessageUtil messageUtil = new MessageUtil(message);
	 
   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Manisha";
      Assert.assertEquals(message,messageUtil.salutationMessage());
   }
}

ตอนนี้ขอเขียน testng.xml ใน C:\>TestNG_WORKSPACEซึ่งจะมีแท็ก <suite> ดังนี้ -

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">

   <test name = "exampletest1">
      <classes>
         <class name = "Test1" />
      </classes>
   </test>
  
   <test name = "exampletest2">
      <classes>
         <class name = "Test2" />
      </classes>
   </test>
  
</suite>

Suite1 ประกอบด้วย exampletest1 และ exampletest2.

รวบรวมคลาส java ทั้งหมดโดยใช้ javac

C:\TestNG_WORKSPACE>javac MessageUtil.java Test1.java Test2.java

ตอนนี้เรียกใช้ testng.xml ซึ่งจะเรียกใช้กรณีทดสอบที่กำหนดไว้ในคลาส Test Case ที่ให้มา

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

ตรวจสอบผลลัพธ์

Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha

===============================================
Suite1
Total tests run: 2, Failures: 0, Skips: 0
===============================================

คุณยังสามารถตรวจสอบโฟลเดอร์ผลลัพธ์การทดสอบ ภายใต้โฟลเดอร์Suite1คุณจะเห็นไฟล์ html สองไฟล์ที่สร้างขึ้น exampletest1.html และ exampletest2.html ซึ่งจะมีลักษณะดังนี้ -

บางครั้งมันเกิดขึ้นว่าโค้ดของเราไม่พร้อมและกรณีทดสอบที่เขียนขึ้นเพื่อทดสอบเมธอด / โค้ดนั้นล้มเหลว ในกรณีเช่นนี้คำอธิบายประกอบ@Test(enabled = false) ช่วยปิดการใช้งานกรณีทดสอบนี้

หากวิธีการทดสอบมีคำอธิบายประกอบด้วย@Test (เปิดใช้งาน = เท็จ)กรณีทดสอบที่ยังไม่พร้อมทดสอบจะถูกข้าม

ตอนนี้เรามาดูการทำงานของ @Test (enable = false)

สร้างชั้นเรียน

สร้างคลาส java ที่จะทดสอบพูดว่า MessageUtil.java ใน C:\>TestNG_WORKSPACE.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message) {
      this.message = message; 
   }

   // prints the message
   public String printMessage() {
      System.out.println(message);
      return message;
   }   

   // add "Hi!" to the message
   public String salutationMessage() {
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}

สร้างคลาสกรณีทดสอบ

  • สร้างคลาสทดสอบ java พูดว่า IgnoreTest.java.

  • เพิ่มวิธีการทดสอบ testPrintMessage () และ testSalutationMessage () ลงในคลาสทดสอบของคุณ

  • เพิ่ม Annotation @Test (enable = false) ลงใน method testPrintMessage ()

สร้างไฟล์คลาส java ชื่อ IgnoreTest.java ใน C:\>TestNG_WORKSPACE.

import org.testng.Assert;
import org.testng.annotations.Test;

public class IgnoreTest {
   String message = "Manisha";
   MessageUtil messageUtil = new MessageUtil(message);

   @Test(enabled = false)
   public void testPrintMessage() {
      System.out.println("Inside testPrintMessage()");
      message = "Manisha";
      Assert.assertEquals(message, messageUtil.printMessage());
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Manisha";
      Assert.assertEquals(message, messageUtil.salutationMessage());
   }
}

สร้าง testng.xml

สร้าง testng.xml ใน C:\>TestNG_WORKSPACE เพื่อดำเนินการกรณีทดสอบ

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
      <classes>
         <class name = "IgnoreTest" />
      </classes>
   </test>
</suite>

คอมไพล์ MessageUtil และคลาสเคสทดสอบโดยใช้ javac

C:\TestNG_WORKSPACE>javac MessageUtil.java IgnoreTest.java

ตอนนี้ให้รัน testng.xml ซึ่งจะไม่เรียกใช้ testPrintMessage () กรณีทดสอบที่กำหนดไว้ในคลาส Test Case

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

ตรวจสอบผลลัพธ์ testPrintMessage () ไม่ได้ทดสอบกรณีทดสอบ

Inside testSalutationMessage()
Hi!Manisha

===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================

คุณยังสามารถเพิกเฉยต่อกลุ่มการทดสอบซึ่งจะกล่าวถึงในบทถัดไป

การทดสอบกลุ่มเป็นคุณสมบัติใหม่ใน TestNG ซึ่งไม่มีอยู่ในกรอบงาน JUnit อนุญาตให้คุณจัดส่งวิธีการไปยังส่วนที่เหมาะสมและดำเนินการจัดกลุ่มวิธีการทดสอบที่ซับซ้อน

คุณไม่เพียง แต่สามารถประกาศวิธีการเหล่านั้นที่เป็นของกลุ่มเท่านั้น แต่คุณยังสามารถระบุกลุ่มที่มีกลุ่มอื่น ๆ จากนั้นสามารถเรียกใช้ TestNG และขอให้รวมกลุ่มบางกลุ่ม (หรือนิพจน์ทั่วไป) ในขณะที่ไม่รวมชุดอื่น

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

มีการระบุกลุ่มในไฟล์ testng.xml ของคุณโดยใช้แท็ก <groups> สามารถพบได้ในแท็ก <test> หรือ <suite> กลุ่มที่ระบุในแท็ก <suite> ใช้กับแท็ก <test> ทั้งหมดที่อยู่ด้านล่าง

ตอนนี้เรามาดูตัวอย่างเพื่อดูว่าการทดสอบกลุ่มทำงานอย่างไร

สร้างชั้นเรียน

สร้างคลาส java ที่จะทดสอบพูดว่า MessageUtil.java ใน C:\> TestNG_WORKSPACE.

/*
* This class prints the given message on console.
*/
public class MessageUtil {
   private String message;

   // Constructor
   // @param message to be printed
   public MessageUtil(String message) {
      this.message = message;
   }

   // prints the message
   public String printMessage() {
      System.out.println(message);
      return message;
   }

   // add "tutorialspoint" to the message
   public String salutationMessage() {
      message = "tutorialspoint" + message;
      System.out.println(message);
      return message;
   }

   // add "www." to the message
   public String exitMessage() {
      message = "www." + message;
      System.out.println(message);
      return message;
   }
}

สร้างคลาสกรณีทดสอบ

  • สร้างคลาสทดสอบ java เช่น GroupTestExample.java

  • เพิ่มวิธีการทดสอบ testPrintMessage () และ testSalutationMessage () ลงในคลาสทดสอบของคุณ

  • จัดกลุ่มวิธีการทดสอบเป็นสองประเภท -

    • Check-in tests (checkintest)- ควรดำเนินการทดสอบเหล่านี้ก่อนที่คุณจะส่งรหัสใหม่ โดยทั่วไปควรจะเร็วและตรวจสอบให้แน่ใจว่าไม่มีฟังก์ชันพื้นฐานใดเสียหาย

    • Functional tests (functest) - การทดสอบเหล่านี้ควรครอบคลุมฟังก์ชันการทำงานทั้งหมดของซอฟต์แวร์ของคุณและเปิดใช้งานอย่างน้อยวันละครั้งแม้ว่าคุณจะต้องการเรียกใช้อย่างต่อเนื่องก็ตาม

สร้างไฟล์คลาส java ชื่อ GroupTestExample.java ใน C:\>TestNG_WORKSPACE.

import org.testng.Assert;
import org.testng.annotations.Test;

public class GroupTestExample {
   String message = ".com";
   MessageUtil messageUtil = new MessageUtil(message);

   @Test(groups = { "functest", "checkintest" })
   
   public void testPrintMessage() {
      System.out.println("Inside testPrintMessage()");
      message = ".com";
      Assert.assertEquals(message, messageUtil.printMessage());
   }

   @Test(groups = { "checkintest" })
   
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "tutorialspoint" + ".com";
      Assert.assertEquals(message, messageUtil.salutationMessage());
   }

   @Test(groups = { "functest" })
   
   public void testingExitMessage() {
      System.out.println("Inside testExitMessage()");
      message = "www." + "tutorialspoint"+".com";
      Assert.assertEquals(message, messageUtil.exitMessage());
   }  
}

สร้าง testng.xml

สร้าง testng.xml ใน C:\> TestNG_WORKSPACEเพื่อดำเนินการกรณีทดสอบ ที่นี่เราจะได้รับการดำเนินการเพียงการทดสอบเหล่านั้นที่อยู่ในกลุ่มfunctest

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
   
      <groups>
         <run>
            <include name = "functest" />
         </run>
      </groups>

      <classes>
         <class name = "GroupTestExample" />
      </classes>
   
   </test>
</suite>

คอมไพล์ MessageUtil คลาสเคสทดสอบโดยใช้ javac

C:\TestNG_WORKSPACE>javac MessageUtil.java GroupTestExample.java

ตอนนี้ทำงาน testng.xml ซึ่งจะทำงานเฉพาะวิธี testPrintMessage () ในขณะที่มันอยู่ในกลุ่มfunctest

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

ตรวจสอบผลลัพธ์ ดำเนินการเฉพาะเมธอด testPrintMessage () เท่านั้น

Inside testPrintMessage()
.com
Inside testExitMessage()
www..com

===============================================
Suite1
Total tests run: 2, Failures: 1, Skips: 0
===============================================

กลุ่มของกลุ่ม

กลุ่มยังสามารถรวมกลุ่มอื่น ๆ กลุ่มเหล่านี้เรียกว่าMetaGroups. ตัวอย่างเช่นคุณอาจต้องการที่จะกำหนดกลุ่มทั้งหมดที่มีcheckintestและfunctest มาแก้ไขไฟล์ testng.xml ของเราดังนี้ -

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
   <test name = "test1">
   
      <groups>
      
         <define name = "all">
            <include name = "functest"/>
            <include name = "checkintest"/>
         </define>
         
         <run>
            <include name = "all"/>
         </run>
         
      </groups>
      
      <classes>
         <class name = "GroupTestExample" />
      </classes>
      
   </test>
</suite>

การดำเนินการ testng.xml ข้างต้นจะดำเนินการทดสอบทั้งสามและจะให้ผลลัพธ์ดังต่อไปนี้ -

Inside testPrintMessage()
.com
Inside testSalutationMessage()
tutorialspoint.com
Inside testExitMessage()
www.tutorialspoint.com

===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================

กลุ่มการยกเว้น

คุณสามารถละเว้นกลุ่มโดยใช้แท็ก <exclude> ดังที่แสดงด้านล่าง -

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
   <test name = "test1">

      <groups>
         <define name = "all">
            <exclude name = "functest"/>
            <include name = "checkintest"/>
         </define>

         <run>
            <include name = "all"/>
         </run>
      </groups>

      <classes>
         <class name = "GroupTestExample" />
      </classes>

   </test>
</suite>

TestNG มีตัวเลือกในการติดตามการจัดการข้อยกเว้นของโค้ด คุณสามารถทดสอบว่ารหัสส่งข้อยกเว้นที่ต้องการหรือไม่ ที่นี่expectedExceptionsพารามิเตอร์ถูกใช้ร่วมกับคำอธิบายประกอบ @Test ตอนนี้เรามาดูกัน@Test(expectedExceptions) ในการดำเนินการ

สร้างชั้นเรียน

สร้างคลาส java ที่จะทดสอบพูดว่า MessageUtil.java ใน C:\> TestNG_WORKSPACE. เพิ่มเงื่อนไขข้อผิดพลาดภายในเมธอด printMessage ()

/*
* This class prints the given message on console.
*/
public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message) {
      this.message = message; 
   }

   // prints the message
   public void printMessage() {
      System.out.println(message);
      int a =0;
      int b = 1/a;
   }   

   // add "Hi!" to the message
   public String salutationMessage() {
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}

สร้างคลาสกรณีทดสอบ

  • สร้างคลาสทดสอบ java พูดว่า ExpectedExceptionTest.java.

  • เพิ่มข้อยกเว้น ArithmeticException ที่คาดไว้ในกรณีทดสอบ testPrintMessage ()

สร้างไฟล์คลาส java ชื่อ ExpectedExceptionTest.java ใน C:\> TestNG_WORKSPACE.

import org.testng.Assert;
import org.testng.annotations.Test;

public class ExpectedExceptionTest {
   String message = "Manisha";	
   MessageUtil messageUtil = new MessageUtil(message);
	   
   @Test(expectedExceptions = ArithmeticException.class)
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");     
      messageUtil.printMessage();     
   }
   
   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Manisha";
      Assert.assertEquals(message,messageUtil.salutationMessage());
   }
}

สร้าง Test Runner

สร้าง testng.xml ใน C:\>TestNG_WORKSPACE เพื่อดำเนินการกรณีทดสอบ

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
      <classes>
         <class name = "ExpectedExceptionTest" />
      </classes>
   </test>
</suite>

คอมไพล์ MessageUtil คลาสเคสทดสอบโดยใช้ javac

C:\TestNG_WORKSPACE>javac MessageUtil.java TestJunit.java

ตอนนี้เรียกใช้ Test Runner ซึ่งจะเรียกใช้กรณีทดสอบที่กำหนดไว้ในคลาส Test Case ที่ให้มา

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

ตรวจสอบผลลัพธ์ testPrintMessage () กรณีทดสอบจะถูกส่งผ่าน

Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha

===============================================
Suite1
Total tests run: 2, Failures: 0, Skips: 0
===============================================

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

TestNG ช่วยให้คุณระบุการอ้างอิงด้วย -

  • การใช้แอตทริบิวต์ขึ้นอยู่กับวิธีการในคำอธิบายประกอบ @Test หรือ

  • การใช้แอตทริบิวต์ขึ้นอยู่บนกลุ่มในคำอธิบายประกอบ @Test

ตัวอย่างการใช้ขึ้นอยู่กับวิธีการ

สร้างชั้นเรียน

สร้างคลาส java ที่จะทดสอบพูดว่า MessageUtil.java ใน C:\>TestNG_WORKSPACE.

public class MessageUtil {
   private String message;

   // Constructor
   // @param message to be printed
   public MessageUtil(String message) {
      this.message = message;
   }

   // prints the message
   public String printMessage() {
      System.out.println(message);
      return message;
   }

   // add "Hi!" to the message
   public String salutationMessage() {
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }
}

สร้างคลาสกรณีทดสอบ

  • สร้างคลาสทดสอบ java พูด DependencyTestUsingAnnotation.java

  • เพิ่มวิธีการทดสอบ testPrintMessage () และ testSalutationMessage () และ initEnvironmentTest () ไปยังคลาสทดสอบของคุณ

  • เพิ่มแอตทริบิวต์ dependsOnMethods = {"initEnvironmentTest"} ไปยังคำอธิบายประกอบ @Test ของ testSalutationMessage() วิธี.

สร้างชื่อไฟล์คลาส java DependencyTestUsingAnnotation.java ใน C:\>TestNG_WORKSPACE.

import org.testng.Assert;
import org.testng.annotations.Test;

public class DependencyTestUsingAnnotation {
String message = "Manisha";
MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {
      System.out.println("Inside testPrintMessage()");
      message = "Manisha";
      Assert.assertEquals(message, messageUtil.printMessage());
   }

   @Test(dependsOnMethods = { "initEnvironmentTest" })
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Manisha";
      Assert.assertEquals(message, messageUtil.salutationMessage());
   }

   @Test
   public void initEnvironmentTest() {
      System.out.println("This is initEnvironmentTest");
   }
}

สร้าง testng.xml

สร้าง testng.xml ใน C:\>TestNG_WORKSPACE เพื่อดำเนินการกรณีทดสอบ

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
      <classes>
         <class name = "DependencyTestUsingAnnotation" />
      </classes>
   </test>
</suite>

คอมไพล์ MessageUtil คลาสเคสทดสอบโดยใช้ javac

C:\TestNG_WORKSPACE>javac MessageUtil.java DependencyTestUsingAnnotation.java

ตอนนี้เรียกใช้ testng.xml ซึ่งจะรันเมธอด testSalutationMessage () หลังจากการดำเนินการของเมธอด initEnvironmentTest () เท่านั้น

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

ตรวจสอบผลลัพธ์

This is initEnvironmentTest
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha

===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================

ตัวอย่างการใช้ขึ้นอยู่กับกลุ่ม

คุณยังสามารถมีวิธีการที่ขึ้นอยู่กับทั้งกลุ่ม ลองมีตัวอย่างเพื่อสาธิตสิ่งนี้

สร้างชั้นเรียน

สร้างคลาส java ที่จะทดสอบพูดว่า MessageUtil.java ใน C:\>TestNG_WORKSPACE.

public class MessageUtil {
   private String message;

   // Constructor
   // @param message to be printed
   public MessageUtil(String message) {
      this.message = message;
   }

   // prints the message
   public String printMessage() {
      System.out.println(message);
      return message;
   }

   // add "Hi!" to the message
   public String salutationMessage() {
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }
}

สร้างคลาสกรณีทดสอบ

  • สร้างคลาสทดสอบ java พูด DependencyTestUsingAnnotation.java

  • เพิ่มวิธีการทดสอบ testPrintMessage () testSalutationMessage () และ initEnvironmentTest () ในคลาสทดสอบของคุณและเพิ่มลงในกลุ่ม "init"

  • เพิ่มแอตทริบิวต์ dependsOnMethods = {"init.*"} ไปยังคำอธิบายประกอบ @Test ของ testSalutationMessage() วิธี.

สร้างไฟล์คลาส java ชื่อ DependencyTestUsingAnnotation.java ใน C:\>TestNG_WORKSPACE.

import org.testng.Assert;
import org.testng.annotations.Test;

public class DependencyTestUsingAnnotation {
   String message = "Manisha";
   MessageUtil messageUtil = new MessageUtil(message);

   @Test(groups = { "init" })
   public void testPrintMessage() {
      System.out.println("Inside testPrintMessage()");
      message = "Manisha";
      Assert.assertEquals(message, messageUtil.printMessage());
   }

   @Test(dependsOnGroups = { "init.*" })
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Manisha";
      Assert.assertEquals(message, messageUtil.salutationMessage());
   }

   @Test(groups = { "init" })
   public void initEnvironmentTest() {
      System.out.println("This is initEnvironmentTest");
   }
}

ในตัวอย่างนี้ testSalutationMessage () ถูกประกาศว่าขึ้นอยู่กับกลุ่มใด ๆ ซึ่งตรงกับนิพจน์ทั่วไป "init. *" ซึ่งรับประกันว่าวิธีการ testPrintMessage () และ initEnvironmentTest () จะถูกเรียกก่อน testSalutationMessage () เสมอ

หากวิธีการขึ้นอยู่กับความล้มเหลวและคุณมีการพึ่งพาอย่างหนัก (alwaysRun = false ซึ่งเป็นค่าดีฟอลต์) เมธอดที่ขึ้นอยู่กับวิธีนั้นจะไม่ถูกทำเครื่องหมายว่า FAIL แต่เป็น SKIP วิธีการข้ามจะได้รับการรายงานในรายงานฉบับสุดท้าย (เป็นสีที่ไม่ใช่สีแดงหรือสีเขียวใน HTML) ซึ่งมีความสำคัญเนื่องจากวิธีการข้ามไม่จำเป็นต้องล้มเหลว

สร้าง testng.xml

สร้าง testng.xml ใน C:\>TestNG_WORKSPACE เพื่อดำเนินการกรณีทดสอบ

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
      <classes>
         <class name = "DependencyTestUsingAnnotation" />
      </classes>
   </test>
</suite>

คอมไพล์ MessageUtil คลาสเคสทดสอบโดยใช้ javac

C:\TestNG_WORKSPACE>javac MessageUtil.java DependencyTestUsingAnnotation.java

ตอนนี้เรียกใช้ testng.xml ซึ่งจะรันเมธอด testSalutationMessage ()หลังจากการดำเนินการของเมธอด initEnvironmentTest ()เท่านั้น

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

ตรวจสอบผลลัพธ์

This is initEnvironmentTest
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha

===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================

upOnGroups Vs ขึ้นอยู่กับOnMethods

  • ในการใช้กลุ่มเราจะไม่พบปัญหาการปรับโครงสร้างอีกต่อไป ตราบเท่าที่เราไม่แก้ไขแอตทริบิวต์ dependOnGroups หรือกลุ่มการทดสอบของเราจะยังคงทำงานต่อไปพร้อมกับการตั้งค่าการอ้างอิงที่เหมาะสม

  • เมื่อใดก็ตามที่ต้องเพิ่มวิธีการใหม่ในกราฟการอ้างอิงสิ่งที่เราต้องทำคือวางไว้ในกลุ่มที่ถูกต้องและตรวจสอบให้แน่ใจว่าขึ้นอยู่กับกลุ่มที่ถูกต้อง เราไม่จำเป็นต้องแก้ไขวิธีการอื่นใด

คุณสมบัติที่น่าสนใจอีกอย่างที่มีอยู่ใน TestNG คือ parametric testing. ในกรณีส่วนใหญ่คุณจะเจอสถานการณ์ที่ตรรกะทางธุรกิจต้องใช้การทดสอบที่แตกต่างกันอย่างมากParameterized tests อนุญาตให้นักพัฒนาทำการทดสอบเดิมซ้ำแล้วซ้ำเล่าโดยใช้ค่าที่ต่างกัน

TestNG ช่วยให้คุณส่งผ่านพารามิเตอร์ไปยังวิธีการทดสอบของคุณได้โดยตรงสองวิธี -

  • ด้วย testng.xml
  • กับผู้ให้บริการข้อมูล

การส่งผ่านพารามิเตอร์ด้วยtestng.xml

ด้วยเทคนิคนี้คุณกำหนดพารามิเตอร์อย่างง่ายในไฟล์testng.xmlจากนั้นอ้างอิงพารามิเตอร์เหล่านั้นในไฟล์ต้นฉบับ ให้เรามีตัวอย่างเพื่อสาธิตวิธีการใช้เทคนิคนี้เพื่อส่งผ่านพารามิเตอร์

สร้างคลาสกรณีทดสอบ

  • สร้างคลาสทดสอบ java กล่าวว่า ParameterizedTest1.java

  • เพิ่มวิธีการทดสอบ parameterTest () ในคลาสทดสอบของคุณ วิธีนี้ใช้สตริงเป็นพารามิเตอร์อินพุต

  • เพิ่มคำอธิบายประกอบ@Parameters ("myName")ลงในวิธีนี้ พารามิเตอร์จะถูกส่งผ่านค่าจาก testng.xml ซึ่งเราจะเห็นในขั้นตอนต่อไป

สร้างไฟล์คลาส java ชื่อ ParameterizedTest1.java ใน C:\>TestNG_WORKSPACE.

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class ParameterizedTest1 {
   @Test
   @Parameters("myName")
   public void parameterTest(String myName) {
      System.out.println("Parameterized value is : " + myName);
   }
}

สร้าง testng.xml

สร้าง testng.xml ใน C:\>TestNG_WORKSPACE เพื่อดำเนินการกรณีทดสอบ

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
   
      <parameter name = "myName" value="manisha"/> 
      
      <classes>
         <class name = "ParameterizedTest1" />
      </classes>
      
   </test>
</suite>

เรายังสามารถกำหนดพารามิเตอร์ในระดับ <suite> สมมติว่าเราได้กำหนดmyNameทั้งในระดับ <suite> และ <test> ในกรณีเช่นนี้จะใช้กฎการกำหนดขอบเขตปกติ หมายความว่าคลาสใด ๆ ในแท็ก <test> จะเห็นค่าของพารามิเตอร์ที่กำหนดใน <test> ในขณะที่คลาสในไฟล์ testng.xml ที่เหลือจะเห็นค่าที่กำหนดใน <suite>

รวบรวมคลาสกรณีทดสอบโดยใช้ javac

C:\TestNG_WORKSPACE>javac ParameterizedTest1.java

ตอนนี้เรียกใช้ testng.xml ซึ่งจะเรียกใช้เมธอดparameterTest TestNG จะพยายามค้นหาพารามิเตอร์ชื่อmyNameก่อนในแท็ก <ทดสอบ> จากนั้นหากไม่พบก็จะค้นหาในแท็ก <suit> ที่ล้อมรอบไว้

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

ตรวจสอบผลลัพธ์

Parameterized value is : manisha

===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================

TestNG จะพยายามแปลงค่าที่ระบุใน testng.xml เป็นประเภทพารามิเตอร์ของคุณโดยอัตโนมัติ ประเภทที่รองรับมีดังนี้ -

  • String
  • int/Integer
  • boolean/Boolean
  • byte/Byte
  • char/Character
  • double/Double
  • float/Float
  • long/Long
  • short/Short

การส่งผ่านพารามิเตอร์ด้วยDataproviders

เมื่อคุณต้องการส่งผ่านพารามิเตอร์ที่ซับซ้อนหรือพารามิเตอร์ที่จำเป็นต้องสร้างจาก Java (อ็อบเจ็กต์ที่ซับซ้อนอ็อบเจ็กต์ที่อ่านจากไฟล์คุณสมบัติหรือฐานข้อมูล ฯลฯ ) พารามิเตอร์สามารถส่งผ่านโดยใช้ Dataproviders

ผู้ให้บริการข้อมูลเป็นวิธีการที่มีคำอธิบายประกอบ @DataProvider. คำอธิบายประกอบนี้มีแอตทริบิวต์สตริงเดียวเท่านั้น: ชื่อ หากไม่ได้ระบุชื่อชื่อของผู้ให้บริการข้อมูลจะตั้งค่าเริ่มต้นเป็นชื่อของเมธอดโดยอัตโนมัติ ผู้ให้บริการข้อมูลส่งคืนอาร์เรย์ของวัตถุ

ตัวอย่างต่อไปนี้สาธิตวิธีใช้ผู้ให้บริการข้อมูล ตัวอย่างแรกเกี่ยวกับ @DataProvider โดยใช้ Vector, String หรือ Integer เป็นพารามิเตอร์และตัวอย่างที่สองเกี่ยวกับ @DataProvider โดยใช้ object เป็นพารามิเตอร์

ตัวอย่าง 1

ที่นี่ @DataProvider ส่ง Integer และ Boolean เป็นพารามิเตอร์

Create Java class

สร้างคลาส java ชื่อ PrimeNumberChecker.java คลาสนี้ตรวจสอบว่าตัวเลขเป็นจำนวนเฉพาะหรือไม่ สร้างชั้นเรียนนี้ในC:\>TestNG_WORKSPACE.

public class PrimeNumberChecker {
   public Boolean validate(final Integer primeNumber) {
   
      for (int i = 2; i < (primeNumber / 2); i++) {
         if (primeNumber % i == 0) {
            return false;
         }
      }
      return true;
   }
}

Create Test Case Class

  • สร้างคลาสทดสอบ java เช่น ParamTestWithDataProvider1.java

  • กำหนดเมธอด primeNumbers () ซึ่งกำหนดให้เป็นผู้ให้บริการข้อมูลโดยใช้คำอธิบายประกอบ วิธีนี้ส่งคืนอาร์เรย์ของวัตถุ

  • เพิ่มวิธีการทดสอบ testPrimeNumberChecker () ในคลาสทดสอบของคุณ วิธีนี้ใช้จำนวนเต็มและบูลีนเป็นพารามิเตอร์อินพุต วิธีนี้ตรวจสอบว่าพารามิเตอร์ที่ส่งผ่านเป็นจำนวนเฉพาะหรือไม่

  • เพิ่มคำอธิบายประกอบ@Test (dataProvider = "test1")ลงในวิธีนี้ แอตทริบิวต์ dataProvider ถูกจับคู่กับ "test1"

สร้างไฟล์คลาส java ชื่อ ParamTestWithDataProvider1.java ใน C:\>TestNG_WORKSPACE.

import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class ParamTestWithDataProvider1 {
   private PrimeNumberChecker primeNumberChecker;

   @BeforeMethod
   public void initialize() {
      primeNumberChecker = new PrimeNumberChecker();
   }

   @DataProvider(name = "test1")
   public static Object[][] primeNumbers() {
      return new Object[][] {{2, true}, {6, false}, {19, true}, {22, false}, {23, true}};
   }

   // This test will run 4 times since we have 5 parameters defined
   @Test(dataProvider = "test1")
   public void testPrimeNumberChecker(Integer inputNumber, Boolean expectedResult) {
      System.out.println(inputNumber + " " + expectedResult);
      Assert.assertEquals(expectedResult, primeNumberChecker.validate(inputNumber));
   }
}

Create testng.xml

สร้าง testng.xml C:\>TestNG_WORKSPACE เพื่อดำเนินการกรณีทดสอบ

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
      <classes>
         <class name = "ParamTestWithDataProvider1" />
      </classes>
   </test>
</suite>

คอมไพล์คลาสกรณีทดสอบโดยใช้ javac

C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java

ตอนนี้เรียกใช้ testng.xml

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

ตรวจสอบผลลัพธ์

2 true
   6 false
   19 true
   22 false
   23 true

===============================================
   Suite1
   Total tests run: 5, Failures: 0, Skips: 0
===============================================

ตัวอย่าง 2

ที่นี่ @DataProvider ส่ง Object เป็นพารามิเตอร์

Create Java class

สร้างคลาส java Bean.java ซึ่งเป็นอ็อบเจ็กต์ธรรมดาที่มีเมธอด get / set ใน C:\>TestNG_WORKSPACE.

public class Bean {
   private String val;
   private int i;
   
   public Bean(String val, int i) {
      this.val = val;
      this.i = i;
   }
   
   public String getVal() {
      return val;
   }
   
   public void setVal(String val) {
      this.val = val;
   }
   
   public int getI() {
      return i;
   }
   
   public void setI(int i) {
      this.i = i;
   }
}

Create Test Case Class

  • สร้างคลาสทดสอบ java เช่น ParamTestWithDataProvider2.java

  • กำหนดเมธอด primeNumbers () ซึ่งกำหนดให้เป็นผู้ให้บริการข้อมูลโดยใช้คำอธิบายประกอบ วิธีนี้ส่งคืนอาร์เรย์ของวัตถุ

  • เพิ่มวิธีการทดสอบ testMethod () ในชั้นเรียนทดสอบของคุณ วิธีนี้ใช้ object bean เป็นพารามิเตอร์

  • เพิ่มคำอธิบายประกอบ@Test (dataProvider = "test1")ลงในวิธีนี้ แอตทริบิวต์ dataProvider ถูกจับคู่กับ "test1"

สร้างไฟล์คลาส java ชื่อ ParamTestWithDataProvider2.java ใน C:\>TestNG_WORKSPACE.

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class ParamTestWithDataProvider2 {
   @DataProvider(name = "test1")
   public static Object[][] primeNumbers() {
      return new Object[][] { { new Bean("hi I am the bean", 111) } };
   }

   @Test(dataProvider = "test1")
   public void testMethod(Bean myBean) {
      System.out.println(myBean.getVal() + " " + myBean.getI());
   }
}

Create testng.xml

สร้าง testng.xml ใน C:\>TestNG_WORKSPACE เพื่อดำเนินการกรณีทดสอบ

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
      <classes>
         <class name = "ParamTestWithDataProvider2" />
      </classes>
   </test>
</suite>

รวบรวมคลาสกรณีทดสอบโดยใช้ javac

C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java

ตอนนี้เรียกใช้ testng.xml

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

ตรวจสอบผลลัพธ์

hi I am the bean 111

===============================================
   Suite1
   Total tests run: 1, Failures: 0, Skips: 0
===============================================

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

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

ให้เรามีตัวอย่างเพื่อแสดงให้เห็นถึงความสามารถที่น่าทึ่งของ TestNG

สร้าง JUnit Test Case Class

สร้างคลาส java ซึ่งเป็นคลาสทดสอบ JUnit, TestJunit.java ใน C:\>TestNG_WORKSPACE.

import org.junit.Test;
import static org.testng.AssertJUnit.assertEquals;

public class TestJunit {
   @Test
   public void testAdd() {
      String str = "Junit testing using TestNG";
      AssertEquals("Junit testing using TestNG",str);
   }
}

ตอนนี้ขอเขียน testng.xml ใน C:\>TestNG_WORKSPACEซึ่งจะมีแท็ก <suite> ดังนี้ -

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name = "Converted JUnit suite" >
   <test name = "JUnitTests" junit="true">
      <classes>
         <class name = "TestJunit" />
      </classes>
   </test>
</suite>

ในการดำเนินการกรณีทดสอบ JUnit ให้กำหนดคุณสมบัติjunit = "true"ดังใน xml ด้านบน คลาสกรณีทดสอบ JUnit TestJunit ถูกกำหนดในชื่อคลาส

สำหรับ JUnit 4 TestNG จะใช้org.junit.runner.JUnitCore runner เพื่อทำการทดสอบของคุณ

รวบรวมคลาส java ทั้งหมดโดยใช้ javac

C:\TestNG_WORKSPACE>javac TestJunit.java

ตอนนี้เรียกใช้ testng.xml ซึ่งจะเรียกใช้กรณีทดสอบ JUnit เป็น TestNG

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE:C:\TestNG_WORKSPACE\lib\junit-4.11.jar" org.testng.TestNG testng.xml

ที่นี่เราได้วาง junit-4.11.jar ไว้ใต้ C: \ TestNG_WORKSPACE \ lib \ junit-4.11.jar

ตรวจสอบผลลัพธ์

===============================================
   Converted JUnit suite

   Total tests run: 1, Failures: 0, Skips: 0
===============================================

การรายงานเป็นส่วนที่สำคัญที่สุดของการดำเนินการทดสอบเนื่องจากจะช่วยให้ผู้ใช้เข้าใจผลลัพธ์ของการดำเนินการทดสอบจุดล้มเหลวและสาเหตุของความล้มเหลว ในทางกลับกันการบันทึกเป็นสิ่งสำคัญที่จะต้องคอยติดตามขั้นตอนการดำเนินการหรือการดีบักในกรณีที่เกิดความล้มเหลว

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

มีสองวิธีในการสร้างรายงานด้วย TestNG -

  • Listeners- สำหรับการใช้งานคลาส Listener คลาสจะต้องใช้อินเทอร์เฟซorg.testng.ITestListener คลาสเหล่านี้ได้รับการแจ้งเตือนที่รันไทม์โดย TestNG เมื่อการทดสอบเริ่มต้นเสร็จสิ้นล้มเหลวข้ามหรือผ่านไป

  • Reporters- สำหรับการใช้งานคลาสการรายงานคลาสจะต้องใช้อินเทอร์เฟซorg.testng.IReporter คลาสเหล่านี้เรียกว่าเมื่อการรันชุดโปรแกรมทั้งหมดสิ้นสุดลง อ็อบเจ็กต์ที่มีข้อมูลของการทดสอบทั้งหมดจะถูกส่งผ่านไปยังคลาสนี้เมื่อถูกเรียก

ในบทนี้เราจะมีสี่ตัวอย่างที่แตกต่างกันเพื่อแสดงให้เห็นถึงสี่กรณีที่แตกต่างกันของการรายงานและการบันทึก

ซีเนียร์ กรณีและตัวอย่าง
1 การบันทึกแบบกำหนดเอง

ตัวอย่างนี้แสดงวิธีการเขียนคนตัดไม้ของคุณเอง

2 Custom Reporter

ตัวอย่างนี้แสดงให้เห็นถึงวิธีการเขียนนักข่าวของคุณเอง

3 รายงาน HTML และ XML

ตัวอย่างนี้แสดงรายงาน HTML และ XML เริ่มต้นที่สร้างโดย TestNG

4 รายงาน JUnit

ตัวอย่างนี้แสดงวิธีสร้างรายงาน JUnit จากรายงาน TestNG

ในบทนี้เราจะสาธิตวิธีเรียกใช้ TestNG โดยใช้ ANT ทำตามขั้นตอนด้านล่าง -

ขั้นตอนที่ 1: ดาวน์โหลด Apache Ant

ดาวน์โหลดApache Antเวอร์ชันล่าสุด

ระบบปฏิบัติการ ชื่อที่เก็บถาวร
Windows apache-ant-1.8.4-bin.zip
ลินุกซ์ apache-ant-1.8.4-bin.tar.gz
Mac apache-ant-1.8.4-bin.tar.gz

ขั้นตอนที่ 2: ตั้งค่า Ant Environment

ตั้งค่า ANT_HOMEตัวแปรสภาพแวดล้อมเพื่อชี้ไปยังตำแหน่งไดเร็กทอรีฐานซึ่งไลบรารี ANT ถูกเก็บไว้ในเครื่องของคุณ สมมติว่าเราเก็บ Ant libraries ไว้ในโฟลเดอร์ apache-ant-1.8.4 โฟลเดอร์

ระบบปฏิบัติการ เอาต์พุต
Windows ตั้งค่าตัวแปรสภาพแวดล้อม ANT_HOME เป็น C: \ Program Files \ Apache Software Foundation \ apache-ant-1.8.4
ลินุกซ์ ส่งออก ANT_HOME = / usr / local / apache-ant-1.8.4
Mac ส่งออก ANT_HOME = / Library / apache-ant-1.8.4

ผนวกตำแหน่งคอมไพเลอร์ Ant เข้ากับ System Path ดังนี้ -

ระบบปฏิบัติการ คำอธิบาย
Windows ต่อท้ายสตริง% ANT_HOME \ bin ที่ส่วนท้ายของตัวแปรระบบ Path
ลินุกซ์ ส่งออกเส้นทาง =$PATH:$ANT_HOME / bin /
Mac ไม่จำเป็นต้องใช้.

ขั้นตอนที่ 3: ดาวน์โหลด TestNG Archive

ดาวน์โหลดไฟล์ jar ที่ต้องการ http://www.testng.org.

ระบบปฏิบัติการ ชื่อที่เก็บถาวร
Windows testng-6.8.jar
ลินุกซ์ testng-6.8.jar
Mac testng-6.8.jar

ขั้นตอนที่ 4: สร้างโครงสร้างโครงการ

  • สร้างโฟลเดอร์ TestNGWithAnt ใน C:\>TestNG_WORKSPACE.

  • สร้างโฟลเดอร์ src ใน C:\>TestNG_WORKSPACE>TestNGWithAnt.

  • สร้างโฟลเดอร์ test ใน C:\>TestNG_WORKSPACE>TestNGWithAnt.

  • สร้างโฟลเดอร์ lib ใน C:\>TestNG_WORKSPACE>TestNGWithAnt.

  • สร้าง MessageUtil ชั้นเรียนใน C:\>TestNG_WORKSPACE>TestNGWithAnt>src โฟลเดอร์

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message) {
      this.message = message; 
   }

   // prints the message
   public void printMessage() {
      System.out.println(message);
      return message;
   }   

   // add "Hi!" to the message
   public String salutationMessage() {
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}
  • สร้างคลาส TestMessageUtil ใน C:\>TestNG_WORKSPACE>TestNGWithAnt>src โฟลเดอร์

import org.testng.Assert;
import org.testng.annotations.Test;


public class TestMessageUtil {
   String message = "Manisha";	
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");     
      Assert.assertEquals(message,messageUtil.printMessage());
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Manisha";
      Assert.assertEquals(message,messageUtil.salutationMessage());
   }
}
  • คัดลอก testng-6.8.jar ใน C:\>TestNG_WORKSPACE>TestNGWithAnt>lib โฟลเดอร์

สร้าง ANT build.xml

ขั้นแรกเราต้องกำหนดภารกิจ TestNG Ant ดังนี้ -

<taskdef name = "testng" classname = "org.testng.TestNGAntTask">
   <classpath>
      <pathelement location = "lib/testng-6.8.jar"/>
   </classpath>
</taskdef>

จากนั้นเราจะใช้ <testng> ภารกิจใน Ant เพื่อดำเนินการกรณีทดสอบ TestNG ของเรา

build.xml ไฟล์มีดังนี้ -

<project name = "TestNGTest" default = "test" basedir = ".">

   <!-- Define <testng> task -->

   <taskdef name = "testng" classname = "org.testng.TestNGAntTask">
      <classpath>
         <pathelement location = "lib/testng-6.8.jar"/>
      </classpath>
   </taskdef>

   <property name = "testdir" location = "test" />
   <property name = "srcdir" location = "src" />
   <property name = "libdir" location = "lib" />
   <property name = "full-compile" value="true" />
   
   <path id = "classpath.base"/>
   <path id = "classpath.test">
   
   <fileset dir = "${libdir}"> <include name = "**/*.jar" /> </fileset> <pathelement location = "${testdir}" />
   <pathelement location = "${srcdir}" /> <path refid = "classpath.base" /> </path> <target name = "clean" > <delete verbose="${full-compile}">
         <fileset dir = "${testdir}" includes="**/*.class" /> </delete> </target> <target name = "compile" depends="clean"> <javac srcdir = "${srcdir}" destdir = "${testdir}" verbose="${full-compile}">
         <classpath refid = "classpath.test"/>
      </javac>
   </target>
   
   <target name = "test" depends="compile">
      <testng outputdir = "${testdir}" classpathref="classpath.test"> <xmlfileset dir = "${srcdir}" includes="testng.xml"/> 
      </testng>
   </target>
   
</project>

รันคำสั่ง Ant ต่อไปนี้

C:\TestNG_WORKSPACE\TestNGWithAnt>ant

ตรวจสอบผลลัพธ์

test:
   [testng] [TestNG] Running:
   [testng]   C:\TestNG_WORKSPACE\TestNGWithAnt\src\testng.xml
   [testng] 
   [testng] Inside testPrintMessage()
   [testng] Manisha
   [testng] Inside testSalutationMessage()
   [testng] Hi!Manisha
   [testng] 
   [testng] ===============================================
   [testng] Plug ANT test Suite
   [testng] Total tests run: 2, Failures: 0, Skips: 0
   [testng] ===============================================
   [testng] 

BUILD SUCCESSFUL
Total time: 1 second

ในการตั้งค่า TestNG ด้วย Eclipse ให้ทำตามขั้นตอนด้านล่าง -

ขั้นตอนที่ 1: ดาวน์โหลด TestNG Archive

ดาวน์โหลดไฟล์ jar TestNG เวอร์ชันล่าสุดจาก http://www.testng.org

ระบบปฏิบัติการ ชื่อที่เก็บถาวร
Windows testng-6.8.jar
ลินุกซ์ testng-6.8.jar
Mac testng-6.8.jar

เราถือว่าคุณได้คัดลอกไฟล์ JAR ด้านบนในโฟลเดอร์ C: \> TestNG

ขั้นตอนที่ 2: ตั้งค่าสภาพแวดล้อม Eclipse

  • เปิด eclipse →คลิกขวาที่โปรเจ็กต์และไปที่ property → Build Path → Configure Build Path และเพิ่ม testng-6.8.jar ในไลบรารีโดยใช้ปุ่มAdd External Jar

  • เราถือว่า Eclipse ของคุณมีปลั๊กอิน TestNG ในตัว หากไม่สามารถใช้งานได้โปรดรับเวอร์ชันล่าสุดโดยใช้ไซต์อัปเดต

    • ใน Eclipse IDE ของคุณเลือกการปรับปรุงความช่วยเหลือ / Software / ค้นหาและติดตั้ง

    • ค้นหาคุณสมบัติใหม่ที่จะติดตั้ง

    • ไซต์ระยะไกลใหม่

    • สำหรับ Eclipse 3.4 ขึ้นไปให้ป้อน http://beust.com/eclipse.

    • สำหรับ Eclipse 3.3 และต่ำกว่าให้ป้อน http://beust.com/eclipse1.

    • ตรวจสอบให้แน่ใจในช่อง URL ที่มีการตรวจสอบและคลิกถัดไป

    • จากนั้น Eclipse จะแนะนำคุณตลอดกระบวนการ

ตอนนี้ Eclipse ของคุณพร้อมแล้วสำหรับการพัฒนากรณีทดสอบ TestNG

ขั้นตอนที่ 3: ตรวจสอบการติดตั้ง TestNG ใน Eclipse

  • สร้างโครงการ TestNGProject ใน Eclipse ที่ตำแหน่งใดก็ได้

  • สร้างคลาส MessageUtil เพื่อทดสอบในโครงการ

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message) {
      this.message = message;
   }

   // prints the message
   public String printMessage() {
      System.out.println(message);
      return message;
   }   
}
  • สร้างคลาสทดสอบ TestNGExample ในโปรเจ็กต์

import org.testng.Assert;
import org.testng.annotations.Test;

public class TestNGExample {
   String message = "Hello World";	
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {	  
      Assert.assertEquals(message,messageUtil.printMessage());
   }
}

โครงสร้างโครงการควรเป็นดังนี้ -

สุดท้ายตรวจสอบผลลัพธ์ของโปรแกรมโดยคลิกขวาที่โปรแกรมและเรียกใช้เป็น TestNG

ตรวจสอบผลลัพธ์