2009-09-08 7 views
5

Estoy usando Selenium Grid con TestNG para ejecutar mis pruebas en paralelo. Tengo ciertas pruebas que requieren que un usuario inicie sesión, por lo que tengo una cuenta de usuario configurada para probar.¿Cómo puedo identificar al host de Selenium Grid ejecutando mi prueba desde dentro de la prueba?

he tenido cuidado para asegurar que las pruebas que implican una sesión como mi usuario de prueba se ejecutan en máquinas virtuales separadas de manera que no se interrumpan las sesiones, sin embargo, después de investigar algunas pruebas fallan regularmente resulta que esto no es suficiente. Por lo tanto, ya sea que tenga que:

  • configurar un nuevo usuario para cada prueba (entiendo que esto puede ser la solución ideal, pero que va a tomar algún tiempo para configurar/run

  • tienen múltiples. cuentas de usuario de prueba, y aseguran que sólo se utiliza uno a la vez.

Si pudiera identificar el host de la máquina que ejecuta la prueba pude configurar cuentas de prueba en consecuencia. ¿hay alguna manera de hacer esto, o hay otra solución en la que no he pensado?

+0

Hola David, ¿Usted intentó y post esta cuestión en los foros de selenio Grid. –

Respuesta

0

Resolví mi problema al configurar varias cuentas de usuario únicas para pruebas, todas terminando con un número (por ejemplo: selenium.test1). Esto fue simple de automatizar como una tarea única usando Selenium.

Guardo este número en código, y cada vez que una prueba necesita iniciar sesión, el número se incrementa y se construye el nombre de usuario.

Consideré 'liberar' y posteriormente reutilizar estas cuentas cuando terminen las pruebas, pero decidí que era más fácil simplemente asegurarme de tener suficientes cuentas de prueba para mis pruebas.

1

Resolví el problema de identificar el control remoto colocando una "¿Quién soy yo?". Dentro de mi fábrica remota de disquetes (o Selenium), visito esa página, la almaceno en esa clase que utilizo para llevar a cabo la sesión y la registro. Esta página informa el nombre de host, IP, tipo de navegador y versión.

0

Otra solución que se ofrece aquí:

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