TestNG - Parametrisierter Test
Eine weitere interessante Funktion in TestNG ist parametric testing. In den meisten Fällen stoßen Sie auf ein Szenario, in dem die Geschäftslogik eine sehr unterschiedliche Anzahl von Tests erfordert.Parameterized tests Ermöglichen Sie Entwicklern, denselben Test immer wieder mit unterschiedlichen Werten auszuführen.
Mit TestNG können Sie Parameter auf zwei verschiedene Arten direkt an Ihre Testmethoden übergeben:
- Mit testng.xml
- Mit Datenanbietern
Übergeben von Parametern mit testng.xml
Mit dieser Technik definieren Sie die einfachen Parameter in der Datei testng.xml und verweisen dann auf diese Parameter in den Quelldateien. Lassen Sie uns ein Beispiel zeigen, wie diese Technik zum Übergeben von Parametern verwendet wird.
Erstellen Sie eine Testfallklasse
Erstellen Sie eine Java-Testklasse, z. B. ParameterizedTest1.java.
Fügen Sie Ihrer Testklasse die Testmethode parameterTest () hinzu. Diese Methode verwendet eine Zeichenfolge als Eingabeparameter.
Fügen Sie dieser Methode die Anmerkung @Parameters ("myName") hinzu . Dem Parameter würde ein Wert aus testng.xml übergeben, den wir im nächsten Schritt sehen werden.
Erstellen Sie eine Java-Klassendatei mit dem Namen ParameterizedTest1.java im 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);
}
}
Erstellen Sie testng.xml
Erstellen Sie testng.xml in C:\>TestNG_WORKSPACE Testfälle ausführen.
<?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>
Wir können die Parameter auch auf der Ebene <suite> definieren. Angenommen, wir haben myName sowohl auf der Ebene <suite> als auch auf der Ebene <test> definiert. In solchen Fällen gelten die Regeln für den regelmäßigen Geltungsbereich. Dies bedeutet, dass für jede Klasse im <test> -Tag der Wert des in <test> definierten Parameters angezeigt wird, während für die Klassen in der restlichen Datei testng.xml der in <suite> definierte Wert angezeigt wird.
Kompilieren Sie die Testfallklasse mit javac.
C:\TestNG_WORKSPACE>javac ParameterizedTest1.java
Führen Sie nun testng.xml aus, wodurch die parameterTest- Methode ausgeführt wird. TestNG versucht, einen Parameter mit dem Namen myName zuerst im <test> -Tag zu finden. Wenn er dann nicht gefunden werden kann, sucht er im <suit> -Tag, das ihn einschließt.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Überprüfen Sie die Ausgabe.
Parameterized value is : manisha
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================
TestNG versucht automatisch, den in testng.xml angegebenen Wert in den Typ Ihres Parameters zu konvertieren. Hier sind die unterstützten Typen -
- String
- int/Integer
- boolean/Boolean
- byte/Byte
- char/Character
- double/Double
- float/Float
- long/Long
- short/Short
Übergeben von Parametern mit Datenanbietern
Wenn Sie komplexe Parameter oder Parameter übergeben müssen, die aus Java erstellt werden müssen (komplexe Objekte, aus einer Eigenschaftendatei oder einer Datenbank gelesene Objekte usw.), können Parameter mithilfe von Datenanbietern übergeben werden.
Ein Datenprovider ist eine mit Anmerkungen versehene Methode @DataProvider. Diese Anmerkung hat nur ein Zeichenfolgenattribut: ihren Namen. Wenn der Name nicht angegeben wird, wird standardmäßig der Name der Methode standardmäßig verwendet. Ein Datenprovider gibt ein Array von Objekten zurück.
Die folgenden Beispiele zeigen die Verwendung von Datenanbietern. Im ersten Beispiel geht es um @DataProvider mit Vektor, String oder Integer als Parameter, und im zweiten Beispiel geht es um @DataProvider mit Objekt als Parameter.
Beispiel 1
Hier übergibt der @DataProvider Integer und Boolean als Parameter.
Create Java class
Erstellen Sie eine Java-Klasse mit dem Namen PrimeNumberChecker.java. Diese Klasse prüft, ob die Zahl eine Primzahl ist. Erstellen Sie diese Klasse inC:\>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
Erstellen Sie eine Java-Testklasse, z. B. ParamTestWithDataProvider1.java.
Definieren Sie die Methode primeNumbers (), die mithilfe der Annotation als Datenprovider definiert wird. Diese Methode gibt ein Array von Objekten zurück.
Fügen Sie Ihrer Testklasse die Testmethode testPrimeNumberChecker () hinzu. Diese Methode verwendet eine Ganzzahl und einen Booleschen Wert als Eingabeparameter. Diese Methode überprüft, ob der übergebene Parameter eine Primzahl ist.
Fügen Sie dieser Methode die Anmerkung @Test (dataProvider = "test1") hinzu . Das Attribut dataProvider ist "test1" zugeordnet.
Erstellen Sie eine Java-Klassendatei mit dem Namen ParamTestWithDataProvider1.java im 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
Erstellen Sie eine testng.xml C:\>TestNG_WORKSPACE Testfall (e) ausführen.
<?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>
Kompilieren Sie die Testfallklasse mit javac.
C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java
Führen Sie nun testng.xml aus.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Überprüfen Sie die Ausgabe.
2 true
6 false
19 true
22 false
23 true
===============================================
Suite1
Total tests run: 5, Failures: 0, Skips: 0
===============================================
Beispiel 2
Hier übergibt der @DataProvider Object als Parameter.
Create Java class
Erstellen Sie eine Java-Klasse Bean.java, bei der es sich um ein einfaches Objekt mit get / set-Methoden handelt 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
Erstellen Sie eine Java-Testklasse, z. B. ParamTestWithDataProvider2.java.
Definieren Sie die Methode primeNumbers (), die mithilfe von Annotation als Datenprovider definiert wird. Diese Methode gibt ein Array von Objekten zurück.
Fügen Sie Ihrer Testklasse die Testmethode testMethod () hinzu. Diese Methode verwendet eine Objekt-Bean als Parameter.
Fügen Sie dieser Methode die Anmerkung @Test (dataProvider = "test1") hinzu . Das Attribut dataProvider ist "test1" zugeordnet.
Erstellen Sie eine Java-Klassendatei mit dem Namen ParamTestWithDataProvider2.java in 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
Erstellen Sie testng.xml in C:\>TestNG_WORKSPACE Testfälle ausführen.
<?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>
Kompilieren Sie die Testfallklasse mit javac.
C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java
Führen Sie nun testng.xml aus.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Überprüfen Sie die Ausgabe.
hi I am the bean 111
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================