Καθώς δημιουργούμε λογισμικό, πάντα επιθυμούμε να λειτουργεί διαφορετικά με ένα διαφορετικό σύνολο δεδομένων. Όταν πρόκειται για τη δοκιμή του ίδιου λογισμικού, δεν μπορούμε να είναι άδικο να το δοκιμάσουμε με ένα μόνο σύνολο δεδομένων. Εδώ και πάλι, πρέπει να επαληθεύσουμε ότι το σύστημά μας χρησιμοποιεί όλους τους συνδυασμούς που αναμένεται να υποστηρίξουν. Για αυτό, πρέπει να παραμετροποιήσουμε τις δοκιμές μας. Εδώ έρχεται η παραμετροποίηση στην εικόνα.
Παραμετροποίηση στο Σελήνιο
Η παραμετροποίηση στο Σελήνιο είναι μια διαδικασία παραμετροποίησης των δοκιμαστικών σεναρίων με σκοπό τη μετάδοση πολλαπλών δεδομένων στην εφαρμογή κατά το χρόνο εκτέλεσης. Είναι μια στρατηγική εκτέλεσης που εκτελεί αυτόματα δοκιμαστικές περιπτώσεις πολλές φορές χρησιμοποιώντας διαφορετικές τιμές. Η ιδέα που επιτυγχάνεται με την παραμετροποίηση των σεναρίων δοκιμής ονομάζεται Data Driven Testing .
Σε αυτό το σεμινάριο, θα μάθετε-
- Τύπος παραμετροποίησης στο TestNG-
- Σχολιασμός παραμέτρων με Testng.xml
- Αντιμετώπιση προβλημάτων
- Παράμετροι που χρησιμοποιούν το Dataprovider
- Καλέστε το DataProvider από διαφορετική τάξη
- Τύποι παραμέτρων στο Dataprovider
Τύπος παραμετροποίησης στο TestNG-
Για να κάνουμε την παραμετροποίηση πιο ξεκάθαρη, θα εξετάσουμε τις επιλογές παραμετροποίησης σε ένα από τα πιο δημοφιλή πλαίσια για το Selenium Webdriver - TestNG .
Υπάρχουν δύο τρόποι με τους οποίους μπορούμε να επιτύχουμε παραμετροποίηση στο TestNG
- Με τη βοήθεια του σχολιασμού παραμέτρων και του αρχείου TestNG XML .
- Με τη βοήθεια του σχολιασμού DataProvider .
Οι παράμετροι από το Testng.xml μπορεί να είναι επίπεδο ή δοκιμή
Η παράμετρος από το DataProvider μπορεί να λάβει τη μέθοδο Method και ITestContext ως παράμετρο.
Ας τα μελετήσουμε λεπτομερώς -
Σχολιασμός παραμέτρων στο TestNG
Ο σχολιασμός παραμέτρων στο TestNG είναι μια μέθοδος που χρησιμοποιείται για τη μετάδοση τιμών στις μεθόδους δοκιμής ως ορίσματα χρησιμοποιώντας το αρχείο .xml. Ενδέχεται να απαιτείται από τους χρήστες να μεταφέρουν τις τιμές στις μεθόδους δοκιμής κατά τη διάρκεια του χρόνου εκτέλεσης. Η μέθοδος σχολιασμού @Parameters μπορεί να χρησιμοποιηθεί σε οποιαδήποτε μέθοδο με σχολιασμό @Test, @Before, @After ή @Factory.
Σχολιασμός παραμέτρων με Testng.xml
Επιλέξτε παραμετροποίηση χρησιμοποιώντας σχολιασμούς όταν θέλετε να αντιμετωπίσετε την πολυπλοκότητα και ο αριθμός των συνδυασμών εισόδου είναι μικρότερος.
Ας δούμε πώς λειτουργεί
Σενάριο δοκιμής
Βήμα 1) Εκκινήστε το πρόγραμμα περιήγησης και μεταβείτε στο Google.com
Βήμα 2) Εισαγάγετε μια λέξη-κλειδί αναζήτησης
Βήμα 3) Βεβαιωθείτε ότι η τιμή που έχετε εισαγάγει είναι ίδια με αυτήν που παρέχεται από τα δεδομένα δοκιμής μας
Βήμα 4) Επαναλάβετε τα 2 & 3 έως ότου εισαχθούν όλες οι τιμές
Συντάκτης δοκιμής | Αναζήτηση |
Γκουρού99 | Ινδία |
Κρίσνα | ΗΠΑ |
Μπούπες | Κίνα |
Ακολουθεί ένα παράδειγμα για το πώς να το κάνετε ΧΩΡΙΣ παράμετροι
παράμετροι πακέτουεισαγωγή org.testng.annotations.Test;εισαγωγή org.testng.AssertJUnit;εισαγωγή java.util.concurrent.TimeUnit;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;δημόσια τάξη NoParameterWithTestNGXML {String driverPath = "C: \\ geckodriver.exe";Πρόγραμμα οδήγησης WebDriver;@Δοκιμήpublic void testNoParameter () ρίχνει το InterruptException {String author = "guru99";String searchKey = "Ινδία";System.setProperty ("webdriver.gecko.driver", driverPath);πρόγραμμα οδήγησης = νέο FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");WebElement searchText = driver.findElement (By.name ("q"));// Αναζήτηση κειμένου στο πλαίσιο κειμένου googlesearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + author + "Το κλειδί αναζήτησης είναι ->" + searchKey);System.out.println ("Το νήμα θα κοιμηθεί τώρα");Thread.sleep (3000);System.out.println ("Value in Google Search Box =" + searchText.getAttribute ("value") + "::: Τιμή που δίνεται από input =" + searchKey);// επαλήθευση της τιμής στο πλαίσιο αναζήτησης googleAssertJUnit.assertTrue (searchText.getAttribute ("value"). EqualsIgnoreCase (searchKey));}}
Μια μελέτη, το παραπάνω παράδειγμα. Φανταστείτε πόσο περίπλοκο θα γίνει ο κώδικας όταν το κάνουμε αυτό για 3 συνδυασμούς εισόδου
Τώρα, ας παραμετροποιήσουμε αυτό χρησιμοποιώντας το TestNG
Για να το κάνετε αυτό, θα πρέπει να το κάνετε
- Δημιουργήστε ένα αρχείο XML που θα αποθηκεύει τις παραμέτρους
- Στη δοκιμή, προσθέστε σχολιασμό @Parameters
Εδώ είναι ο πλήρης κωδικός
Test Level TestNG.xml
xml version = "1.0" encoding = "UTF-8"?><τάξεις>
ParameterWithTestNGXML.java αρχείο
παράμετροι πακέτουεισαγωγή org.testng.AssertJUnit;εισαγωγή java.util.concurrent.TimeUnit;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;εισαγωγή org.testng.annotations.Optional;εισαγωγή org.testng.annotations.Parameters;εισαγωγή org.testng.annotations.Test;δημόσια τάξη ParameterWithTestNGXML {String driverPath = "C: \\ geckodriver.exe";Πρόγραμμα οδήγησης WebDriver;@Δοκιμή@Parameters ({"συγγραφέας", "searchKey"})public void testParameterWithXML (@Optional ("Abc") String author, String searchKey) ρίχνει το InterruptException {System.setProperty ("webdriver.gecko.driver", driverPath);πρόγραμμα οδήγησης = νέο FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");WebElement searchText = driver.findElement (By.name ("q"));// Αναζήτηση κειμένου στο πλαίσιο κειμένου googlesearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + author + "Το κλειδί αναζήτησης είναι ->" + searchKey);System.out.println ("Το νήμα θα κοιμηθεί τώρα");Thread.sleep (3000);System.out.println ("Value in Google Search Box =" + searchText.getAttribute ("value") + "::: Τιμή που δίνεται από input =" + searchKey);// επαλήθευση της τιμής στο πλαίσιο αναζήτησης googleAssertJUnit.assertTrue (searchText.getAttribute ("value"). EqualsIgnoreCase (searchKey));}}
Οδηγίες για την εκτέλεση του σεναρίου, επιλέξτε το αρχείο XML και Εκτέλεση ως Test NG Suite
Κάντε δεξί κλικ στο αρχείο .xml -> Εκτέλεση ως -> Testng Suite (Σημείωση: Suite)
Τώρα, οι παράμετροι μπορούν να οριστούν σε 2 επίπεδα
- Επίπεδο σουίτας - Οι παράμετροι μέσα στην ετικέτα
του αρχείου TestNG XML θα είναι παράμετρος επιπέδου σουίτας. - Επίπεδο δοκιμής - Οι παράμετροι μέσα στην ετικέτα
του αρχείου XML δοκιμής θα είναι παράμετρος επιπέδου δοκιμής.
Εδώ είναι το ίδιο τεστ με παραμέτρους επιπέδου σουίτας
ΣΗΜΕΙΩΣΗ: Σε περίπτωση που το όνομα της παραμέτρου είναι ίδιο σε επίπεδο σουίτας και επίπεδο δοκιμής, τότε η παράμετρος επιπέδου δοκιμής θα έχει προτίμηση έναντι του επιπέδου σουίτας. Έτσι, σε αυτήν την περίπτωση, όλες οι κλάσεις εντός αυτού του επιπέδου δοκιμής θα μοιράζονται την παράκαμψη παραμέτρου και άλλες κλάσεις που βρίσκονται εκτός του επιπέδου δοκιμής θα μοιράζονται την παράμετρο επιπέδου σουίτας.
Αντιμετώπιση προβλημάτων
Το ζήτημα # 1 Η τιμή παραμέτρου στο testng.xml δεν μπορεί να προσδιοριστεί στην παράμετρο της αντίστοιχης μεθόδου δοκιμής, θα προκαλέσει σφάλμα.
Εξετάστε το ακόλουθο παράδειγμα
Εδώ, το χαρακτηριστικό «author» ισούται με το «Guru99» που είναι μια συμβολοσειρά και στην αντίστοιχη μέθοδο δοκιμής αναμένει ακέραια τιμή, οπότε θα λάβουμε μια εξαίρεση εδώ.
Πρόβλημα # 2 Τα @Parameters σας δεν έχουν αντίστοιχη τιμή στο testing.xml.
Μπορείτε να επιλύσετε αυτήν την κατάσταση προσθέτοντας @ προαιρετικό σχολιασμό στην αντίστοιχη παράμετρο στη μέθοδο δοκιμής.
Πρόβλημα # 3: Θέλετε να δοκιμάσετε πολλές τιμές της ίδιας παραμέτρου χρησιμοποιώντας Testng.xml
Η απλή απάντηση είναι ότι αυτό δεν μπορεί να γίνει! Μπορείτε να έχετε πολλές διαφορετικές παραμέτρους, αλλά κάθε παράμετρος μπορεί να έχει μόνο μία τιμή. Αυτό βοηθά στην αποτροπή των τιμών κωδικοποίησης στο script. Αυτό καθιστά τον κώδικα επαναχρησιμοποιήσιμο. Σκεφτείτε το ως αρχεία ρυθμίσεων για το σενάριό σας. Εάν θέλετε να χρησιμοποιήσετε πολλές τιμές για μια παράμετρο, χρησιμοποιήστε το DataProviders
Πάροχος δεδομένων στο TestNG
Ο Παροχέας δεδομένων στο TestNG είναι μια μέθοδος που χρησιμοποιείται όταν ένας χρήστης πρέπει να περάσει πολύπλοκες παραμέτρους. Οι σύνθετες παράμετροι πρέπει να δημιουργηθούν από την Java, όπως σύνθετα αντικείμενα, αντικείμενα από αρχεία ιδιοτήτων ή από μια βάση δεδομένων που μπορούν να περάσουν με τη μέθοδο παροχής δεδομένων. Η μέθοδος σχολιάζεται από το @DataProvider και επιστρέφει μια σειρά αντικειμένων.
Παράμετροι που χρησιμοποιούν το Dataprovider
Ο σχολιασμός @Parameters είναι εύκολος, αλλά για δοκιμή με πολλά σύνολα δεδομένων πρέπει να χρησιμοποιήσουμε τον Παροχέα δεδομένων
Για να συμπληρώσουμε χιλιάδες φόρμες ιστού χρησιμοποιώντας το πλαίσιο δοκιμών μας, χρειαζόμαστε μια διαφορετική μεθοδολογία που μπορεί να μας δώσει ένα πολύ μεγάλο σύνολο δεδομένων σε μία ροή εκτέλεσης.
Η έννοια αυτή τα δεδομένα με γνώμονα επιτυγχάνεται με @DataProvider σχολιασμό στο TestNG.
Έχει μόνο ένα χαρακτηριστικό "όνομα" . Εάν δεν καθορίσετε το χαρακτηριστικό name, τότε το όνομα του DataProvider θα είναι το ίδιο με το αντίστοιχο όνομα μεθόδου.
Ο πάροχος δεδομένων επιστρέφει ένα δισδιάστατο αντικείμενο JAVA στη μέθοδο δοκιμής και η μέθοδος δοκιμής, θα επικαλεστεί τους χρόνους M σε έναν τύπο M * N πίνακα αντικειμένων. Για παράδειγμα, εάν το DataProvider επιστρέψει μια συστοιχία 2 * 3 αντικειμένων, το αντίστοιχο κουτάκι θα καλείται 2 φορές με 3 παραμέτρους κάθε φορά.
Πλήρες παράδειγμα
παράμετροι πακέτουεισαγωγή java.util.concurrent.TimeUnit;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;εισαγωγή org.testng.Assert;εισαγωγή org.testng.annotations.BeforeTest;εισαγωγή org.testng.annotations.DataProvider;εισαγωγή org.testng.annotations.Test;δημόσια τάξη ParameterByDataprovider {Πρόγραμμα οδήγησης WebDriver;String driverPath = "C: \\ geckodriver.exe";@BeforeTestδημόσια κενή ρύθμιση () {// Δημιουργήστε ένα αντικείμενο προγράμματος οδήγησης firefoxSystem.setProperty ("webdriver.gecko.driver", driverPath);πρόγραμμα οδήγησης = νέο FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}/ ** Δοκιμή υπόθεσης για επαλήθευση του πλαισίου αναζήτησης google* @param συγγραφέας* @param searchKey* @throws InterruptException* /@Test (dataProvider = "SearchProvider")public void testMethod (String author, String searchKey) ρίχνει το InterruptException {{WebElement searchText = driver.findElement (By.name ("q"));// τιμή αναζήτησης στο πλαίσιο αναζήτησης googlesearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + author + "Το κλειδί αναζήτησης είναι ->" + searchKey);Thread.sleep (3000);String testValue = searchText.getAttribute ("τιμή");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Επαληθεύστε εάν η τιμή στο πλαίσιο αναζήτησης google είναι σωστήAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** @return Object [] [] όπου η πρώτη στήλη περιέχει "συγγραφέας"* και η δεύτερη στήλη περιέχει "searchKey"* /@DataProvider (όνομα = "SearchProvider")δημόσιο αντικείμενο [] [] getDataFromDataprovider () {επιστροφή νέου αντικειμένου [] []{{"Guru99", "Ινδία"},{"Krishna", "UK"},{"Bhupesh", "ΗΠΑ"}};}}
Καλέστε το DataProvider από διαφορετική τάξη
Από προεπιλογή, το DataProvider βρίσκεται στην ίδια κατηγορία όπου είναι η μέθοδος δοκιμής ή η βασική κλάση. Για να το θέσουμε σε κάποια άλλη τάξη πρέπει να κάνουμε μέθοδο παροχής δεδομένων όπως στατικές και στη μέθοδο δοκιμής θα πρέπει να προσθέσετε ένα χαρακτηριστικό dataProviderClass στο @Test σχολιασμό.
Παράδειγμα κώδικα
Παράμετρος TestClassDataproviderWithClassLevel.java
παράμετροι πακέτουεισαγωγή java.util.concurrent.TimeUnit;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;εισαγωγή org.testng.Assert;εισαγωγή org.testng.annotations.BeforeTest;εισαγωγή org.testng.annotations.Test;δημόσια τάξη ParameterDataproviderWithClassLevel {Πρόγραμμα οδήγησης WebDriver;String driverPath = "C: \\ geckodriver.exe";@BeforeTestδημόσια κενή ρύθμιση () {System.setProperty ("webdriver.gecko.driver", driverPath);πρόγραμμα οδήγησης = νέο 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) ρίχνει το InterruptException {WebElement searchText = driver.findElement (By.name ("q"));// Αναζήτηση κειμένου στο πλαίσιο κειμένου googlesearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + author + "Το κλειδί αναζήτησης είναι ->" + searchKey);Thread.sleep (3000);// λήψη κειμένου από το πλαίσιο αναζήτησηςString testValue = searchText.getAttribute ("τιμή");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// επαληθεύστε εάν το πλαίσιο αναζήτησης έχει τη σωστή τιμήAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}
DataproviderClass.java
παράμετροι πακέτουεισαγωγή org.testng.annotations.DataProvider;δημόσια τάξη DataproviderClass {@DataProvider (όνομα = "SearchProvider")δημόσιο στατικό αντικείμενο [] [] getDataFromDataprovider () {επιστροφή νέου αντικειμένου [] [] {{"Guru99", "Ινδία"},{"Krishna", "UK"},{"Bhupesh", "ΗΠΑ"}};}}
Τύποι παραμέτρων στο Dataprovider
Υπάρχουν δύο τύποι παραμέτρων που υποστηρίζονται από τη μέθοδο DataProvider.
Μέθοδος - Εάν το SAME DataProvider πρέπει να συμπεριφέρεται διαφορετικά με διαφορετική μέθοδο δοκιμής, χρησιμοποιήστε την παράμετρο Method.
Στο ακόλουθο παράδειγμα,
- Ελέγχουμε αν το όνομα της μεθόδου είναι testMethodA.
- Εάν ναι, επιστρέψτε ένα σύνολο τιμών
- Διαφορετικά επιστρέφετε ένα άλλο σύνολο τιμών
παράμετροι πακέτουεισαγωγή java.lang.reflect.Method;εισαγωγή java.util.concurrent.TimeUnit;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;εισαγωγή org.testng.Assert;εισαγωγή org.testng.annotations.BeforeTest;εισαγωγή org.testng.annotations.DataProvider;εισαγωγή org.testng.annotations.Test;δημόσια τάξη ParameterByMethodInDataprovider {Πρόγραμμα οδήγησης WebDriver;String driverPath = "C: \\ geckodriver.exe";@BeforeTestδημόσια κενή ρύθμιση () {System.setProperty ("webdriver.gecko.driver", driverPath);πρόγραμμα οδήγησης = νέο FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider")public void testMethodA (String author, String searchKey) ρίχνει το InterruptException {WebElement searchText = driver.findElement (By.name ("q"));// Κείμενο αναζήτησης στο πλαίσιο αναζήτησηςsearchText.sendKeys (searchKey);// Εκτύπωση συγγραφέα και συμβολοσειρά αναζήτησηςSystem.out.println ("Welcome ->" + author + "Το κλειδί αναζήτησης είναι ->" + searchKey);Thread.sleep (3000);String testValue = searchText.getAttribute ("τιμή");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Επαληθεύστε εάν το πλαίσιο κειμένου google εμφανίζει τη σωστή τιμήAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}@Test (dataProvider = "SearchProvider")public void testMethodB (String searchKey) ρίχνει το InterruptException {{WebElement searchText = driver.findElement (By.name ("q"));// Κείμενο αναζήτησης στο πλαίσιο αναζήτησηςsearchText.sendKeys (searchKey);// Εκτυπώστε μόνο συμβολοσειρά αναζήτησηςSystem.out.println ("Welcome -> Άγνωστος χρήστης Το κλειδί αναζήτησης είναι ->" + searchKey);Thread.sleep (3000);String testValue = searchText.getAttribute ("τιμή");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Επαληθεύστε εάν το πλαίσιο κειμένου google εμφανίζει τη σωστή τιμήAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** Εδώ η τιμή επιστροφής DataProvider βάσει του ονόματος της μεθόδου δοκιμής* @ παρμ μ* @ΕΠΙΣΤΡΟΦΗ** /@DataProvider (όνομα = "SearchProvider")δημόσιο αντικείμενο [] [] getDataFromDataprovider (Μέθοδος m) {εάν (m.getName (). equalsIgnoreCase ("testMethodA")) {επιστροφή νέου αντικειμένου [] [] {{"Guru99", "Ινδία"},{"Krishna", "UK"},{"Bhupesh", "ΗΠΑ"}};}αλλού{επιστροφή νέου αντικειμένου [] [] {{"Καναδάς"},{ "Ρωσία" },{ "Ιαπωνία" }};}}}
Εδώ είναι η έξοδος
ITestContext - Μπορεί να χρησιμοποιηθεί για τη δημιουργία διαφορετικών παραμέτρων για δοκιμαστικές περιπτώσεις βάσει ομάδων.
Στην πραγματική ζωή, μπορείτε να χρησιμοποιήσετε το ITestContext για να τροποποιήσετε τις τιμές των παραμέτρων με βάση τις μεθόδους δοκιμής, τους κεντρικούς υπολογιστές, τις διαμορφώσεις του τεστ.
Στο ακόλουθο παράδειγμα κώδικα
- Έχουμε 2 ομάδες A & B
- Κάθε μέθοδος δοκιμής αντιστοιχίζεται σε μια ομάδα
- Εάν η τιμή της ομάδας είναι Α, επιστρέφεται ένα συγκεκριμένο σύνολο δεδομένων
- Εάν η τιμή της ομάδας είναι B, επιστρέφεται ένα άλλο σύνολο δεδομένων
παράμετροι πακέτουεισαγωγή java.util.concurrent.TimeUnit;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;εισαγωγή org.testng.Assert;εισαγωγή org.testng.ITestContext;εισαγωγή org.testng.annotations.BeforeTest;εισαγωγή org.testng.annotations.DataProvider;εισαγωγή org.testng.annotations.Test;δημόσια τάξη ParameterByITestContextInDataprovider {Πρόγραμμα οδήγησης WebDriver;String driverPath = "C: \\ geckodriver.exe";@BeforeTest (ομάδες = {"A", "B"})δημόσια κενή ρύθμιση () {System.setProperty ("webdriver.gecko.driver", driverPath);πρόγραμμα οδήγησης = νέο FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", ομάδες = "A")public void testMethodA (String author, String searchKey) ρίχνει το InterruptException {{// αναζήτηση στο πλαίσιο κειμένου googleWebElement searchText = driver.findElement (By.name ("q"));// αναζητήστε μια τιμήsearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + author + "Το κλειδί αναζήτησης είναι ->" + searchKey);Thread.sleep (3000);String testValue = searchText.getAttribute ("τιμή");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// επαληθεύστε τη σωστή τιμή στο πλαίσιο αναζήτησηςAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}@Test (dataProvider = "SearchProvider", ομάδες = "B")public void testMethodB (String searchKey) ρίχνει το InterruptException {{// βρείτε το πλαίσιο αναζήτησης googleWebElement searchText = driver.findElement (By.name ("q"));// αναζητήστε μια τιμήsearchText.sendKeys (searchKey);System.out.println ("Welcome -> Άγνωστος χρήστης Το κλειδί αναζήτησης είναι ->" + searchKey);Thread.sleep (3000);String testValue = searchText.getAttribute ("τιμή");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// επαληθεύστε τη σωστή τιμή στο πλαίσιο αναζήτησηςAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** Εδώ το DAtaProvider θα παρέχει πίνακα αντικειμένων βάσει του ITestContext* @param γ* @ΕΠΙΣΤΡΟΦΗ* /@DataProvider (όνομα = "SearchProvider")δημόσιο αντικείμενο [] [] getDataFromDataprovider (ITestContext c) {Αντικείμενο [] [] groupArray = null;για (Ομάδα συμβολοσειρών: c.getIncludedGroups ()) {εάν (group.equalsIgnoreCase ("A")) {groupArray = νέο αντικείμενο [] [] {{"Guru99", "Ινδία"},{"Krishna", "UK"},{"Bhupesh", "ΗΠΑ"}};Διακοπή;}αλλιώς εάν (group.equalsIgnoreCase ("B")){groupArray = νέο αντικείμενο [] [] {{"Καναδάς"},{ "Ρωσία" },{ "Ιαπωνία" }};}Διακοπή;}επιστροφή groupArray;}}
Σημείωση: Εάν εκτελέσετε απευθείας την τάξη testng, θα καλέσει πρώτα το πρόγραμμα παροχής δεδομένων που δεν μπορεί να λάβει πληροφορίες ομάδων καθώς οι ομάδες δεν είναι διαθέσιμες. Αντίθετα, αν καλέσετε αυτήν την τάξη μέσω testng.xml, θα έχει διαθέσιμες πληροφορίες για ομάδες με το ITestContext. Χρησιμοποιήστε το ακόλουθο XML για να καλέσετε το τεστ
<ομάδες><εκτέλεση> <τάξεις><τάξηname = "parameter.ParameterByITestContextInDataprovider" /> <ομάδες><εκτέλεση> <τάξεις><τάξηname = "parameter.ParameterByITestContextInDataprovider" />
Περίληψη :
- Απαιτείται παραμετροποίηση για τη δημιουργία δοκιμών βάσει δεδομένων .
- Το TestNG υποστηρίζει δύο είδη παραμετροποίησης, χρησιμοποιώντας το @ Parameter + TestNG.xml και χρησιμοποιώντας το @DataProvider
- Στο @ Parameter + TestNG.xml οι παράμετροι μπορούν να τοποθετηθούν σε επίπεδο σουίτας και σε επίπεδο δοκιμής. Αν
Το ίδιο όνομα παραμέτρου δηλώνεται και στα δύο μέρη. Η παράμετρος επιπέδου δοκιμής θα έχει προτίμηση έναντι της παραμέτρου επιπέδου κοστουμιού
- χρησιμοποιώντας το @ Parameter + TestNG.xml μπορεί να οριστεί μόνο μία τιμή κάθε φορά, αλλά το @DataProvider επιστρέφει μια 2d συστοιχία αντικειμένων .
- Εάν το DataProvider υπάρχει στη διαφορετική κλάση, τότε στην κατηγορία στην οποία βρίσκεται η μέθοδος δοκιμής, το DataProvider θα πρέπει να είναι στατική μέθοδος .
- Υπάρχουν δύο παράμετροι που υποστηρίζονται από το DataProvider είναι το Method και το ITestContext.