2009-04-03 24 views
16

Z założenia, Seleni tworzy nową kopię profilu Firefoksa za każdym razem, gdy uruchamiany jest nowy test. Uważam, że ten czas kopiowania jest znaczącym wąskim gardłem, szczególnie podczas uruchamiania 100 testów. (5-15 sekund, aby ponownie skopiować profil).Czy istnieje sposób na przyspieszenie czasu ładowania serwera Selenium?

Czy ktoś wie o jakimkolwiek zastąpieniu dla tego? Wolałbym, aby mój serwer Selenium używał ponownie tego samego profilu firefox. Wiem, że to narusza filozofię "czyszczenia konfiguracji testowych urządzeń", ale jest to skrót, który chętnie podejmuję, ponieważ moje testy nie zmieniają w istotny sposób mojego profilu firefox na tyle, aby zagrozić przyszłym testom.

Odpowiedz

8

Zgadzam się, że to jest problem. Miło jest mieć nową kopię procesu Firefoksa za każdym razem, ale trochę przesada, aby podwoić czas uruchamiania, regenerując profil Firefoksa. Jeśli otworzysz raport o błędzie na http://jira.openqa.org i wyśle ​​mi e-maila na [email protected], z chęcią upewnimy się, że otrzymamy rozwiązanie.

PS: Rozwiązałem ten problem jako jednorazowy dla siebie. Używamy tego samego profilu Firefoksa i po prostu wydalamy pamięć podręczną i pliki cookie DB. Ale naprawdę powinienem po prostu przenieść tę zmianę z powrotem do źródła Selenium.

+0

Czy możesz wyjaśnić, jak to rozwiązałeś? Chciałbym móc ponownie użyć obiektu przeglądarki między testami. – djangofan

+3

również chciałby rozwiązania, proszę – DevDave

6

To po prostu kwestia przeniesienie kodu poniżej zewnętrznej konfiguracji testowej i do konfiguracji urządzenia i utrzymanie globalnej instancji selenu (kod zakłada NUnit.)

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

Twoja konfiguracja testowa powinna wtedy wyglądać coś takiego:

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

Zastanawiasz się, dlaczego masz WaitForPageToLoad, gdy jest to związane z metodą Open()? Być może jest to post z 2009 roku :-) – Blundell

0

Używanie MSTest, udało mi się dostać kierowcę otwierać tylko jedno okno Firefox dla wszystkich testów, zamiast zamykania i otwierania nowego okna dla każdego testu, przez inicjację WebDriver w ClassInitialize (i Cleanup), zamiast 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

Chociaż to już stare pytanie !! Serwer Selenium lub RC jest przestarzały, ale ten sam problem utrzymuje się w przypadku Selenium Webdriver. Uruchomienie firefox przez webdriver zajmuje około 30 sekund.

Ale jak wyjaśniono tutaj niektórzy ludzie obeszli ten „Po wyłączeniu nieużywane adaptery sieciowe (znajduje się w Panelu sterowania \ Sieć i Internet \ Połączenia sieciowe)

było utknięcie w punkcie:

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

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

Choć nie dla mnie, ale jeden może spróbować go na pewno !!

Kolejne wayout mil GHT być:

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

jeden mały sposób, aby zmniejszyć czas ładowania na profilu jest usunięcie większych plików z profilu Firefoksa. Aby to zrobić, skonfiguruj swój własny profil, uruchamiając komendę firefox.exe -p. Po utworzeniu profilu, przejdź do opcji i wyłącz buforowanie i inne fluff, które nie są potrzebne do testów internetowych. Następnie skopiuj swój profil do nowej lokalizacji i usuń niepotrzebne pliki sql. (w przeciwnym razie po ponownym otwarciu przywracane są pliki, które utrzymują bardzo mały profil). Po rozpoczęciu testu selenu należy podać swój profil w nowej lokalizacji.Poprzednio kopiowałem na profilu 50 MB przy każdym uruchomieniu testowym, a teraz kopiuje on profil o rozmiarze 3-4 MB, a czas uruchomienia jest niemal natychmiastowy.

Ponownie, nie jest to sposób ponownego użycia tego samego profilu, ale zmniejszy to czas kopiowania każdego profilu.

Powiązane problemy