2009-09-08 6 views
5

J'utilise Selenium Grid avec TestNG pour faire mes tests en parallèle. J'ai certains tests qui nécessitent un utilisateur pour être connecté, donc j'ai un compte d'utilisateur configuré pour les tests. J'ai veillé à ce que tous les tests de connexion en tant qu'utilisateur de test soient exécutés sur des machines virtuelles distinctes afin que les sessions ne soient pas interrompues. Cependant, après des tests régulièrement échoués, il s'avère que cela ne suffit pas. J'ai donc besoin soit:Comment puis-je identifier l'hôte Selenium Grid exécutant mon test à partir du test?

  • Mettre en place un nouvel utilisateur pour chaque test (je comprends cela peut être la solution idéale, mais il faudra un certain temps pour configurer/run

  • ont de multiples. les comptes utilisateur de test, et veiller à ce que seul un est utilisé à la fois.

Si je pouvais identifier l'hôte de la machine exécutant le test que je pourrais configurer des comptes en conséquence. est-il possible de le faire de test, ou existe-t-il une autre solution à laquelle je n'ai pas pensé?

+0

Salut Dave, Avez-vous essayé et poster cette question sur les forums Sélénium Grid. –

Répondre

0

J'ai résolu mon problème en mettant en place plusieurs comptes utilisateur uniques uniquement pour les tests, le tout se terminant par un nombre (par exemple: selenium.test1). C'était simple à automatiser comme une tâche unique en utilisant Selenium.

Je stocke ce numéro dans le code, et chaque fois qu'un test doit se connecter, le numéro est incrémenté et le nom d'utilisateur est construit. J'ai envisagé de 'libérer' et de réutiliser ensuite ces comptes à la fin des tests, mais j'ai décidé qu'il était plus facile de m'assurer que j'avais suffisamment de comptes de test pour mes tests.

1

J'ai résolu le problème de l'identification de la télécommande en affichant une page "Qui suis-je?". Au sein de mon usine webdriver (ou Selenium) distante, je visite cette page, la stocke dans cette classe que j'utilise pour tenir la session, et la connecte. Cette page indique le nom d'hôte, l'adresse IP, le type de navigateur et la version.

0

Une autre solution proposée ici:

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