Παράλληλη εκτέλεση σε Selenium

⚡ Έξυπνη Σύνοψη

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

  • 🧩 Βασική Αρχή: Κάθε νέα παρουσία WebDriver δημιουργεί ένα νέο sessionId, επομένως δύο προγράμματα οδήγησης δεν μοιράζονται ποτέ εντολές ή cookies στον ίδιο υπολογιστή.
  • ⚙️ Εφαρμογή: Ορίστε parallel=”methods” (ή tests, classes, instances) συν thread-count στο TestNG ετικέτα suite του testng.xml για επέκταση της εκτέλεσης.
  • 🧵 Παραλληλισμός: Χρησιμοποιήστε ένα WebDriver ανά μέθοδο @Test για να αποφύγετε συνθήκες ανταγωνισμού σε κοινόχρηστα παράθυρα του προγράμματος περιήγησης κατά τη διάρκεια ταυτόχρονων εκτελέσεων.
  • 🔗 Εξάρτηση: Η σειρά δοκιμών με dependsOnMethods μέσα στο testng.xml περιλαμβάνει ετικέτες ή την σχολίαση @Test όταν μία μέθοδος πρέπει να προηγείται μιας άλλης.
  • 🤖 Χρήση Τεχνητής Νοημοσύνης: Οι σύγχρονοι βοηθοί της Τεχνητής Νοημοσύνης προβλέπουν τον βέλτιστο αριθμό νημάτων, τις ασφαλείς παράλληλες μεθόδους ομάδας και την εμφάνιση ασταθών υποψηφίων από ιστορικά δεδομένα εκτέλεσης.

Πώς να εκτελέσετε παράλληλη εκτέλεση σε Selenium

Για να κατανοήσετε πώς να εκτελείτε παράλληλα σενάρια, πρέπει πρώτα να ξέρετε πώς Selenium απομονώνει κάθε πρόγραμμα περιήγησης μέσω συνεδριών.

Γιατί χρειαζόμαστε Session Handling;

Κατά την εκτέλεση της δοκιμής, το Selenium Το WebDriver πρέπει να αλληλεπιδρά με το πρόγραμμα περιήγησης σε κάθε βήμα για να εκτελεί δεδομένες εντολές. Ενώ εκτελείται αυτή η δοκιμή, ένας άλλος χρήστης μπορεί να εκκινήσει ένα δεύτερο σενάριο στον ίδιο υπολογιστή και στον ίδιο τύπο προγράμματος περιήγησης.

Χειρισμός συνεδρίας

Σε μια τέτοια περίπτωση, χρειαζόμαστε έναν μηχανισμό ώστε οι δύο εκτελέσεις να μην επικαλύπτονται. Selenium λύνει αυτό το πρόβλημα μέσω του χειρισμού συνεδρίας.

Πώς να επιτύχετε το Session Handling in Selenium WebDriver;

Αν ελέγξετε το Selenium Στον πηγαίο κώδικα WebDriver, θα βρείτε μια μεταβλητή που ονομάζεται sessionIdΚάθε φορά που δημιουργείτε μια νέα παρουσία WebDriver, μια νέα sessionId δημιουργείται και συνδέεται με αυτό Firefox, Chrome ή πρόγραμμα οδήγησης IE.

Επίτευξη χειρισμού συνεδρίας Selenium Πρόγραμμα οδήγησης Web

Κάθε επόμενη εντολή εκτελείται μόνο εντός της συγκεκριμένης περιόδου λειτουργίας του προγράμματος περιήγησης.

Επίτευξη χειρισμού συνεδρίας Selenium Πρόγραμμα οδήγησης Web

Επειδή αυτό είναι ενσωματωμένο στο WebDriver, δεν χρειάζεται να αντιστοιχίσετε το sessionId χειροκίνητα.

Code Παράδειγμα: Δημιουργούνται δύο διαφορετικές συνεδρίες για δύο παρουσίες WebDriver.

Χειρισμός περιόδου σύνδεσης.java
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 κάνει τη δουλειά.

Εκτελέστε Παράλληλες Δοκιμές με Selenium

Το παράλληλο χαρακτηριστικό της ετικέτας suite δέχεται τέσσερις τιμές:

Αξία χαρακτηριστικούΝόημα
δοκιμέςΌλα περιπτώσεις δοκιμής μέσα σε ένα ετικέτα του δοκιμών Το αρχείο XML εκτελείται παράλληλα.
τάξειςΌλες οι δοκιμαστικές περιπτώσεις μέσα σε ένα Java το μάθημα λειτουργεί παράλληλα.
μέθοδοιΌλες οι μέθοδοι που σχολιάζονται με @Test εκτελούνται παράλληλα.
περιπτώσειςΟι δοκιμές στην ίδια περίπτωση εκτελούνται παράλληλα, ενώ δύο μέθοδοι από δύο διαφορετικές περιπτώσεις εκτελούνται σε διαφορετικά νήματα.

The thread-count Το χαρακτηριστικό αποφασίζει πόσα νήματα έχουν εκχωρηθεί για αυτήν την εκτέλεση. Συνδυάστε το με το TestNG πλαίσιο και εγκαθιστώ TestNG in Eclipse πριν από την εκτέλεση. Για κλιμάκωση πέρα ​​από ένα μόνο μηχάνημα, δρομολογήστε την ίδια σουίτα μέσω Selenium Πλέγμα 4 για κατανεμημένη παράλληλη εκτέλεση.

Πλήρες παράδειγμα: τρεις δοκιμαστικές περιπτώσεις εκτελούνται παράλληλα και συμπληρώνουν δεδομένα σύνδεσης στο https://demo.guru99.com/.

Το πλήρες έργο μοιάζει με:

Εκτελέστε Παράλληλες Δοκιμές με Selenium

ΔοκιμήGuru99MultipleSession.java
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

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 αναφορά εάν οι εξαρτώμενες δοκιμές σας μοιράζονται εντοπιστές.

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">
        <include name="testGuru99TC1" dependsOnMethods="testGuru99TC2"/>
        <include name="testGuru99TC2"/>
      </class>
    </classes>
  </test>
</suite>

The TestNG χρόνου εκτέλεσης, που φιλοξενείται στο testng.org, αξιολογεί αυτές τις δηλώσεις πριν από την εκκίνηση των νημάτων, επομένως οι εξαρτημένες μέθοδοι ξεκινούν πάντα μετά την ολοκλήρωση των προαπαιτούμενων.

Συχνές Ερωτήσεις

Μια συνεδρία είναι ένα μοναδικό sessionId που δημιουργείται κάθε φορά που δημιουργείται μια νέα παρουσία WebDriver. Κάθε εντολή από αυτό το πρόγραμμα οδήγησης δρομολογείται στην αντίστοιχη συνεδρία του προγράμματος περιήγησης, απομονώνοντας μια δοκιμή από μια άλλη.

Το χαρακτηριστικό parallel στην ετικέτα suite δέχεται δοκιμές, κλάσεις, μεθόδους ή στιγμιότυπα. TestNG Δημιουργεί πολλαπλά νήματα (που ορίζονται από τον αριθμό νημάτων) και εκτελεί την επιλεγμένη μονάδα ταυτόχρονα, μειώνοντας τον συνολικό χρόνο εκτέλεσης.

Χρησιμοποιήστε το χαρακτηριστικό dependsOnMethods μέσα στην ετικέτα include του testng.xml ή το @Test(dependsOnMethods = “name”) στον κώδικα. TestNG εκτελεί πρώτα την προϋπόθεση και παραλείπει την εξαρτημένη δοκιμή σε περίπτωση αποτυχίας.

Τα εργαλεία τεχνητής νοημοσύνης ομαδοποιούν δοκιμές που σχετίζονται με αυτά, προβλέπουν τον βέλτιστο αριθμό νημάτων από προηγούμενους χρόνους εκτέλεσης και αναδιατάσσουν τις σουίτες, έτσι ώστε οι αργές δοκιμές να ξεκινούν πρώτες, μειώνοντας τον συνολικό χρόνο που απαιτείται για τη διαδικασία δημιουργίας.

Ναι. Η τεχνητή νοημοσύνη αναλύει γραφήματα κλήσεων και ιστορικά αρχεία καταγραφής σφαλμάτων για να προτείνει συνδέσμους dependsOnMethods, να επισημαίνει κυκλικές εξαρτήσεις και να προτείνει ασφαλείς παράλληλες ομάδες, μειώνοντας τη χειροκίνητη συντήρηση του testng.xml.

Συνοψίστε αυτήν την ανάρτηση με: