Πάροχος δεδομένων & TestNG XML: Παραμετροποίηση σε Selenium(Παράδειγμα)
Παραμετροποίηση σε Selenium
Παραμετροποίηση σε Selenium είναι μια διαδικασία παραμετροποίησης των δοκιμαστικών σεναρίων προκειμένου να περάσουν πολλά δεδομένα στην εφαρμογή κατά το χρόνο εκτέλεσης. Είναι μια στρατηγική εκτέλεσης που εκτελεί αυτόματα δοκιμαστικές περιπτώσεις πολλές φορές χρησιμοποιώντας διαφορετικές τιμές. Η έννοια που επιτυγχάνεται με την παραμετροποίηση των σεναρίων δοκιμής ονομάζεται Δοκιμές βάσει δεδομένων.
Τύπος παραμετροποίησης σε TestNG-
Για να γίνει πιο σαφής η παραμετροποίηση, θα εξετάσουμε τις επιλογές παραμετροποίησης σε ένα από τα πιο δημοφιλή πλαίσια Selenium Webdriver - TestNG.
Υπάρχουν δύο τρόποι με την οποία μπορούμε να επιτύχουμε παραμετροποίηση σε TestNG
Οι παράμετροι από το Testng.xml μπορούν να είναι σε επίπεδο πακέτου ή δοκιμαστικού επιπέδου
Η παράμετρος από το DataProvider μπορεί να λάβει ως παράμετρο το Method και το ITestContext.
Ας τα μελετήσουμε αναλυτικά –
Σχολιασμός παραμέτρων σε TestNG
Σχολιασμός παραμέτρων σε TestNG είναι μια μέθοδος που χρησιμοποιείται για τη μεταβίβαση τιμών στις μεθόδους δοκιμής ως ορίσματα χρησιμοποιώντας το αρχείο .xml. Ενδέχεται να απαιτείται από τους χρήστες να περάσουν τις τιμές στις μεθόδους δοκιμής κατά τη διάρκεια του χρόνου εκτέλεσης. Η μέθοδος σχολιασμού @Parameters μπορεί να χρησιμοποιηθεί σε οποιαδήποτε μέθοδο με σχολιασμό @Test, @Before, @After ή @Factory.
Σχολιασμός παραμέτρων με Testng.xml
Επιλέξτε παραμετροποίηση χρησιμοποιώντας σχολιασμούς όταν θέλετε να αντιμετωπίσετε την πολυπλοκότητα και ο αριθμός των συνδυασμών εισαγωγής είναι μικρότερος.
Ας δούμε πώς λειτουργεί αυτό
Σενάριο δοκιμής
Βήμα 1) Εκκινήστε το πρόγραμμα περιήγησης και μεταβείτε στο Google.com
Βήμα 2) Εισαγάγετε μια λέξη-κλειδί αναζήτησης
Βήμα 3) Βεβαιωθείτε ότι η τιμή που εισαγάγατε είναι ίδια με αυτή που παρέχεται από τα δεδομένα δοκιμής μας
Βήμα 4) Επαναλάβετε τα 2 & 3 μέχρι να εισαχθούν όλες οι τιμές
| Συγγραφέας δοκιμής | SearchKey |
|---|---|
| Guru99 | India |
| 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
<?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 -> Εκτέλεση ως -> Testng Σουίτα (Σημείωση: Σουίτα)
Τώρα, οι παράμετροι μπορούν να οριστούν σε 2 επίπεδα
- Επίπεδο σουίτας – Οι παράμετροι στο εσωτερικό του ετικέτα του TestNG Το αρχείο XML θα είναι μια παράμετρος επιπέδου σουίτας.
- Επίπεδο δοκιμής — Οι παράμετροι μέσα στο η ετικέτα δοκιμής του αρχείου XML θα είναι μια παράμετρος επιπέδου δοκιμής.
Εδώ είναι το ίδιο τεστ με παραμέτρους επιπέδου σουίτας
ΣΗΜΕΊΩΣΗ: Σε περίπτωση που το όνομα της παραμέτρου είναι το ίδιο σε επίπεδο σουίτας και σε επίπεδο δοκιμής, τότε η παράμετρος επιπέδου δοκιμής θα προτιμάται έναντι του επιπέδου σουίτας. Έτσι, σε αυτήν την περίπτωση, όλες οι κλάσεις εντός αυτού του επιπέδου δοκιμής θα μοιράζονται την παράμετρο που έχει παρακαμφθεί και άλλες κλάσεις που βρίσκονται εκτός του επιπέδου δοκιμής θα μοιράζονται την παράμετρο επιπέδου σουίτας.
Αντιμετώπιση προβλημάτων
Τεύχος #1 Η τιμή της παραμέτρου στο testng.xml δεν μπορεί να μεταδοθεί στην παράμετρο της αντίστοιχης μεθόδου δοκιμής, θα εμφανιστεί σφάλμα.
Εξετάστε το ακόλουθο παράδειγμα
Εδώ, το χαρακτηριστικό «συγγραφέας» ισούται με «Guru99' που είναι μια συμβολοσειρά και στην αντίστοιχη μέθοδο δοκιμής αναμένεται μια ακέραια τιμή, επομένως θα έχουμε μια εξαίρεση εδώ.
Τεύχος #2 Οι @Parameters σας δεν έχουν αντίστοιχη τιμή στο testing.xml.
Μπορείτε να λύσετε αυτήν την κατάσταση προσθέτοντας @προαιρετικός σχόλιο στην αντίστοιχη παράμετρο στη μέθοδο δοκιμής.
Τεύχος # 3: Θέλετε να δοκιμάσετε πολλές τιμές της ίδιας παραμέτρου χρησιμοποιώντας το Testng.xml
Η απλή απάντηση είναι ότι αυτό δεν μπορεί να γίνει! Μπορείτε να έχετε πολλές διαφορετικές παραμέτρους, αλλά κάθε παράμετρος μπορεί να έχει μόνο μία τιμή. Αυτό βοηθά στην αποτροπή κωδικοποίησης τιμών στο σενάριο. Αυτό κάνει τον κώδικα επαναχρησιμοποιήσιμο. Σκεφτείτε το ως αρχεία διαμόρφωσης για το σενάριό σας. Εάν θέλετε να χρησιμοποιήσετε πολλές τιμές για μια παράμετρο, χρησιμοποιήστε DataProviders
Πάροχος δεδομένων σε TestNG
Πάροχος δεδομένων σε TestNG είναι μια μέθοδος που χρησιμοποιείται όταν ένας χρήστης χρειάζεται να περάσει πολύπλοκες παραμέτρους. Οι σύνθετες παράμετροι πρέπει να δημιουργηθούν από Java όπως σύνθετα αντικείμενα, αντικείμενα από αρχεία ιδιοτήτων ή από βάση δεδομένων μπορούν να μεταβιβαστούν με τη μέθοδο παροχής δεδομένων. Η μέθοδος σχολιάζεται από το @DataProvider και επιστρέφει έναν πίνακα αντικειμένων.
Παράμετροι με χρήση του Dataprovider
Ο σχολιασμός @Parameters είναι εύκολος, αλλά για να δοκιμάσουμε με πολλαπλά σύνολα δεδομένων πρέπει να χρησιμοποιήσουμε το Data Provider.
Για να συμπληρώσουμε χιλιάδες φόρμες ιστού χρησιμοποιώντας το πλαίσιο δοκιμών μας, χρειαζόμαστε μια διαφορετική μεθοδολογία που μπορεί να μας δώσει ένα πολύ μεγάλο σύνολο δεδομένων σε μια ενιαία ροή εκτέλεσης.
Αυτή η ιδέα που βασίζεται στα δεδομένα επιτυγχάνεται με @DataProvider σχολιασμός σε TestNG.
Έχει μόνο ένα χαρακτηριστικό 'όνομα'. Εάν δεν καθορίσετε το χαρακτηριστικό name, τότε το όνομα του DataProvider θα είναι ίδιο με το όνομα της αντίστοιχης μεθόδου.
Ο πάροχος δεδομένων επιστρέφει ένα δισδιάστατο αντικείμενο JAVA στη μέθοδο δοκιμής και στη μέθοδο δοκιμής, θα καλέσει M φορές σε έναν πίνακα αντικειμένων τύπου M*N. Για παράδειγμα, εάν ο DataProvider επιστρέψει έναν πίνακα 2*3 αντικειμένων, η αντίστοιχη δοκιμαστική περίπτωση θα κληθεί 2 φορές με 3 παραμέτρους κάθε φορά.
Πλήρες Παράδειγμα
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 βρίσκεται στην ίδια κατηγορία όπου βρίσκεται η μέθοδος δοκιμής ή η βασική κλάση της. Για να το βάλουμε σε κάποια άλλη κλάση πρέπει να κάνουμε τη μέθοδο παροχής δεδομένων στατική και στη μέθοδο δοκιμής πρέπει να προσθέσουμε ένα χαρακτηριστικό dataProviderClass in @Δοκιμή σχόλιο.
Code Παράδειγμα
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 θα πρέπει να συμπεριφέρεται διαφορετικά με διαφορετική μέθοδο δοκιμής, χρησιμοποιήστε την παράμετρο Μέθοδος.
Στο παρακάτω παράδειγμα,
- Ελέγχουμε αν το όνομα της μεθόδου είναι 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" }
};}
}
}
Εδώ είναι η έξοδος
ITestContext– Μπορεί να χρησιμοποιηθεί για τη δημιουργία διαφορετικών παραμέτρων για δοκιμαστικές περιπτώσεις με βάση ομάδες.
Στην πραγματική ζωή, μπορείτε να χρησιμοποιήσετε το ITestContext για να αλλάξετε τις τιμές των παραμέτρων με βάση τις μεθόδους δοκιμής, τους κεντρικούς υπολογιστές, τις διαμορφώσεις της δοκιμής.
Στο παρακάτω παράδειγμα κώδικα
- Έχουμε 2 ομάδες Α & Β
- Κάθε μέθοδος δοκιμής εκχωρείται σε μια ομάδα
- Εάν η τιμή της ομάδας είναι Α, επιστρέφεται ένα συγκεκριμένο σύνολο δεδομένων
- Εάν η τιμή της ομάδας είναι Β, επιστρέφεται ένα άλλο σύνολο δεδομένων
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, θα καλέσει πρώτα τον πάροχο δεδομένων που δεν μπορεί να λάβει πληροφορίες ομάδων καθώς οι ομάδες δεν είναι διαθέσιμες. Αντίθετα, εάν καλέσετε αυτήν την τάξη μέσω testng.xml, θα έχει διαθέσιμες πληροφορίες ομάδων με το ITestContext. Χρησιμοποιήστε την ακόλουθη XML για να καλέσετε τη δοκιμή
<!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 υποστηρίζει δύο είδη παραμετροποίησης, χρησιμοποιώντας @Parameter+TestNG. Xml και χρησιμοποιώντας@DataProvider
-
In @Parameter+TestNG. Xml Οι παράμετροι μπορούν να τοποθετηθούν σε επίπεδο σουίτας και σε επίπεδο δοκιμής. Αν
Το όνομα της ίδιας παραμέτρου δηλώνεται και στις δύο θέσεις. Η παράμετρος επιπέδου δοκιμής θα προτιμάται έναντι της παραμέτρου επιπέδου κοστουμιού.
- χρησιμοποιώντας το @Parameter+TestNG.xml μπορεί να οριστεί μόνο μία τιμή κάθε φορά, αλλά το @DataProvider επιστρέφει έναν 2d πίνακα αντικειμένων.
- Εάν το DataProvider υπάρχει στη διαφορετική κλάση, τότε η κλάση στην οποία βρίσκεται η μέθοδος δοκιμής,DataProvider θα πρέπει να είναι στατική μέθοδος.
- Υπάρχουν δύο παράμετροι που υποστηρίζονται από DataProvider are Μέθοδος ITestContext.
















