TestNG - การทดสอบตามพารามิเตอร์

คุณสมบัติที่น่าสนใจอีกอย่างที่มีอยู่ใน 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
===============================================