TestNG - परिमाणित परीक्षण

TestNG में उपलब्ध एक और दिलचस्प विशेषता है parametric testing। ज्यादातर मामलों में, आप एक ऐसे परिदृश्य में आएंगे, जहाँ व्यापार तर्क के लिए अलग-अलग परीक्षणों की संख्या की आवश्यकता होती है।Parameterized tests डेवलपर्स को विभिन्न मूल्यों का उपयोग करके एक ही परीक्षण को बार-बार चलाने की अनुमति दें।

TestNG आपको दो अलग-अलग तरीकों से सीधे अपने परीक्षण विधियों में पैरामीटर पास करने देता है -

  • Testng.xml के साथ
  • डेटा प्रदाताओं के साथ

Testng.xml के साथ पासिंग पैरामीटर

इस तकनीक के साथ, आप testng.xml फ़ाइल में सरल मापदंडों को परिभाषित करते हैं और फिर उन मापदंडों को स्रोत फ़ाइलों में संदर्भित करते हैं। आइए हमारे पास एक उदाहरण है कि मापदंडों को पारित करने के लिए इस तकनीक का उपयोग कैसे करें।

टेस्ट केस क्लास बनाएं

  • एक जावा टेस्ट क्लास बनाएं, कहते हैं, ParameterizedTest1.java।

  • परीक्षण पद्धति पैरामीटर जोड़ें () को अपने परीक्षण वर्ग में जोड़ें। यह विधि इनपुट पैरामीटर के रूप में एक स्ट्रिंग लेती है।

  • इस विधि में एनोटेशन @Parameters ("myName") जोड़ें । पैरामीटर को testng.xml से एक मान दिया जाएगा, जिसे हम अगले चरण में देखेंगे।

नाम से एक जावा वर्ग फ़ाइल बनाएँ 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>

हम <सूट> स्तर पर मापदंडों को भी परिभाषित कर सकते हैं। मान लीजिए कि हमने myName को <सूट> और <परीक्षण> दोनों स्तरों पर परिभाषित किया है। ऐसे मामलों में, नियमित स्कूपिंग नियम लागू होते हैं। इसका मतलब है कि <परीक्षण> टैग के अंदर किसी भी वर्ग को <परीक्षण> में परिभाषित पैरामीटर का मूल्य दिखाई देगा, जबकि बाकी testng.xml फ़ाइल में वर्ग <सूट> में परिभाषित मूल्य देखेंगे।

Javac का उपयोग करके परीक्षण केस क्लास संकलित करें।

C:\TestNG_WORKSPACE>javac ParameterizedTest1.java

अब, testng.xml चलाएं, जो पैरामीटरटेस्ट विधि को चलाएगा । TestNG <परीक्षण> टैग में पहले myName नामक एक पैरामीटर को खोजने की कोशिश करेगा , और फिर, अगर यह नहीं मिल सकता है, तो यह <सूट> टैग में खोज करता है जो इसे संलग्न करता है।

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

डाटाप्रोवाइडर्स के साथ पासिंग पैरामीटर्स

जब आपको जटिल मापदंडों या मापदंडों को पारित करने की आवश्यकता होती है जो जावा (जटिल वस्तुओं, एक संपत्ति फ़ाइल या डेटाबेस, आदि से पढ़ी जाने वाली वस्तुओं) से बनाने की आवश्यकता होती है, तो मापदंडों को डाटाप्रोवाइडर्स का उपयोग करके पारित किया जा सकता है।

डेटा प्रोवाइडर एक विधि है जिसके साथ एनोटेट किया गया है @DataProvider। इस एनोटेशन में केवल एक स्ट्रिंग विशेषता है: इसका नाम। यदि नाम की आपूर्ति नहीं की जाती है, तो डेटा प्रदाता का नाम स्वचालित रूप से विधि के नाम पर चूक करता है। डेटा प्रदाता वस्तुओं की एक सरणी देता है।

निम्न उदाहरण प्रदर्शित करते हैं कि डेटा प्रदाताओं का उपयोग कैसे करें। पहला उदाहरण वैक्टर के रूप में वेक्टर, स्ट्रिंग या इंटेगर का उपयोग करके @DataProvider के बारे में है, और दूसरा उदाहरण पैरामीटर के रूप में ऑब्जेक्ट का उपयोग करके @DataProvider के बारे में है।

उदाहरण 1

यहां, @DataProvider इंटर्जर और बूलियन को पैरामीटर के रूप में पास करता है।

Create Java class

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

  • एक जावा टेस्ट क्लास बनाएं, कहें, ParamTestWithDataProvider1.java।

  • विधि प्राइम्यून्स () को परिभाषित करें, जो एनोटेशन का उपयोग करके डेटा प्रदाता के रूप में परिभाषित किया गया है। यह विधि ऑब्जेक्ट की एक सरणी देता है।

  • परीक्षण विधि testPrimeNumberChecker () को अपने परीक्षण वर्ग में जोड़ें। यह विधि इनपुट मापदंडों के रूप में एक इंटेगर और बूलियन लेती है। यह विधि मान्य है यदि पारित पैरामीटर एक प्रमुख संख्या है।

  • इस पद्धति में एनोटेशन @Test (dataProvider = "test1") जोड़ें । विशेषता dataProvider "test1" के लिए मैप किया गया है।

नाम से एक जावा वर्ग फ़ाइल बनाएँ 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 ऑब्जेक्ट को पैरामीटर के रूप में पास करता है।

Create Java class

एक जावा क्लास बीन बनाइए। जावा, जो कि एक सरल ऑब्जेक्ट है, जिसमें गेट / सेट मेथड्स हैं 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।

  • विधि प्राइम्यून्स () को परिभाषित करें, जो एनोटेशन का उपयोग करके डेटा प्रदाता के रूप में परिभाषित किया गया है। यह विधि ऑब्जेक्ट की एक सरणी देता है।

  • परीक्षण विधि testMethod () को अपने परीक्षण वर्ग में जोड़ें। यह विधि ऑब्जेक्ट बीन को पैरामीटर के रूप में लेती है।

  • इस पद्धति में एनोटेशन @Test (dataProvider = "test1") जोड़ें । विशेषता dataProvider "test1" के लिए मैप किया गया है।

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