ผู้ให้บริการข้อมูล & TestNG XML: การกำหนดพารามิเตอร์เป็น Selenium(ตัวอย่าง)

ในขณะที่เราสร้างซอฟต์แวร์ เราหวังเสมอว่าซอฟต์แวร์ควรจะทำงานแตกต่างออกไปกับชุดข้อมูลอื่น เมื่อถึงเวลา การทดสอบ ซอฟต์แวร์ชิ้นเดียวกัน เราไม่สามารถทดสอบด้วยข้อมูลเพียงชุดเดียวได้อย่างไม่ยุติธรรม เราต้องตรวจสอบอีกครั้งว่าระบบของเรากำลังใช้ชุดค่าผสมทั้งหมดที่คาดว่าจะรองรับ เพื่อสิ่งนั้น เราจำเป็นต้องกำหนดพารามิเตอร์การทดสอบของเรา ต่อไปนี้เป็นการกำหนดพารามิเตอร์ในภาพ

การกำหนดพารามิเตอร์ใน Selenium

การกำหนดพารามิเตอร์ใน Selenium เป็นกระบวนการในการกำหนดพารามิเตอร์ของสคริปต์ทดสอบเพื่อส่งข้อมูลหลายรายการไปยังแอปพลิเคชันขณะรันไทม์ เป็นกลยุทธ์ในการดำเนินการซึ่งจะรันกรณีทดสอบหลายครั้งโดยอัตโนมัติโดยใช้ค่าที่แตกต่างกัน แนวคิดที่ทำได้โดยการกำหนดพารามิเตอร์ของสคริปต์ทดสอบเรียกว่า การทดสอบที่ขับเคลื่อนด้วยข้อมูล.

ประเภทของการกำหนดพารามิเตอร์ใน TestNG-

เพื่อให้การกำหนดพารามิเตอร์ชัดเจนยิ่งขึ้น เราจะพิจารณาตัวเลือกการกำหนดพารามิเตอร์ในเฟรมเวิร์กที่ได้รับความนิยมมากที่สุดกรอบหนึ่ง Selenium เว็บไดรเวอร์ – TestNG.

มี สองทาง ซึ่งเราสามารถบรรลุถึงการกำหนดพารามิเตอร์ได้ TestNG

  1. ด้วยความช่วยเหลือของ พารามิเตอร์ คำอธิบายประกอบ และ TestNG XML ไฟล์

    ประเภทของการกำหนดพารามิเตอร์ใน TestNG

  2. ด้วยความช่วยเหลือของ ผู้ให้บริการข้อมูล คำอธิบายประกอบ

    ประเภทของการกำหนดพารามิเตอร์ใน TestNG

ประเภทของการกำหนดพารามิเตอร์ใน TestNG

พารามิเตอร์จาก Testng.xml สามารถเป็นชุดหรือระดับการทดสอบ

พารามิเตอร์จาก DataProvider สามารถใช้ Method และ ITestContext เป็นพารามิเตอร์ได้

มาศึกษารายละเอียดกันดีกว่า –

พารามิเตอร์ คำอธิบายประกอบใน TestNG

พารามิเตอร์ คำอธิบายประกอบใน TestNG เป็นวิธีที่ใช้ในการส่งผ่านค่าไปยังวิธีทดสอบเป็นอาร์กิวเมนต์โดยใช้ไฟล์ .xml ผู้ใช้อาจจำเป็นต้องส่งค่าไปยังวิธีทดสอบในระหว่างรันไทม์ วิธีการใส่คำอธิบายประกอบ @Parameters สามารถใช้ในวิธีใดก็ได้ที่มีคำอธิบายประกอบแบบ @Test, @Before, @After หรือ @Factory

คำอธิบายพารามิเตอร์ด้วย Testng.xml

เลือกการกำหนดพารามิเตอร์โดยใช้คำอธิบายประกอบเมื่อคุณต้องการจัดการกับความซับซ้อน และจำนวนการรวมอินพุตมีน้อยลง

มาดูกันว่าวิธีนี้ทำงานอย่างไร

สถานการณ์ทดสอบ

ขั้นตอนที่ 1) เปิดเบราว์เซอร์ & ไปที่ Google.com

ขั้นตอนที่ 2) ป้อนคำค้นหา

การใส่คำอธิบายพารามิเตอร์ด้วย Testng.Xml

ขั้นตอนที่ 3) ตรวจสอบว่าค่าที่ป้อนเหมือนกับค่าที่ได้รับจากข้อมูลทดสอบของเรา

ขั้นตอนที่ 4) ทำซ้ำ 2 และ 3 จนกระทั่งป้อนค่าทั้งหมด

ผู้เขียนทดสอบ ค้นหาคีย์
Guru99 อินเดีย
Krishna สหรัฐอเมริกา
ภุพเพช สาธารณรัฐประชาชนจีน

นี่คือตัวอย่างวิธีการดำเนินการโดยไม่มีพารามิเตอร์

package parameters;

import org.testng.annotations.Test;
import org.testng.AssertJUnit;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class NoParameterWithTestNGXML {
	String driverPath = "C:\\geckodriver.exe";
	WebDriver driver;
    
    @Test
    public void testNoParameter() throws InterruptedException{
        String author = "guru99";
        String searchKey = "india";
        
        System.setProperty("webdriver.gecko.driver", driverPath);        
        driver= new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        
        driver.get("https://google.com");
        WebElement searchText = driver.findElement(By.name("q"));
        //Searching text in google text box
        searchText.sendKeys(searchKey);
        
        System.out.println("Welcome ->"+author+" Your search key is->"+searchKey);
                System.out.println("Thread will sleep now");
        
        Thread.sleep(3000);
        System.out.println("Value in Google Search Box = "+searchText.getAttribute("value") +" ::: Value given by input = "+searchKey);
        //verifying the value in google search box
        AssertJUnit.assertTrue(searchText.getAttribute("value").equalsIgnoreCase(searchKey));
}
}

การศึกษาตัวอย่างข้างต้น ลองนึกดูว่าโค้ดจะซับซ้อนแค่ไหนเมื่อเราใช้ชุดอินพุต 3 ชุด

ตอนนี้ เรามากำหนดพารามิเตอร์โดยใช้ TestNG

เพื่อทำเช่นนั้นคุณจะต้อง

  • สร้างไฟล์ XML ซึ่งจะเก็บพารามิเตอร์
  • ในการทดสอบ ให้เพิ่มคำอธิบายประกอบ @Parameters

การใส่คำอธิบายพารามิเตอร์ด้วย Testng.Xml

นี่คือรหัสที่สมบูรณ์

ระดับการทดสอบ TestNG. Xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestSuite" thread-count="3" >
<parameter name="author" value="Guru99" />
<parameter name="searchKey" value="India" />
<test name="testGuru">
<parameter name="searchKey" value="UK" />
<classes>
<class name="parameters.ParameterWithTestNGXML">
</class>
</classes>
</test>
</suite>

พารามิเตอร์ด้วยTestNGไฟล์ XML.java

package parameters;

import org.testng.AssertJUnit;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

import org.testng.annotations.Optional;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class ParameterWithTestNGXML {
	String driverPath = "C:\\geckodriver.exe";
	WebDriver driver;
    @Test
    @Parameters({"author","searchKey"})
    public void testParameterWithXML( @Optional("Abc") String author,String searchKey) throws InterruptedException{

        System.setProperty("webdriver.gecko.driver", driverPath);
        driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://google.com");

        WebElement searchText = driver.findElement(By.name("q"));
        //Searching text in google text box
        searchText.sendKeys(searchKey);

        System.out.println("Welcome ->"+author+" Your search key is->"+searchKey);
        System.out.println("Thread will sleep now");
        Thread.sleep(3000);
        System.out.println("Value in Google Search Box = "+searchText.getAttribute("value") +" ::: Value given by input = "+searchKey);
        //verifying the value in google search box
        AssertJUnit.assertTrue(searchText.getAttribute("value").equalsIgnoreCase(searchKey));

}
}

คำแนะนำในการรันสคริปต์ เลือกไฟล์ XML และเรียกใช้เป็น Test NG Suite

คลิกขวาที่ไฟล์ .xml -> Run as -> ทดสอบ ห้องสวีท (หมายเหตุ : ห้องสวีท)

พารามิเตอร์ด้วยTestNGไฟล์ XML.java

ตอนนี้สามารถกำหนดพารามิเตอร์ได้ 2 ระดับ

  1. ระดับชุด – พารามิเตอร์ภายใน แท็กของ TestNG ไฟล์ XML จะเป็นพารามิเตอร์ระดับชุด
  2. ระดับการทดสอบ — พารามิเตอร์ภายใน แท็กของการทดสอบไฟล์ XML จะเป็นพารามิเตอร์ระดับการทดสอบ

นี่คือการทดสอบเดียวกันกับพารามิเตอร์ระดับชุด

พารามิเตอร์ด้วยTestNGไฟล์ XML.java

หมายเหตุ: ในกรณีที่ชื่อพารามิเตอร์เหมือนกันในระดับชุดและระดับการทดสอบ พารามิเตอร์ระดับการทดสอบจะได้รับการตั้งค่ามากกว่าระดับชุด ดังนั้น ในกรณีนั้น คลาสทั้งหมดภายในระดับการทดสอบนั้นจะใช้พารามิเตอร์ที่ถูกแทนที่ร่วมกัน และคลาสอื่นๆ ที่อยู่นอกระดับการทดสอบจะใช้พารามิเตอร์ระดับชุดร่วมกัน

พารามิเตอร์ด้วยTestNGไฟล์ XML.java

การแก้ไขปัญหา

ปัญหา # 1 ไม่สามารถกำหนดชนิดค่าพารามิเตอร์ใน testng.xml เป็นพารามิเตอร์ของวิธีการทดสอบที่สอดคล้องกันได้ ส่งผลให้เกิดข้อผิดพลาด

พิจารณาตัวอย่างต่อไปนี้

การแก้ไขปัญหา

ในที่นี้ แอตทริบิวต์ 'author' เท่ากับ 'Guru99' ซึ่งเป็นสตริง และในวิธีทดสอบที่สอดคล้องกัน แอตทริบิวต์ดังกล่าวคาดว่าจะได้ค่าจำนวนเต็ม ดังนั้นเราจะได้รับข้อยกเว้นที่นี่

ปัญหา # 2 @Parameters ของคุณไม่มีค่าที่สอดคล้องกันในการทดสอบ.xml

คุณสามารถแก้ไขสถานการณ์นี้ได้โดยการเพิ่ม @ไม่จำเป็น คำอธิบายประกอบ ในพารามิเตอร์ที่เกี่ยวข้องในวิธีทดสอบ

การแก้ไขปัญหา

ฉบับที่ 3: คุณต้องการทดสอบค่าหลายค่าของพารามิเตอร์เดียวกันโดยใช้ Testng.xml

คำตอบง่ายๆ คือไม่สามารถทำได้! คุณสามารถมีพารามิเตอร์ที่แตกต่างกันได้หลายตัว แต่แต่ละพารามิเตอร์จะมีได้เพียงค่าเดียวเท่านั้น ซึ่งจะช่วยป้องกันค่าฮาร์ดโค้ดลงในสคริปต์ ทำให้โค้ดสามารถนำมาใช้ซ้ำได้ คิดว่ามันเป็นไฟล์กำหนดค่าสำหรับสคริปต์ของคุณ หากคุณต้องการใช้หลายค่าสำหรับพารามิเตอร์หนึ่งๆ ให้ใช้ DataProviders

ผู้ให้บริการข้อมูลใน TestNG

ผู้ให้บริการข้อมูลใน TestNG เป็นวิธีการที่ใช้เมื่อผู้ใช้จำเป็นต้องส่งพารามิเตอร์ที่ซับซ้อน พารามิเตอร์ที่ซับซ้อนจะต้องสร้างจาก Java เช่น วัตถุที่ซับซ้อน วัตถุจากไฟล์คุณสมบัติหรือจากฐานข้อมูลสามารถส่งต่อได้โดยวิธีการของผู้ให้บริการข้อมูล วิธีการนี้ได้รับการอธิบายโดย @DataProvider และจะส่งคืนอาร์เรย์ของวัตถุ

พารามิเตอร์ที่ใช้ Dataprovider

คำอธิบายประกอบ @Parameters นั้นง่าย แต่ในการทดสอบกับข้อมูลหลายชุด เราจำเป็นต้องใช้ Data Provider

ในการกรอกแบบฟอร์มบนเว็บนับพันรายการโดยใช้เฟรมเวิร์กการทดสอบของเรา เราจำเป็นต้องมีวิธีการที่แตกต่างกันซึ่งสามารถให้ชุดข้อมูลขนาดใหญ่มากแก่เราในโฟลว์การดำเนินการเดียว

แนวคิดที่ขับเคลื่อนด้วยข้อมูลนี้บรรลุผลสำเร็จโดย @DataProvider คำอธิบายประกอบใน TestNG.

พารามิเตอร์ที่ใช้ Dataprovider

มันมีเพียงหนึ่งเดียว คุณลักษณะ 'ชื่อ'- หากคุณไม่ได้ระบุแอตทริบิวต์ชื่อ ชื่อของ DataProvider จะเหมือนกับชื่อวิธีการที่เกี่ยวข้อง

ผู้ให้บริการข้อมูลส่งคืน วัตถุ Java สองมิติ วิธีทดสอบและวิธีการทดสอบจะเรียกใช้ M ครั้งในอาร์เรย์วัตถุประเภท M*N ตัวอย่างเช่น หาก DataProvider ส่งคืนอาร์เรย์ของออบเจ็กต์ 2*3 ชุดทดสอบที่เกี่ยวข้องจะถูกเรียกใช้ 2 ครั้งโดยมี 3 พารามิเตอร์ในแต่ละครั้ง

พารามิเตอร์ที่ใช้ Dataprovider

ตัวอย่างที่สมบูรณ์

พารามิเตอร์ที่ใช้ Dataprovider

package parameters;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class ParameterByDataprovider {
    WebDriver driver;
    String driverPath = "C:\\geckodriver.exe";

    @BeforeTest
    public void setup(){
        //Create firefox driver object
         System.setProperty("webdriver.gecko.driver", driverPath);
         driver = new FirefoxDriver();
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         driver.get("https://google.com");
    }
 
    /** Test case to verify google search box
     * @param author
     * @param searchKey
     * @throws InterruptedException
     */

    @Test(dataProvider="SearchProvider")
    public void testMethod(String author,String searchKey) throws InterruptedException{
    {
        WebElement searchText = driver.findElement(By.name("q"));
        //search value in google searchbox
        searchText.sendKeys(searchKey);
        System.out.println("Welcome ->"+author+" Your search key is->"+searchKey);
        Thread.sleep(3000);
        String testValue = searchText.getAttribute("value");
        System.out.println(testValue +"::::"+searchKey);
        searchText.clear();
        //Verify if the value in google search box is correct
        Assert.assertTrue(testValue.equalsIgnoreCase(searchKey));
    }
    }
    /**
     * @return Object[][] where first column contains 'author'
     * and second column contains 'searchKey'
     */

    @DataProvider(name="SearchProvider")
    public Object[][] getDataFromDataprovider(){
    return new Object[][] 
    	{
            { "Guru99", "India" },
            { "Krishna", "UK" },
            { "Bhupesh", "USA" }
        };

    }

}

เรียกใช้ DataProvider จากคลาสอื่น

ตามค่าเริ่มต้น DataProvider จะอยู่ในคลาสเดียวกันกับที่วิธีการทดสอบหรือคลาสพื้นฐาน ในการที่จะใส่ไว้ในคลาสอื่น เราจำเป็นต้องสร้าง data provider method ให้เป็น static และใน test method เราจำเป็นต้องเพิ่มแอ็ตทริบิวต์ dataProviderClass in @ทดสอบ คำอธิบายประกอบ

เรียกใช้ DataProvider จากคลาสที่ต่างกัน

ตัวอย่างรหัส

เรียกใช้ DataProvider จากคลาสที่ต่างกัน

TestClass parameterDataproviderWithClassLevel.java

package parameters;

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class ParameterDataproviderWithClassLevel {
    WebDriver driver;
    String driverPath = "C:\\geckodriver.exe";
    
 	@BeforeTest
    public void setup(){
 		System.setProperty("webdriver.gecko.driver", driverPath);
		driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://google.com");
    }
   
    @Test(dataProvider="SearchProvider",dataProviderClass=DataproviderClass.class)
    public void testMethod(String author,String searchKey) throws InterruptedException{
        
        WebElement searchText = driver.findElement(By.name("q"));
        //Search text in google text box
        searchText.sendKeys(searchKey);
        System.out.println("Welcome ->"+author+" Your search key is->"+searchKey);
        Thread.sleep(3000);
        //get text from search box
        String testValue = searchText.getAttribute("value");
        System.out.println(testValue +"::::"+searchKey);
        searchText.clear();
        //verify if search box has correct value
        Assert.assertTrue(testValue.equalsIgnoreCase(searchKey));
   }
}

DataproviderClass.java

package parameters;

import org.testng.annotations.DataProvider;
public class DataproviderClass {
        @DataProvider(name="SearchProvider")
        public static Object[][] getDataFromDataprovider(){
            return new Object[][] {
                { "Guru99", "India" },
                { "Krishna", "UK" },
                { "Bhupesh", "USA" }
            };  
}}

ประเภทของพารามิเตอร์ใน Dataprovider

มีพารามิเตอร์สองประเภทที่รองรับโดยวิธี DataProvider

วิธี- หากไฟล์ เหมือนกัน DataProvider ควรทำงานแตกต่างออกไปด้วยวิธีการทดสอบที่แตกต่างกัน ให้ใช้พารามิเตอร์ Method

ประเภทของพารามิเตอร์ใน Dataprovider

ในตัวอย่างต่อไปนี้

  • เราตรวจสอบว่าชื่อวิธีการคือ testMethodA หรือไม่
  • ถ้าใช่ให้ส่งคืนค่าหนึ่งชุด
  • มิฉะนั้นจะส่งคืนค่าอีกชุดหนึ่ง
package parameters;

import java.lang.reflect.Method;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class ParameterByMethodInDataprovider{

    WebDriver driver;
    String driverPath = "C:\\geckodriver.exe";
     
    @BeforeTest
    public void setup(){
    	System.setProperty("webdriver.gecko.driver", driverPath);
    	driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://google.com");
    }

    @Test(dataProvider="SearchProvider")
    public void testMethodA(String author,String searchKey) throws InterruptedException{
        
    	WebElement searchText = driver.findElement(By.name("q"));
        //Search text in search box
        searchText.sendKeys(searchKey);
        //Print author and search string
        System.out.println("Welcome ->"+author+" Your search key is->"+searchKey);
        Thread.sleep(3000);
        String testValue = searchText.getAttribute("value");
        System.out.println(testValue +"::::"+searchKey);
        searchText.clear();
        //Verify if google text box is showing correct value
        Assert.assertTrue(testValue.equalsIgnoreCase(searchKey));
    }
      
    @Test(dataProvider="SearchProvider")
    public void testMethodB(String searchKey) throws InterruptedException{
        {
        	WebElement searchText = driver.findElement(By.name("q"));
            //Search text in search box
            searchText.sendKeys(searchKey);
            //Print only search string
            System.out.println("Welcome ->Unknown user Your search key is->"+searchKey);
            Thread.sleep(3000);
            String testValue = searchText.getAttribute("value");
            System.out.println(testValue +"::::"+searchKey);
            searchText.clear();
            //Verify if google text box is showing correct value
            Assert.assertTrue(testValue.equalsIgnoreCase(searchKey));
        }
    }    
    /**
     * Here DataProvider returning value on the basis of test method name
     * @param m
     * @return
     **/

    @DataProvider(name="SearchProvider")
    public Object[][] getDataFromDataprovider(Method m){
        if(m.getName().equalsIgnoreCase("testMethodA")){
        return new Object[][] {
                { "Guru99", "India" },
                { "Krishna", "UK" },
                { "Bhupesh", "USA" }
            };}
        else{
        return new Object[][] {
                { "Canada" },
                { "Russia" },
                { "Japan" }
            };}       
    }
}

นี่คือผลลัพธ์

ประเภทของพารามิเตอร์ใน Dataprovider

ITestContext– สามารถใช้เพื่อสร้างพารามิเตอร์ที่แตกต่างกันสำหรับกรณีทดสอบตามกลุ่ม

ในชีวิตจริง คุณสามารถใช้ ITestContext เพื่อเปลี่ยนแปลงค่าพารามิเตอร์ตามวิธีทดสอบ โฮสต์ และการกำหนดค่าของการทดสอบ

ประเภทของพารามิเตอร์ใน Dataprovider

ในตัวอย่างโค้ดต่อไปนี้

  • เรามี 2 กลุ่ม A และ B
  • วิธีการทดสอบแต่ละวิธีถูกกำหนดให้กับกลุ่ม
  • หากค่าของกลุ่มเป็น A ชุดข้อมูลเฉพาะจะถูกส่งกลับ
  • หากค่าของกลุ่มเป็น B ชุดข้อมูลอื่นจะถูกส่งกลับ
package parameters;

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.ITestContext;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class ParameterByITestContextInDataprovider {
	WebDriver driver;
	String driverPath = "C:\\geckodriver.exe";
	@BeforeTest(groups={"A","B"})
	public void setup(){
		System.setProperty("webdriver.gecko.driver", driverPath);
		  	driver = new FirefoxDriver();
			driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
			driver.get("https://google.com");
	}
	
	@Test(dataProvider="SearchProvider",groups="A")
	public void testMethodA(String author,String searchKey) throws InterruptedException{
		{
		  //search google textbox
			WebElement searchText = driver.findElement(By.name("q"));
			//search a value on it
			searchText.sendKeys(searchKey);
			System.out.println("Welcome ->"+author+" Your search key is->"+searchKey);
			Thread.sleep(3000);
			String testValue = searchText.getAttribute("value");
			System.out.println(testValue +"::::"+searchKey);
			searchText.clear();
			//verify correct value in searchbox
			Assert.assertTrue(testValue.equalsIgnoreCase(searchKey));
	}
	}
	
	@Test(dataProvider="SearchProvider",groups="B")
	public void testMethodB(String searchKey) throws InterruptedException{
		{
		  //find google search box
			WebElement searchText = driver.findElement(By.name("q"));
			//search a value on it
			searchText.sendKeys(searchKey);
			System.out.println("Welcome ->Unknown user Your search key is->"+searchKey);
			Thread.sleep(3000);
			String testValue = searchText.getAttribute("value");
			System.out.println(testValue +"::::"+searchKey);
			searchText.clear();
			//verify correct value in searchbox
			Assert.assertTrue(testValue.equalsIgnoreCase(searchKey));
	}
	}
	
	/**
	 * Here the DAtaProvider will provide Object array on the basis on ITestContext
	 * @param c
	 * @return
	 */
	@DataProvider(name="SearchProvider")
	public Object[][] getDataFromDataprovider(ITestContext c){
	Object[][] groupArray = null;
		for (String group : c.getIncludedGroups()) {
		if(group.equalsIgnoreCase("A")){
			groupArray = new Object[][] { 
					{ "Guru99", "India" }, 
					{ "Krishna", "UK" }, 
					{ "Bhupesh", "USA" } 
				};
		break;	
		}
			else if(group.equalsIgnoreCase("B"))
			{
			groupArray = new Object[][] { 
						{  "Canada" }, 
						{  "Russia" }, 
						{  "Japan" } 
					};
			}
		break;
	}
	return groupArray;		
	}
}

หมายเหตุ: หากคุณเรียกใช้คลาส testng โดยตรง ระบบจะเรียก dataprovider ก่อน ซึ่งไม่สามารถรับข้อมูลกลุ่มได้เนื่องจากไม่มีกลุ่มให้ใช้งาน แต่หากคุณเรียกใช้คลาสนี้ผ่าน testng.xml ระบบจะมีข้อมูลกลุ่มให้ใช้งานด้วย ITestContext แทน ใช้ XML ต่อไปนี้เพื่อเรียกใช้คลาส test

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="test-parameter">

  <test name="example1">

    <groups>
        <run>
            <include name="A" />
        </run>
    </groups>

    <classes>
       <class
        name="parameters.ParameterByITestContextInDataprovider" />
    </classes>

  </test>


  <test name="example2">

    <groups>
        <run>
            <include name="B" />
        </run>
    </groups>

    <classes>
       <class
        name="parameters.ParameterByITestContextInDataprovider" />
    </classes>

  </test>

</suite>

สรุป

  • การกำหนดพารามิเตอร์ จำเป็นต้องสร้าง การทดสอบที่ขับเคลื่อนด้วยข้อมูล.
  • TestNG รองรับการกำหนดพารามิเตอร์สองประเภทโดยใช้ @พารามิเตอร์+TestNG. Xml และการใช้@DataProvider
  • In @พารามิเตอร์+TestNG. Xml สามารถวางพารามิเตอร์ในระดับชุดและระดับการทดสอบได้ ถ้า

    มีการประกาศชื่อพารามิเตอร์เดียวกันในทั้งสองแห่ง พารามิเตอร์ระดับการทดสอบจะได้รับการตั้งค่ามากกว่าพารามิเตอร์ระดับชุด

  • โดยใช้ @Parameter+TestNG.xml สามารถตั้งค่าได้ครั้งละหนึ่งค่าเท่านั้น แต่ @DataProvider จะส่งคืน อาร์เรย์ 2d ของ Object.
  • หาก DataProvider มีอยู่ในคลาสอื่น ดังนั้นคลาสที่มีวิธีการทดสอบอยู่ผู้ให้บริการข้อมูล ควรจะเป็น วิธีการคงที่.
  • มีพารามิเตอร์สองตัวที่รองรับโดย ผู้ให้บริการข้อมูล เป็น วิธี และ ITestContext.