我正在使用selenium网格和TestNG并行进行测试。我有某些需要登录用户的测试,因此我有一个配置用于测试的用户帐户。

我一直在谨慎地确保任何涉及登录的测试,因为我的测试用户是在单独的虚拟机上运行的,以便不会中断会话,但是在研究了一些定期失败的测试后,事实证明这还不够。因此,我要么需要:

  • 为每个测试设置一个新用户(我知道这可能是理想的解决方案,但是需要一些时间来配置/运行。

  • 拥有多个测试用户帐户,并确保一次只使用一个。

如果我可以识别运行测试的机器的主机,则可以相应地设置测试帐户。有什么方法可以做到这一点,还是我没有想到的另一种解决方案?

有帮助吗?

解决方案 2

我通过设置纯用于测试的几个唯一用户帐户来解决我的问题,所有这些都以一个数字结尾(例如:selenium.test1)。这是使用硒作为一项任务自动化的易于自动化的。

我将此数字存储在代码中,每次测试需要登录时,数字会增加并构建用户名。

我确实考虑过“释放”,然后在测试完成时重复使用这些帐户,但决定要确保我有很多测试帐户更容易。

其他提示

我解决了识别遥控器的问题,可以提出“我在谁页面”。在我的远程WebDriver(或Selenium)工厂中,我访问该页面,将其存储在我用来举办会话的那个类中,并将其记录。此页面报告主机名,IP,浏览器类型和版本。

这里提供的另一个解决方案:

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;
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top