Как я могу идентифицировать хост селена сетки, работающий на моем тесте изнутри теста?
-
21-09-2019 - |
Вопрос
Я использую селенс сетку с 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;
}