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
===============================================