Παράλληλη εκτέλεση σε Selenium
⚡ Έξυπνη Σύνοψη
Συνεδρίες, παράλληλη εκτέλεση και εξάρτηση σε Selenium συνδυάστε ένα μοναδικό sessionId ανά στιγμιότυπο WebDriver με TestNG ελέγχους σουίτας, επιτρέποντας σε πολλά παράθυρα του προγράμματος περιήγησης να εκτελούν ανεξάρτητα ή διατεταγμένα σενάρια ταυτόχρονα και να ολοκληρώνουν τον κύκλο παλινδρόμησης πιο γρήγορα.

Για να κατανοήσετε πώς να εκτελείτε παράλληλα σενάρια, πρέπει πρώτα να ξέρετε πώς Selenium απομονώνει κάθε πρόγραμμα περιήγησης μέσω συνεδριών.
Γιατί χρειαζόμαστε Session Handling;
Κατά την εκτέλεση της δοκιμής, το Selenium Το WebDriver πρέπει να αλληλεπιδρά με το πρόγραμμα περιήγησης σε κάθε βήμα για να εκτελεί δεδομένες εντολές. Ενώ εκτελείται αυτή η δοκιμή, ένας άλλος χρήστης μπορεί να εκκινήσει ένα δεύτερο σενάριο στον ίδιο υπολογιστή και στον ίδιο τύπο προγράμματος περιήγησης.
Σε μια τέτοια περίπτωση, χρειαζόμαστε έναν μηχανισμό ώστε οι δύο εκτελέσεις να μην επικαλύπτονται. Selenium λύνει αυτό το πρόβλημα μέσω του χειρισμού συνεδρίας.
Πώς να επιτύχετε το Session Handling in Selenium WebDriver;
Αν ελέγξετε το Selenium Στον πηγαίο κώδικα WebDriver, θα βρείτε μια μεταβλητή που ονομάζεται sessionIdΚάθε φορά που δημιουργείτε μια νέα παρουσία WebDriver, μια νέα sessionId δημιουργείται και συνδέεται με αυτό Firefox, Chrome ή πρόγραμμα οδήγησης IE.
Κάθε επόμενη εντολή εκτελείται μόνο εντός της συγκεκριμένης περιόδου λειτουργίας του προγράμματος περιήγησης.
Επειδή αυτό είναι ενσωματωμένο στο WebDriver, δεν χρειάζεται να αντιστοιχίσετε το sessionId χειροκίνητα.
Code Παράδειγμα: Δημιουργούνται δύο διαφορετικές συνεδρίες για δύο παρουσίες WebDriver.
import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class SessionHandling { public static void main(String... strings) { // First session of WebDriver WebDriver driver = new FirefoxDriver(); // Go to guru99 demo site driver.get("https://demo.guru99.com/V4/"); // Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); // Go to guru99 demo site driver2.get("https://demo.guru99.com/V4/"); } }
Πώς να εκτελέσετε Παράλληλες Δοκιμές με Selenium
Υπάρχουν περιπτώσεις όπου θέλετε να εκτελέσετε πολλαπλές δοκιμές ταυτόχρονα, όπως π.χ. έλεγχοι μεταξύ προγραμμάτων περιήγησης ή μεγάλες σουίτες καπνιστών.
Σε τέτοιες περιπτώσεις, το parallel χαρακτηριστικό στο TestNG Η ετικέτα suite κάνει τη δουλειά.
Το παράλληλο χαρακτηριστικό της ετικέτας suite δέχεται τέσσερις τιμές:
| Αξία χαρακτηριστικού | Νόημα |
|---|---|
| δοκιμές | Όλα περιπτώσεις δοκιμής μέσα σε ένα ετικέτα του δοκιμών Το αρχείο XML εκτελείται παράλληλα. |
| τάξεις | Όλες οι δοκιμαστικές περιπτώσεις μέσα σε ένα Java το μάθημα λειτουργεί παράλληλα. |
| μέθοδοι | Όλες οι μέθοδοι που σχολιάζονται με @Test εκτελούνται παράλληλα. |
| περιπτώσεις | Οι δοκιμές στην ίδια περίπτωση εκτελούνται παράλληλα, ενώ δύο μέθοδοι από δύο διαφορετικές περιπτώσεις εκτελούνται σε διαφορετικά νήματα. |
The thread-count Το χαρακτηριστικό αποφασίζει πόσα νήματα έχουν εκχωρηθεί για αυτήν την εκτέλεση. Συνδυάστε το με το TestNG πλαίσιο και εγκαθιστώ TestNG in Eclipse πριν από την εκτέλεση. Για κλιμάκωση πέρα από ένα μόνο μηχάνημα, δρομολογήστε την ίδια σουίτα μέσω Selenium Πλέγμα 4 για κατανεμημένη παράλληλη εκτέλεση.
Πλήρες παράδειγμα: τρεις δοκιμαστικές περιπτώσεις εκτελούνται παράλληλα και συμπληρώνουν δεδομένα σύνδεσης στο https://demo.guru99.com/.
Το πλήρες έργο μοιάζει με:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executeSessionOne() { // First session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); // Find the user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 1"); } @Test public void executeSessionTwo() { // Second session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executeSessionThree() { // Third session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); driver.findElement(By.name("uid")).sendKeys("Driver 3"); } }
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" parallel="methods"> <test name="testGuru"> <classes> <class name="TestGuru99MultipleSession"/> </classes> </test> </suite>
Σειρά και εξάρτηση υπόθεσης δοκιμής
Μπορείτε να ορίσετε τη σειρά και την εξάρτηση του περίπτωση δοκιμής εκτέλεση. Ας υποθέσουμε ότι έχετε δύο δοκιμαστικές περιπτώσεις, testGuru99TC1 και testGuru99TC2, και θέλεις testGuru99TC2 να τρέξω πριν testGuru99TC1. Χρησιμοποιήστε το dependsOnMethods χαρακτηριστικό (ή dependsOnGroups για αλυσιδωτή σύνδεση σε επίπεδο ομάδας) για να καθορίσει αυτήν τη σειρά. Για ευρύτερο πλαίσιο αυτοματισμού σχεδιασμός, σύγκριση JUnit vs TestNG, και να εξετάσετε το findElement αναφορά εάν οι εξαρτώμενες δοκιμές σας μοιράζονται εντοπιστές.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3" parallel="methods"> <test name="testGuru"> <classes> <class name="TestGuru99MultipleSession"> <include name="testGuru99TC1" dependsOnMethods="testGuru99TC2"/> <include name="testGuru99TC2"/> </class> </classes> </test> </suite>
The TestNG χρόνου εκτέλεσης, που φιλοξενείται στο testng.org, αξιολογεί αυτές τις δηλώσεις πριν από την εκκίνηση των νημάτων, επομένως οι εξαρτημένες μέθοδοι ξεκινούν πάντα μετά την ολοκλήρωση των προαπαιτούμενων.





