2013-04-14 77 views
16

Tôi muốn chạy nhiều Thử nghiệm Selenium (trên máy chủ Jenkins) cùng một lúc.Chạy nhiều kiểm tra Selenium cùng một lúc

Hiện tại, nó chỉ chạy một thử nghiệm duy nhất tại một thời điểm khiến ChromeDriver dường như giao tiếp qua một cổng đặc biệt. Vì vậy, bằng cách nào đó tôi đoán tôi phải vượt qua một số loại cài đặt cổng thông qua Selenium cho ChromeDriver để khởi động nhiều thử nghiệm.

Trang web Selenium không may là có sản phẩm nào cho chủ đề đó: http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#parallelizing-your-test-runs

Từ quan điểm của tôi nó làm cho không có sự khác biệt nếu thử nghiệm chạy ở địa phương hoặc trên Jenkins, vấn đề là như nhau. Chúng tôi cần phải định cấu hình ChromeDriver bằng cách nào đó. Câu hỏi chỉ là làm thế nào.

Bất kỳ ai cũng có một số ý tưởng hoặc gợi ý nơi cần xem xét và tệp nào liên quan để hoàn thành công việc này?

+0

thể trùng lặp của [python selen nhiều trường hợp thử nghiệm] (http://stackoverflow.com/questions/11049505/python-selenium-multiple-test-cases) –

Trả lời

5

Điều bạn đang tìm kiếm là Selenium Grid 2.

lưới cho phép bạn:

  • quy mô bằng cách phân phối thử nghiệm trên một số máy (thực hiện song song)
  • quản lý nhiều môi trường từ một điểm trung tâm, làm cho nó dễ dàng để chạy các bài kiểm tra đối với một sự kết hợp rộng lớn các trình duyệt/OS.
  • giảm thiểu thời gian bảo trì cho lưới bằng cách cho phép bạn triển khai các móc tùy chỉnh để tận dụng cơ sở hạ tầng ảo chẳng hạn.
+2

Có, nhưng Lưới trông cho tôi như một điện toán đám mây dung dịch. Tôi thực sự muốn chạy nhiều thử nghiệm trên một máy. Vì vậy, thay vì mua phần cứng mới, tôi chỉ muốn chạy thử nghiệm song song trên một nút duy nhất. Lưới vẫn là điều phù hợp cho điều đó? –

+1

Theo như tôi hiểu từ https://code.google.com/p/selenium/wiki/ScalingWebDriver những gì tôi muốn chỉ đơn giản là không thể. Đó là lý do tại sao mọi người mở rộng đến một Grid và chỉ chạy một thử nghiệm cho mỗi máy tại một thời điểm. –

+1

Vâng những gì bạn muốn có thể đạt được với Grid. Bạn có thể thiết lập Hub và Node trên cùng một máy. Mỗi nút theo mặc định có khả năng xử lý 5 phiên bản trình duyệt IE, 5 Chrome và 1 trình duyệt IE. – Amey

2

Tôi đồng ý sử dụng lưới kết hợp với lớp Maven song song, bạn có thể chạy nhiều phiên bản trong một PC. Jenkins là có thể khi bạn đang sử dụng Ant cho xây dựng của bạn, sau đó bạn có thể chỉ định thử nghiệm có thể được chạy song song. Nó khá dễ dàng để thiết lập nó mặc dù;)

+0

Tôi nghi ngờ bằng cách nào đó rằng nó thực tế là có thể. Không phải những trường hợp trình duyệt đó chia sẻ ví dụ, sau đó là cùng một phiên? Ví dụ: nếu bạn xác thực trong một trình duyệt, tất cả các trình duyệt khác sẽ được đăng nhập (bất kể bạn đang sử dụng JSession hoặc PHPSession). Cách duy nhất để ngăn chặn điều đó có thể là sử dụng chế độ ẩn danh (duyệt web riêng tư). Tuy nhiên tôi không chắc chắn Selenium có ý nghĩa gì sẽ giúp tôi ngăn chặn những hiệu ứng như thế. –

+1

bạn có thể làm việc với "hồ sơ" và đặt trình duyệt của bạn để làm sạch cookie và everyhing, khi nó được đóng lại. Tôi nghĩ rằng nó có thể là giải pháp của bạn – buddy

14

Bạn có thể chạy nhiều phiên bản của chromedriver cục bộ khá dễ dàng, chỉ cần khởi tạo nhiều đối tượng trình điều khiển, chromedriver sẽ giữ cho các cấu hình riêng biệt và tìm một cổng để chạy trên tất cả của chính nó.

Dưới đây là một liên kết đến một ví dụ mà có thể chạy nhiều thử nghiệm sử dụng TestNG và Maven:

https://github.com/Ardesco/Selenium-Maven-Template

Chỉ cần sao chép các dự án trên và chạy sau trong dòng lệnh:

mvn verify -Pselenium-tests -Dbrowser=chrome -Dthreads=2 

Nó tận dụng khả năng của TestNG để quản lý nhóm luồng và sẽ mở ra nhiều cá thể nếu được chỉ định. Bạn có thể làm điều tương tự với jUnit nhưng bạn sẽ cần phải viết một Á hậu thử nghiệm tùy chỉnh để kích hoạt các bài kiểm tra thành các chủ đề riêng lẻ.

Nếu bạn quyết định sử dụng gradle nó có thể đối phó với việc quản lý các hồ bơi thread cho bạn với cả TestNG và jUnit và rất nhiều người thích nó để maven.

+0

Điều này làm việc bằng cách sử dụng ví dụ của bạn. Có thể làm điều tương tự với Firefox hay chỉ là trình điều khiển Chrome hỗ trợ nhiều luồng? – nettie

+0

Tất cả các trình điều khiển đều hỗ trợ nhiều luồng (Nếu bạn nhìn vào các dự án được liên kết README.md nó sẽ hiển thị cho bạn tất cả các tùy chọn trình duyệt), tuy nhiên YMMV khi sử dụng Ghostdriver như các phiên bản PhantomJS <2.0 dường như không hoàn toàn an toàn. Tôi đã không thực sự nhìn vào phiên bản 2.x vì chrome đã có quá nhanh những ngày này PhantomJS không thực sự đáng giá nó IMHO. – Ardesco

5

Đây là câu hỏi cũ, nhưng đối với bất kỳ ai vẫn đọc cùng, rất có thể chạy nhiều bản sao của Selenium WebDriver song song mà không cần sử dụng lưới. Tôi đã thử nghiệm thành công điều này bằng Chrome, FireFox và PhantomJs (tối đa 5). Mỗi cá thể WebDriver sử dụng một ngữ cảnh riêng biệt, vì vậy xung đột phiên không phải là một vấn đề. Hãy cảnh giác với các xung đột phía máy chủ, tùy thuộc vào yêu cầu của trang web của bạn!

Đối với người dùng NUnit, NUnit 3.2.1 hiện có thuộc tính 'TestContext.Current.WorkerId' cho phép bạn tách riêng một cá thể WebDriver trên mỗi công nhân NUnit.

  • Chạy nhiều trình duyệt trên cùng một máy sẽ thường cản trở hiệu suất, vì vậy hãy cẩn thận không sử dụng quá nhiều trường hợp trình duyệt hoặc bạn thực sự có thể tăng thời gian thử nghiệm!
+0

Neat ... bất kỳ ý tưởng về làm thế nào để làm điều này với MSTest? – BlackjacketMack

+0

@BlackjacketMack - Rất tiếc, tôi không sử dụng MSTest, vì nó có chức năng rất hạn chế so với NUnit (hoặc bất kỳ khung công tác nào khác thực sự). Nếu bạn chưa thử NUnit, tôi khuyên bạn nên sử dụng nó. – Null511

Các vấn đề liên quan