2009-04-03 30 views
16

Theo thiết kế, Selenium tạo một bản sao mới của hồ sơ Firefox của bạn mỗi lần chạy thử nghiệm mới. Tôi thấy thời gian sao chép này là một nút cổ chai đáng kể, đặc biệt là khi chạy 100 kiểm tra. (5-15 giây để sao chép hồ sơ lại).Có cách nào để tăng tốc thời gian tải của Máy chủ Selen không?

Có ai biết về bất kỳ hành vi ghi đè nào cho điều này không? Tôi thích máy chủ Selenium của tôi để tái sử dụng cùng một hồ sơ firefox. Tôi biết điều này vi phạm triết lý "thiết lập thử nghiệm của bạn" một cách sạch sẽ, nhưng đó là lối tắt tôi sẵn sàng thực hiện, vì các thử nghiệm của tôi không thay đổi cấu hình firefox đủ để gây nguy hiểm cho các thử nghiệm trong tương lai.

Trả lời

8

Tôi đồng ý rằng đây là vấn đề. Thật tuyệt khi có một bản sao mới của quy trình Firefox mỗi lần, nhưng hơi quá mức cần thiết để tăng gấp đôi thời gian khởi động bằng cách tạo lại hồ sơ Firefox. Nếu bạn mở một báo cáo lỗi trên http://jira.openqa.org và gửi email cho tôi theo địa chỉ [email protected], tôi sẽ vui lòng đảm bảo rằng chúng tôi nhận được giải pháp tại chỗ.

PS: Tôi đã giải quyết vấn đề này như là một lần cho bản thân mình. Chúng tôi sử dụng cùng một hồ sơ Firefox và chỉ cần thoát khỏi bộ nhớ cache và cookie DB. Nhưng tôi thực sự chỉ nên vá sự thay đổi đó trở lại nguồn Selenium.

+0

Bạn có thể giải thích cách bạn giải quyết vấn đề này không? Tôi muốn có thể tái sử dụng một đối tượng trình duyệt giữa các bài kiểm tra. – djangofan

+3

cũng muốn giải pháp, xin vui lòng – DevDave

6

Nó chỉ đơn giản là vấn đề di chuyển vào mã bên dưới bên ngoài của thiết lập thử nghiệm của bạn và vào cài đặt cố định và giữ một toàn cầu của dụ selen (mã giả NUnit.)

[TestFixtureSetUp()] 
public void FixtureSetup() 
{ 
    selenium = New DefaultSelenium("localhost", 4444, "*firefox", "http://localhost/"); 
    selenium.Start(); 
    selenium.SetTimeout("30000"); 
    selenium.Open("/"); 
} 

thiết lập thử nghiệm của bạn sau đó sẽ giống một cái gì đó như thế này:

[SetUp()] 
public void SetUpTest() 
{ 
    selenium.Open("default.aspx"); 
    selenium.WaitForPageToLoad("30000"); 
} 
+0

Chỉ cần tự hỏi tại sao bạn có WaitForPageToLoad khi điều này vốn có trong phương thức Open()? Nó chỉ có thể là đây là một bài đăng năm 2009 :-) – Blundell

0

Sử dụng MSTest, tôi đã có thể để có được trình điều khiển để chỉ mở một Firefox cửa sổ duy nhất cho tất cả các bài kiểm tra, chứ không phải là mở và đóng một cửa sổ mới cho mỗi bài kiểm tra, bởi initialising các WebDriver trong ClassInitialize (và Cleanup), chứ không phải là TestInitialize:

static string path; 
     static IWebDriver driver; 
     static string baseURL; 

     [ClassInitialize] 
     public static void ClassInitialize(TestContext context) { 
      DirectoryInfo di = new DirectoryInfo(Directory.GetCurrentDirectory()); 
      path = Path.Combine(di.Parent.Parent.Parent.FullName, "Tests\\bin\\debug\\"); 
      driver = new FirefoxDriver(); 
      baseURL = "http://localhost:5555/"; 
     } 

     [ClassCleanup] 
     public static void ClassCleanup() { 
      driver.Quit(); 
     } 
0

Mặc dù đây là câu hỏi cũ !! Máy chủ Selenium hoặc RC đã lỗi thời nhưng vấn đề tương tự vẫn tồn tại với Selenium Webdriver .. nó mất khoảng 30 giây để khởi động firefox thông qua trình quản trị web.

Nhưng như đã giải thích ở đây một số người đã nhận khoảng này "Sau khi vô hiệu hóa bộ điều hợp mạng không sử dụng (nằm trong Control Panel \ Network and Internet \ Network Connections)

nó đã bị mắc kẹt tại điểm:

ExtensionConnection connection = connectTo(exe.binary, profileToUse, "localhost"); 

https://groups.google.com/forum/#!topic/selenium-users/a2fNfF-mD_E

Mặc dù nó không làm việc cho tôi, nhưng người ta có thể muốn thử nó cho chắc chắn !!

một mi wayout ght be:

FirefoxProfile profile = new FirefoxProfile(); 
FirefoxBinary binary = new FirefoxBinary(@"path\to\firefox.exe"); 
FirefoxDriver driver = new FirefoxDriver(binary,profile); 
1

Một cách nhỏ để giảm thời gian tải trên hồ sơ là xóa các tệp lớn hơn khỏi cấu hình firefox. Để làm như vậy, hãy thiết lập hồ sơ của riêng bạn bằng cách chạy lệnh firefox.exe -p. Khi hồ sơ được tạo, hãy vào các tùy chọn và tắt bộ nhớ đệm và các loại lông tơ khác không cần thiết cho các thử nghiệm trên web. Sau đó sao chép hồ sơ của bạn sang một vị trí mới và xóa các tệp sql không cần thiết. (nếu không, khi bạn mở lại nó, bạn khôi phục các tệp đã xóa giữ cấu hình này quá nhỏ). Khi bạn bắt đầu kiểm tra selen, hãy tham khảo hồ sơ của bạn ở vị trí mới của nó.Trước đó, tôi đã sao chép trên một hồ sơ 50MB tại mỗi lần kiểm tra khởi động, và bây giờ nó sao chép trên một hồ sơ 3-4MB, và thời gian khởi động là gần như ngay lập tức.

Một lần nữa, đây không phải là cách để sử dụng lại cùng một cấu hình, nhưng nó sẽ giảm thời gian sao chép của mỗi hồ sơ.

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