TestNG - Test sparametryzowany
Inną interesującą funkcją dostępną w TestNG jest parametric testing. W większości przypadków napotkasz scenariusz, w którym logika biznesowa wymaga bardzo zróżnicowanej liczby testów.Parameterized tests pozwalają programistom na wielokrotne przeprowadzanie tego samego testu przy użyciu różnych wartości.
TestNG umożliwia przekazywanie parametrów bezpośrednio do metod testowych na dwa różne sposoby -
- Z testng.xml
- Z dostawcami danych
Przekazywanie parametrów z testng.xml
Za pomocą tej techniki definiujesz proste parametry w pliku testng.xml , a następnie odwołujesz się do tych parametrów w plikach źródłowych. Podajmy przykład, aby zademonstrować, jak używać tej techniki do przekazywania parametrów.
Utwórz klasę przypadku testowego
Utwórz klasę testową Java, na przykład ParameterizedTest1.java.
Dodaj metodę testową parameterTest () do swojej klasy testowej. Ta metoda przyjmuje ciąg jako parametr wejściowy.
Dodaj adnotację @Parameters („myName”) do tej metody. Do parametru zostanie przekazana wartość z pliku testng.xml, co zobaczymy w następnym kroku.
Utwórz plik klasy Java o nazwie ParameterizedTest1.java w 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);
}
}
Utwórz plik testng.xml
Utwórz plik testng.xml w formacie C:\>TestNG_WORKSPACE do wykonania przypadków testowych.
<?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>
Możemy również zdefiniować parametry na poziomie <suite>. Załóżmy, że zdefiniowaliśmy myName na obu poziomach <suite> i <test>. W takich przypadkach obowiązują zwykłe zasady określania zakresu. Oznacza to, że każda klasa wewnątrz tagu <test> zobaczy wartość parametru zdefiniowanego w <test>, podczas gdy klasy w pozostałej części pliku testng.xml zobaczą wartość zdefiniowaną w <suite>.
Skompiluj klasę przypadku testowego przy użyciu javac.
C:\TestNG_WORKSPACE>javac ParameterizedTest1.java
Teraz uruchom testng.xml, który uruchomi metodę parameterTest . TestNG spróbuje znaleźć parametr o nazwie myName najpierw w tagu <test>, a następnie, jeśli nie może go znaleźć, wyszuka w tagu <suit>, który go otacza.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Sprawdź dane wyjściowe.
Parameterized value is : manisha
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================
TestNG automatycznie spróbuje przekonwertować wartość określoną w testng.xml na typ parametru. Oto obsługiwane typy -
- String
- int/Integer
- boolean/Boolean
- byte/Byte
- char/Character
- double/Double
- float/Float
- long/Long
- short/Short
Przekazywanie parametrów z dostawcami danych
Gdy trzeba przekazać złożone parametry lub parametry, które muszą zostać utworzone z języka Java (złożone obiekty, obiekty odczytane z pliku właściwości lub bazy danych itp.), Parametry można przekazać za pomocą dostawców danych.
Dostawca danych to metoda z adnotacją @DataProvider. Ta adnotacja ma tylko jeden atrybut ciągu: jego nazwę. Jeśli nazwa nie jest podana, nazwa dostawcy danych automatycznie przyjmuje nazwę metody. Dostawca danych zwraca tablicę obiektów.
Poniższe przykłady pokazują, jak używać dostawców danych. Pierwszy przykład dotyczy @DataProvider używającego Vector, String lub Integer jako parametru, a drugi przykład dotyczy @DataProvider używającego obiektu jako parametru.
Przykład 1
Tutaj @DataProvider przekazuje jako parametr liczbę całkowitą i logiczną.
Create Java class
Utwórz klasę Java o nazwie PrimeNumberChecker.java. Ta klasa sprawdza, czy liczba jest liczbą pierwszą. Utwórz tę klasę wC:\>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
Utwórz klasę testową Java, na przykład ParamTestWithDataProvider1.java.
Zdefiniuj metodę primeNumbers (), która jest zdefiniowana jako dostawca danych przy użyciu adnotacji. Ta metoda zwraca tablicę obiektów.
Dodaj metodę testową testPrimeNumberChecker () do swojej klasy testowej. Ta metoda przyjmuje wartości typu Integer i Boolean jako parametry wejściowe. Ta metoda sprawdza, czy przekazany parametr jest liczbą pierwszą.
Dodaj adnotację @Test (dataProvider = "test1") do tej metody. Atrybut dataProvider jest mapowany na „test1”.
Utwórz plik klasy Java o nazwie ParamTestWithDataProvider1.java w 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
Utwórz plik testng.xml C:\>TestNG_WORKSPACE do wykonania przypadków testowych.
<?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>
Skompiluj klasę przypadku testowego przy użyciu javac.
C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java
Teraz uruchom testng.xml.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Sprawdź dane wyjściowe.
2 true
6 false
19 true
22 false
23 true
===============================================
Suite1
Total tests run: 5, Failures: 0, Skips: 0
===============================================
Przykład 2
Tutaj @DataProvider przekazuje Object jako parametr.
Create Java class
Utwórz klasę java Bean.java, która jest prostym obiektem z metodami get / set, w formacie 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
Utwórz klasę testową Java, na przykład ParamTestWithDataProvider2.java.
Zdefiniuj metodę primeNumbers (), która jest zdefiniowana jako dostawca danych za pomocą adnotacji. Ta metoda zwraca tablicę obiektów.
Dodaj metodę testową testMethod () do swojej klasy testowej. Ta metoda przyjmuje jako parametr komponent bean obiektu.
Dodaj adnotację @Test (dataProvider = "test1") do tej metody. Atrybut dataProvider jest mapowany na „test1”.
Utwórz plik klasy java o nazwie ParamTestWithDataProvider2.java w programie 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
Utwórz plik testng.xml w formacie C:\>TestNG_WORKSPACE do wykonania przypadków testowych.
<?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>
Skompiluj klasę przypadku testowego przy użyciu javac.
C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java
Teraz uruchom testng.xml.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Sprawdź dane wyjściowe.
hi I am the bean 111
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================