如何在测试中识别运行测试的硒网格主机?
-
21-09-2019 - |
题
我正在使用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;
}
不隶属于 StackOverflow