2009-09-08 6 views
5

Sto usando Selenium Grid con TestNG per eseguire i miei test in parallelo. Ho alcuni test che richiedono l'accesso di un utente, quindi ho un account utente configurato per il test.Come posso identificare l'host Selenium Grid che esegue il test dal test?

Sono stato attento a garantire che qualsiasi test di accesso come utente di test venga eseguito su macchine virtuali separate in modo che le sessioni non vengano interrotte, tuttavia dopo aver esaminato alcuni test regolarmente non riusciti risulta che questo non è sufficiente. Pertanto sia bisogno di:

  • impostare un nuovo utente per ogni prova (ho capito questo può essere la soluzione ideale, ma ci vorrà un po 'di tempo per configurare/run

  • hanno molteplici. account utente di prova, e garantire che solo uno è usato alla volta.

Se potessi identificare l'host della macchina che esegue il test ho potuto configurare gli account di prova di conseguenza. c'è un modo per fare questo, o c'è un'altra soluzione a cui non ho pensato?

+0

Ciao Dave, Hai provato e post questa domanda ai forum di Selenio Grid. –

risposta

0

Ho risolto il problema impostando diversi account utente univoci esclusivamente per test, il tutto termina con un numero (ad esempio: selenium.test1). Questo è stato semplice da automatizzare come attività singola utilizzando il selenio.

Memorizzo questo numero in codice e ogni volta che un test deve effettuare il login, il numero viene incrementato e il nome utente viene creato.

Ho preso in considerazione la possibilità di "rilasciare" e successivamente riutilizzare questi account al termine dei test, ma ho deciso che era più semplice accertarmi di avere molti account di test per i miei test.

1

Ho risolto il problema di identificare il telecomando inserendo una "who am I page". All'interno del mio sito web remoto (o Selenium), visito quella pagina, la memorizzo in quella classe che uso per tenere la sessione e la registro. Questa pagina riporta il nome host, l'IP, il tipo di browser e la versione.

0

Un'altra soluzione offerta qui:

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; 
    }