TestNG - Uji Parameter

Fitur menarik lainnya yang tersedia di TestNG adalah parametric testing. Dalam kebanyakan kasus, Anda akan menemukan skenario di mana logika bisnis membutuhkan jumlah pengujian yang sangat bervariasi.Parameterized tests memungkinkan pengembang untuk menjalankan pengujian yang sama berulang kali menggunakan nilai yang berbeda.

TestNG memungkinkan Anda meneruskan parameter langsung ke metode pengujian Anda dengan dua cara berbeda -

  • Dengan testng.xml
  • Dengan Penyedia Data

Meneruskan Parameter dengan testng.xml

Dengan teknik ini, Anda menentukan parameter sederhana di file testng.xml dan kemudian mereferensikan parameter tersebut di file sumber. Mari kita punya contoh untuk mendemonstrasikan bagaimana menggunakan teknik ini untuk melewatkan parameter.

Buat Kelas Kasus Uji

  • Buat kelas pengujian java, misalnya, ParameterizedTest1.java.

  • Tambahkan metode pengujian parameterTest () ke kelas pengujian Anda. Metode ini mengambil string sebagai parameter masukan.

  • Tambahkan anotasi @Parameters ("myName") ke metode ini. Parameter akan diberi nilai dari testng.xml, yang akan kita lihat di langkah berikutnya.

Buat file kelas java bernama ParameterizedTest1.java di 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);
   }
}

Buat testng.xml

Buat testng.xml di C:\>TestNG_WORKSPACE untuk menjalankan kasus uji.

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

Kami juga dapat menentukan parameter di tingkat <suite>. Misalkan kita telah mendefinisikan myName pada level <suite> dan <test>. Dalam kasus seperti itu, aturan pelingkupan reguler berlaku. Artinya, setiap kelas di dalam tag <test> akan melihat nilai parameter yang ditentukan di <test>, sedangkan kelas di file testng.xml lainnya akan melihat nilai yang ditentukan di <suite>.

Kompilasi kelas kasus uji menggunakan javac.

C:\TestNG_WORKSPACE>javac ParameterizedTest1.java

Sekarang, jalankan testng.xml, yang akan menjalankan metode parameterTest . TestNG akan mencoba menemukan parameter bernama myName terlebih dahulu di tag <test>, dan kemudian, jika tidak dapat menemukannya, ia akan mencari di tag <suit> yang membungkusnya.

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

Verifikasi hasilnya.

Parameterized value is : manisha

===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================

TestNG secara otomatis akan mencoba untuk mengubah nilai yang ditentukan dalam testng.xml ke jenis parameter Anda. Berikut adalah jenis yang didukung -

  • String
  • int/Integer
  • boolean/Boolean
  • byte/Byte
  • char/Character
  • double/Double
  • float/Float
  • long/Long
  • short/Short

Meneruskan Parameter dengan Penyedia Data

Saat Anda perlu meneruskan parameter kompleks atau parameter yang perlu dibuat dari Java (objek kompleks, objek yang dibaca dari file properti atau database, dll.), Parameter dapat diteruskan menggunakan Dataproviders.

Penyedia Data adalah metode yang dianotasi @DataProvider. Anotasi ini hanya memiliki satu atribut string: namanya. Jika nama tidak diberikan, nama penyedia data secara otomatis default ke nama metode. Penyedia data mengembalikan larik objek.

Contoh berikut menunjukkan cara menggunakan penyedia data. Contoh pertama adalah tentang @DataProvider menggunakan parameter Vector, String, atau Integer, dan contoh kedua tentang @DataProvider menggunakan objek sebagai parameter.

Contoh 1

Di sini, @DataProvider meneruskan Integer dan Boolean sebagai parameter.

Create Java class

Buat kelas java bernama PrimeNumberChecker.java. Kelas ini memeriksa apakah bilangan tersebut adalah bilangan prima. Buat kelas ini diC:\>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

  • Buat kelas pengujian java, misalnya, ParamTestWithDataProvider1.java.

  • Tentukan metode primeNumbers (), yang didefinisikan sebagai penyedia Data menggunakan anotasi. Metode ini mengembalikan larik objek.

  • Tambahkan metode pengujian testPrimeNumberChecker () ke kelas pengujian Anda. Metode ini menggunakan Integer dan Boolean sebagai parameter masukan. Metode ini memvalidasi jika parameter yang dilewatkan adalah bilangan prima.

  • Tambahkan anotasi @Test (dataProvider = "test1") ke metode ini. Atribut dataProvider dipetakan ke "test1".

Buat file kelas java bernama ParamTestWithDataProvider1.java di 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

Buat testng.xml C:\>TestNG_WORKSPACE untuk mengeksekusi kasus Uji.

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

Kompilasi kelas Test case menggunakan javac.

C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java

Sekarang, jalankan testng.xml.

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

Verifikasi hasilnya.

2 true
   6 false
   19 true
   22 false
   23 true

===============================================
   Suite1
   Total tests run: 5, Failures: 0, Skips: 0
===============================================

Contoh 2

Di sini, @DataProvider meneruskan Objek sebagai parameter.

Create Java class

Buat kelas java Bean.java, yang merupakan objek sederhana dengan metode get / set, di 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

  • Buat kelas pengujian java, misalnya, ParamTestWithDataProvider2.java.

  • Tentukan metode primeNumbers (), yang didefinisikan sebagai penyedia data menggunakan anotasi. Metode ini mengembalikan larik objek.

  • Tambahkan metode pengujian testMethod () ke kelas pengujian Anda. Metode ini mengambil objek kacang sebagai parameter.

  • Tambahkan anotasi @Test (dataProvider = "test1") ke metode ini. Atribut dataProvider dipetakan ke "test1".

Buat file kelas java bernama ParamTestWithDataProvider2.java di 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

Buat testng.xml di C:\>TestNG_WORKSPACE untuk menjalankan kasus uji.

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

Kompilasi kelas kasus uji menggunakan javac.

C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java

Sekarang, jalankan testng.xml.

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

Verifikasi hasilnya.

hi I am the bean 111

===============================================
   Suite1
   Total tests run: 1, Failures: 0, Skips: 0
===============================================