2009-09-08 13 views
5

Używam Selenium Grid z TestNG do równoległego uruchamiania testów. Mam pewne testy, które wymagają zalogowania użytkownika, więc mam skonfigurowane konto użytkownika do testowania.Jak zidentyfikować hosta Selenium Grid z moim testem z poziomu testu?

Byłem ostrożny, aby upewnić się, że wszelkie testy związane z zalogowaniem się jako mój użytkownik testu są uruchamiane na oddzielnych maszynach wirtualnych, tak aby sesje nie zostały przerwane, jednak po zbadaniu niektórych regularnie kończących się testów okazuje się, że to nie wystarczy. Dlatego albo trzeba:

  • Konfigurowanie nowego użytkownika dla każdego testu (rozumiem, to może być idealnym rozwiązaniem, ale to zajmie trochę czasu, aby skonfigurować/run

  • mieć wiele. konta użytkowników testy, i upewnić się, że tylko jeden jest używany w danym momencie.

Gdybym mógł zidentyfikować hosta komputera uruchomiony test mogę skonfigurować konta testowe odpowiednio. Czy istnieje jakiś sposób, aby to zrobić, czy istnieje inne rozwiązanie, o którym nie pomyślałem?

+0

Hi Dave, Próbowałaś i pisać to pytanie na forum Selen siatki. –

Odpowiedz

0

Rozwiązałem mój problem, zakładając kilka unikalnych kont użytkowników wyłącznie do testowania, wszystkie kończące się liczbą (na przykład: selenium.test1). Było to proste do zautomatyzowania jako jednorazowe zadanie przy użyciu Selenium.

Przechowuję ten numer w kodzie, a za każdym razem, gdy test wymaga zalogowania, numer jest zwiększany, a nazwa użytkownika jest konstruowana.

Rozważałem "zwolnienie", a następnie ponowne wykorzystanie tych kont po zakończeniu testów, ale zdecydowałem, że łatwiej jest upewnić się, że mam wiele kont testowych do moich testów.

1

Rozwiązałem problem identyfikacji pilota, stawiając stronę "kim jestem ja". W fabryce mojego zdalnego webdrivera (lub Selenium) odwiedzam tę stronę, przechowuję ją w klasie, której używam do przechowywania sesji i loguję ją. Ta strona zgłasza nazwę hosta, adres IP, typ przeglądarki i wersję.

0

Innym rozwiązaniem oferowanym tutaj:

https://groups.google.com/forum/#!topic/selenium-users/8eNRW9JnayQ

public static String[] getHostNameAndPort(String hostName, int port, SessionId session) { 
     String[] hostAndPort = new String[2]; 
     String errorMsg = "Failed to acquire remote webdriver node and port info. Root cause: "; 

     try { 
      HttpHost host = new HttpHost(hostName, port); 
      DefaultHttpClient client = new DefaultHttpClient(); 
      URL sessionURL = new URL("http://" + hostName + ":" + port + "/grid/api/testsession?session=" + session); 
      BasicHttpEntityEnclosingRequest r = new BasicHttpEntityEnclosingRequest("POST", 
        sessionURL.toExternalForm()); 
      HttpResponse response = client.execute(host, r); 
      JSONObject object = extractObject(response); 
      URL myURL = new URL(object.getString("proxyId")); 
      if ((myURL.getHost() != null) && (myURL.getPort() != -1)) { 
       hostAndPort[0] = myURL.getHost(); 
       hostAndPort[1] = Integer.toString(myURL.getPort()); 
      } 
     } catch (Exception e) { 
      logger.log(Level.SEVERE, errorMsg, e); 
      throw new RuntimeException(errorMsg, e);    
     } 
     return hostAndPort; 
    }