TestNG - Parametreli Test
TestNG'de bulunan bir başka ilginç özellik ise parametric testing. Çoğu durumda, iş mantığının çok çeşitli testler gerektirdiği bir senaryo ile karşılaşırsınız.Parameterized tests geliştiricilerin aynı testi farklı değerler kullanarak defalarca çalıştırmasına olanak tanır.
TestNG, parametreleri iki farklı yoldan doğrudan test yöntemlerinize aktarmanıza olanak tanır -
- Testng.xml ile
- Veri Sağlayıcılarla
Testng.xml ile Parametreleri Geçirme
Bu teknikle, testng.xml dosyasında basit parametreleri tanımlar ve ardından kaynak dosyalarda bu parametrelere başvurursunuz . Parametreleri geçirmek için bu tekniğin nasıl kullanılacağını göstermek için bir örnek verelim.
Test Vaka Sınıfı Oluşturun
ParameterizedTest1.java gibi bir java test sınıfı oluşturun.
Test sınıfınıza test yöntemi parameterTest () ekleyin. Bu yöntem, girdi parametresi olarak bir dizge alır.
@Parameters ("myName") ek açıklamasını bu yönteme ekleyin . Parametre, bir sonraki adımda göreceğimiz testng.xml'den bir değer geçirilecektir.
Adlı bir java sınıf dosyası oluşturun ParameterizedTest1.java içinde 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 oluştur
İçinde testng.xml oluşturun C:\>TestNG_WORKSPACE test senaryolarını yürütmek için.
<?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>
Parametreleri <suite> seviyesinde de tanımlayabiliriz. MyName'i hem <suite> hem de <test> düzeyinde tanımladığımızı varsayalım . Bu tür durumlarda, normal kapsam belirleme kuralları geçerlidir. Bu, <test> etiketi içindeki herhangi bir sınıfın <test> içinde tanımlanan parametrenin değerini göreceği, testng.xml dosyasının geri kalanındaki sınıfların <suite> içinde tanımlanan değeri göreceği anlamına gelir.
Javac kullanarak test senaryosu sınıfını derleyin.
C:\TestNG_WORKSPACE>javac ParameterizedTest1.java
Şimdi, parameterTest yöntemini çalıştıracak testng.xml'yi çalıştırın . TestNG, önce <test> etiketinde myName adlı bir parametre bulmaya çalışır ve ardından bulamazsa, onu çevreleyen <suit> etiketinde arar.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Çıkışı doğrulayın.
Parameterized value is : manisha
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================
TestNG, testng.xml'de belirtilen değeri otomatik olarak parametrenizin türüne dönüştürmeyi deneyecektir. İşte desteklenen türler -
- String
- int/Integer
- boolean/Boolean
- byte/Byte
- char/Character
- double/Double
- float/Float
- long/Long
- short/Short
Veri Sağlayıcılarla Parametreleri Geçirme
Java'dan oluşturulması gereken karmaşık parametreleri veya parametreleri (karmaşık nesneler, bir özellik dosyasından veya bir veritabanından okunan nesneler, vb.) İletmeniz gerektiğinde, parametreler Veri Sağlayıcılar kullanılarak geçirilebilir.
Veri Sağlayıcı, ek not verilen bir yöntemdir @DataProvider. Bu ek açıklamanın yalnızca bir dize özelliği vardır: adı. Ad sağlanmadıysa, veri sağlayıcısının adı varsayılan olarak yöntemin adını alır. Bir veri sağlayıcı, bir dizi nesne döndürür.
Aşağıdaki örnekler, veri sağlayıcıların nasıl kullanılacağını göstermektedir. İlk örnek, parametre olarak Vector, String veya Integer kullanan @DataProvider hakkındadır ve ikinci örnek, parametre olarak nesne kullanan @DataProvider hakkındadır.
örnek 1
Burada @DataProvider, parametre olarak Tamsayı ve Boolean'ı iletir.
Create Java class
PrimeNumberChecker.java adlı bir java sınıfı oluşturun. Bu sınıf, sayının asal olup olmadığını kontrol eder. Bu sınıfı şurada oluşturC:\>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
ParamTestWithDataProvider1.java gibi bir java test sınıfı oluşturun.
Ek açıklamayı kullanarak Veri sağlayıcı olarak tanımlanan primeNumbers () yöntemini tanımlayın. Bu yöntem bir dizi nesne döndürür.
Test yöntemini testPrimeNumberChecker () test sınıfınıza ekleyin. Bu yöntem, girdi parametreleri olarak bir Tamsayı ve Boole alır. Bu yöntem, geçirilen parametrenin bir asal sayı olup olmadığını doğrular.
@Test (dataProvider = "test1") ek açıklamasını bu yönteme ekleyin . DataProvider özelliği "test1" ile eşleştirilir.
Adlı bir java sınıf dosyası oluşturun ParamTestWithDataProvider1.java içinde 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
Bir testng.xml oluşturun C:\>TestNG_WORKSPACE Test senaryolarını yürütmek için.
<?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 kullanarak Test durumu sınıfını derleyin.
C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java
Şimdi testng.xml dosyasını çalıştırın.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Çıkışı doğrulayın.
2 true
6 false
19 true
22 false
23 true
===============================================
Suite1
Total tests run: 5, Failures: 0, Skips: 0
===============================================
Örnek 2
Burada @DataProvider, Object'i parametre olarak iletir.
Create Java class
Get / set yöntemleriyle basit bir nesne olan bir java sınıfı Bean.java oluşturun. 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
ParamTestWithDataProvider2.java gibi bir java test sınıfı oluşturun.
Ek açıklama kullanılarak veri sağlayıcı olarak tanımlanan primeNumbers () yöntemini tanımlayın. Bu yöntem bir nesne dizisi döndürür.
Test yöntemini testMethod () test sınıfınıza ekleyin. Bu yöntem, parametre olarak bir nesne çekirdeğini alır.
@Test (dataProvider = "test1") ek açıklamasını bu yönteme ekleyin . DataProvider özelliği "test1" ile eşleştirilir.
İçinde ParamTestWithDataProvider2.java adlı bir java sınıfı dosyası oluşturun. 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
İçinde testng.xml oluşturun C:\>TestNG_WORKSPACE test senaryolarını yürütmek için.
<?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 kullanarak test senaryosu sınıfını derleyin.
C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java
Şimdi testng.xml dosyasını çalıştırın.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Çıkışı doğrulayın.
hi I am the bean 111
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================