Thực thi song song trong Selenium

⚡ Tóm tắt thông minh

Phiên, chạy song song và sự phụ thuộc trong Selenium kết hợp một sessionId duy nhất cho mỗi phiên bản WebDriver với TestNG Các điều khiển của bộ công cụ cho phép nhiều cửa sổ trình duyệt chạy các tập lệnh độc lập hoặc theo thứ tự cùng một lúc và hoàn thành chu trình kiểm thử hồi quy nhanh hơn.

  • 🧩 Nguyên tắc chính: Mỗi phiên bản WebDriver mới sẽ tạo ra một sessionId mới, do đó hai trình điều khiển không bao giờ chia sẻ lệnh hoặc cookie trên cùng một máy.
  • ⚙️ Thực hiện: Đặt parallel=”methods” (hoặc tests, classes, instances) cộng với thread-count trên TestNG Thẻ `suite` trong `testng.xml` dùng để phân tán quá trình thực thi.
  • 🧵 Song song: Hãy sử dụng một WebDriver cho mỗi phương thức @Test để tránh tình trạng tranh chấp dữ liệu trên các cửa sổ trình duyệt dùng chung trong quá trình chạy đồng thời.
  • 🔗 Sự phụ thuộc: Hãy sắp xếp thứ tự các bài kiểm tra bằng cách sử dụng dependsOnMethods bên trong thẻ include của testng.xml hoặc chú thích @Test khi một phương thức phải đứng trước phương thức khác.
  • 🤖 Sử dụng AI: Các công cụ hỗ trợ AI hiện đại dự đoán số luồng tối ưu, nhóm các phương pháp song song an toàn và phát hiện các ứng viên tiềm năng không ổn định từ dữ liệu chạy trước đó.

Cách chạy song song trong Selenium

Để hiểu cách chạy các tập lệnh song song, trước tiên bạn cần biết cách... Selenium Tách biệt từng trình duyệt thông qua các phiên.

Tại sao chúng ta cần Xử lý phiên?

Trong quá trình thực hiện kiểm thử, Selenium WebDriver phải tương tác với trình duyệt ở mọi bước để thực thi các lệnh đã cho. Trong khi quá trình kiểm thử đó đang chạy, một người dùng khác có thể khởi chạy một kịch bản thứ hai trên cùng một máy và cùng loại trình duyệt.

Xử lý phiên

Trong tình huống như vậy, chúng ta cần một cơ chế để hai quá trình thực thi không chồng chéo lên nhau. Selenium Giải quyết vấn đề này thông qua việc xử lý phiên.

Cách đạt được Xử lý phiên trong Selenium Trình điều khiển Web?

Nếu bạn kiểm tra Selenium Trong mã nguồn WebDriver, bạn sẽ tìm thấy một biến có tên là... sessionIdMỗi lần bạn tạo một phiên bản WebDriver mới, một quy trình mới sẽ được thực thi. sessionId được tạo ra và gắn vào đó FirefoxTrình điều khiển Chrome hoặc IE.

Đạt được khả năng xử lý phiên trong Selenium webdriver

Mỗi lệnh tiếp theo chỉ được thực thi trong phiên trình duyệt cụ thể đó.

Đạt được khả năng xử lý phiên trong Selenium webdriver

Vì chức năng này đã được tích hợp sẵn trong WebDriver, nên không cần phải gán sessionId thủ công.

Code Ví dụ: Hai phiên làm việc khác nhau được tạo ra cho hai phiên bản WebDriver.

SessionHandling.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/");
    }
}

Cách chạy thử nghiệm song song với Selenium

Có những trường hợp bạn muốn chạy nhiều bài kiểm tra cùng một lúc, chẳng hạn như kiểm tra khả năng tương thích trình duyệt hoặc các phòng hút thuốc lớn.

Trong những trường hợp như vậy, parallel thuộc tính trên TestNG Thẻ suite thực hiện công việc đó.

Chạy thử nghiệm song song với Selenium

Thuộc tính song song của thẻ suite chấp nhận bốn giá trị:

Giá trị thuộc tínhÝ nghĩa
kiểm traTất cả trường hợp thử nghiệm bên trong thẻ của thử nghiệm Tệp XML được chạy song song.
các lớp họcTất cả các trường hợp thử nghiệm bên trong một Java Các lớp học được thực hiện song song.
phương phápTất cả các phương thức được chú thích bằng @Test đều được thực thi song song.
trường hợpCác bài kiểm tra trong cùng một phiên bản được chạy song song, trong khi hai phương thức của hai phiên bản khác nhau chạy trong các luồng khác nhau.

thread-count Thuộc tính này quyết định số lượng luồng được phân bổ cho quá trình thực thi đó. Hãy kết hợp nó với... TestNG khuôn khổcài đặt, dựng lên TestNG in Eclipse trước khi chạy. Để mở rộng quy mô vượt quá một máy duy nhất, hãy định tuyến bộ kiểm thử tương tự thông qua Selenium Lưới 4 để thực thi song song phân tán.

Ví dụ đầy đủ: ba trường hợp kiểm thử chạy song song và điền dữ liệu đăng nhập vào https://demo.guru99.com/.

Toàn bộ dự án trông như sau:

Chạy thử nghiệm song song với Selenium

Thử nghiệmGuru99MultipleSession.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 (phương pháp song song)
<?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>

Thứ tự và sự phụ thuộc của ca kiểm thử

Bạn có thể thiết lập thứ tự và sự phụ thuộc của trường hợp thử nghiệm quá trình thực thi. Giả sử bạn có hai trường hợp kiểm thử, testGuru99TC1testGuru99TC2, Và bạn muốn testGuru99TC2 chạy trước testGuru99TC1. Sử dụng dependsOnMethods thuộc tính (hoặc dependsOnGroups (đối với chuỗi cấp nhóm) để sửa thứ tự đó. Đối với phạm vi rộng hơn khung tự động hóa thiết kế, so sánh JUnit vs TestNGvà xem lại tìm phần tử Tham khảo xem các bài kiểm tra phụ thuộc của bạn có chung vị trí định vị hay không.

testng.xml (dependsOnMethods)
<?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>

TestNG thời gian chạy, được lưu trữ tại testng.orgNó đánh giá các khai báo này trước khi khởi chạy các luồng, do đó các phương thức phụ thuộc luôn bắt đầu sau khi các điều kiện tiên quyết của chúng hoàn tất.

Câu Hỏi Thường Gặp

Phiên làm việc là một ID phiên duy nhất được tạo ra mỗi khi một phiên bản WebDriver mới được tạo. Mỗi lệnh từ trình điều khiển đó sẽ được chuyển hướng đến phiên trình duyệt tương ứng, giúp tách biệt các bài kiểm tra khác nhau.

Thuộc tính parallel trên thẻ suite chấp nhận các bài kiểm tra, lớp, phương thức hoặc thể hiện. TestNG Tạo ra nhiều luồng (được thiết lập bởi thread-count) và chạy đồng thời đơn vị đã chọn, giúp giảm tổng thời gian thực thi.

Sử dụng thuộc tính dependsOnMethods bên trong thẻ include của testng.xml, hoặc @Test(dependsOnMethods = “name”) trong mã. TestNG Chương trình sẽ chạy điều kiện tiên quyết trước và bỏ qua bài kiểm tra điều kiện phụ thuộc nếu xảy ra lỗi.

Các công cụ AI nhóm các bài kiểm tra liên quan lại với nhau, dự đoán số luồng tối ưu dựa trên thời gian chạy trước đó và sắp xếp lại các bộ kiểm tra để các bài kiểm tra chậm được chạy trước, rút ​​ngắn thời gian thực tế tổng thể của quy trình xây dựng.

Đúng vậy. AI phân tích biểu đồ cuộc gọi và nhật ký lỗi lịch sử để đề xuất các liên kết dependsOnMethods, gắn cờ các phụ thuộc vòng tròn và đề xuất các nhóm song song an toàn, giảm thiểu việc bảo trì thủ công tệp testng.xml.

Tóm tắt bài viết này với: