Comment puis-je identifier l'hôte Grille Sélénium mon test en cours d'exécution à partir du test?

StackOverflow https://stackoverflow.com/questions/1393889

Question

J'utilise Sélénium Grille avec TestNG pour exécuter mes tests en parallèle. J'ai certains tests qui nécessitent un utilisateur d'être connecté, donc j'avoir un compte d'utilisateur configuré pour le test.

J'ai veillé à ce que les tests impliquant la connexion en tant mon utilisateur de test sont exécutés sur des machines virtuelles distinctes afin que les sessions ne sont pas interrompues, mais après avoir enquêté sur certains tests ayant échoué régulièrement il se avère que cela ne suffit pas. J'ai donc besoin soit:

  • 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.

  • Avoir des comptes d'utilisateurs de test multiples, et assurez-vous qu'un seul est utilisé à la fois.

Si je pouvais identifier l'hôte de la machine exécutant le test que je pouvais mettre en place des comptes de test en conséquence. Est-il possible de le faire, ou est-il une autre solution que je ne l'ai pas pensé?

Était-ce utile?

La solution 2

Je résolu mon problème en mettant en place plusieurs comptes d'utilisateurs uniques uniquement pour les tests, tout se terminant par un numéro (par exemple: selenium.test1). C'était simple d'automatiser une tâche à l'aide de Sélénium.

Je stocke ce numéro dans le code, et chaque fois qu'un test doit identifier le nombre est incrémenté et le nom d'utilisateur est construit.

Je l'ai fait considérer comme « la libération » et la réutilisation de ces comptes par la suite lorsque les essais ont fini, mais décidé qu'il était plus facile de vous assurer que je ne manquais pas de comptes de test pour mes tests.

Autres conseils

J'ai résolu le problème de l'identification de la télécommande en mettant en place un « qui suis-je page ». Au sein de mon usine WebDriver à distance (ou Sélénium), je visite cette page, le stocker dans cette classe que j'utilise pour tenir la session, et l'enregistrer. Cette page indique le nom d'hôte, IP, type et version du navigateur.

Une autre solution proposée ici:

https://groups.google.com/forum/#! sujet / sélénium utilisateurs / 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;
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top