Kovalev07
(Kovalev07)
09.Ноябрь.2012 08:25:59
#1
Доброго времени суток.
При последовательном выполнении тестов никаких проблем не возникает.
При конфигурировании тестов для параллельного выполнения, начинаются проблемы.
Имеется selenium hub и 3 Selenium node. Всё расположено на разных машинах. (4 машины)
Когда тесты выполнятся иногда бывает такая ситуация что код одного теста начинает выполнятся на другом ноде.
из за чего может происходить такая проблема?
Тесты запускаю при помощи TestNG
<suite name="Selenium tests suite" parallel="tests" thread-count="3 ">
Shaman
(Shaman)
09.Ноябрь.2012 09:36:38
#2
а модно пополробней посмотреть на конфигурацию сьюта, и что именно плохого в вашем случае в том что код одного теста начинает выполнятся на другой ноде ?
polusok
(Mykhailo Poliarush)
09.Ноябрь.2012 10:14:00
#3
собственно в чем проблема?
selenium grid hub сам принимает решение, где ему запускать тесты
или у этого есть какие-то побочные эффекты?
Kovalev07
(Kovalev07)
09.Ноябрь.2012 17:31:48
#4
testng.xml
<suite name="Selenium tests suite" parallel="tests" thread-count="3">
<test name="Test1">
<classes>
<class name="net.Test1"/>
</classes>
<test name="Test2">
<classes>
<class name="net.Test2"/>
</classes>
<test name="Test3">
<classes>
<class name="net.Test3"/>
</classes>
</test>
</suite>
и т.д.
То что selenium grid hub сам принимает решение, где ему запускать тесты это не вызывает никакой проблемы.
Каждый тест тестирует какую то свою стриничку.
Test1 тестирует index1.html
Test2 тестирует index2.html
Например: в Test 1 я нажимаю кнопку button1 а в Test 2 я нажимаю кнопку button 2.
Так вот иногда у меня кнопка button1 пытается нажаться на ноде на котором работает Test2.
Но там соответсвенно нету такой кнопки.
После этого я открываю скриншот который сделался в Test1. и вижу соответсвенно в нем страницу index2.html.
Сответсвенно Test1 у меня падает с ошибкой что кнопка button1 не была найдена. А Test 2 сам собой как то по тихому заканчивается без ошибки.
с браузером я работаю через RemoteWebDriver
polusok
(Mykhailo Poliarush)
10.Ноябрь.2012 15:25:34
#5
хм... не сталкивался с такой проблемой ранее
может быть действительно баг в selenium grid
если есть публичные страницы в интернете могу попробовать запустить у себя, чтобы посмотреть будет ли воспроизводиться ошибка или нет
Kovalev07
(Kovalev07)
11.Ноябрь.2012 02:34:08
#6
Публичных страниц в интернете нету.
Может быть мне надо как то сконфигурировать selenium hub? я его запускаю сейчас без параметров.
polusok
(Mykhailo Poliarush)
11.Ноябрь.2012 13:31:24
#7
кстати у вас теги test в testng.xml не закрыты
это вы ошиблись когда писали пост или у вас точно также в реальном testng.xml?
polusok
(Mykhailo Poliarush)
11.Ноябрь.2012 13:49:40
#8
ну таких настроек нету, которые бы решали вашу задачу
есть всякие таймауты, версии браузеров, количество сессий и так далее
более детально можно посмотреть тут http://code.google.com/p/selenium/wiki/Grid2
ArtOfLife
(Sergey Korol)
20.Ноябрь.2012 12:51:21
#9
Покажите содержимое нодов и код инициализации драйвера + вызова первой страницы тестов.
Kovalev07
(Kovalev07)
22.Ноябрь.2012 02:44:14
#10
в реальном testng.xml теги закрыты
Kovalev07
(Kovalev07)
22.Ноябрь.2012 03:01:47
#11
ноды запускаю следующим образом:
java - jar selenium-server-standalone-2.25.0.jar -role node -nodeConfig C:\NodeConfig.json -Dwebdriver.chrome.driver=C:\chromedriver.exe
NodeConfig.json:
{
"capabilities":
[
{
"platform": "WINDOWS",
"browserName": "chrome",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}
],
"configuration":
{
"maxSession": 1,
"port": 5555 ,
"hubHost": localhost,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
}
}
у меня 3 нода. на одном у меня порт 5555 на втором 5556 на третьем 5557
Код инициализации драйвера:
protected WebDriver webDriver;
public DesiredCapabilities capability;
capability = DesiredCapabilities.chrome();
capability.setBrowserName(browser);
capability.setCapability("chrome.switches",Arrays.asList("--disable-translate", "--always-authorize-plugins"));
webDriver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);
webDriver создается в абстрактном классе. все тесты наследуются уже от абстрактного класса.
Вызов первой страницы
webDriver.get( ".......blank.html");
сейчас вышел selenium-server-standalone-2.26.0.jar
может быть он решит проблему
ArtOfLife
(Sergey Korol)
03.Декабрь.2012 13:23:58
#12
Первая страница передается из дата провайдера теста или вы ее хардкодите в том же классе, где вызывается метод get? Интересно взглянуть на саму последовательность вызовов методов в вашем фреймворке.
barancev
(barancev)
10.Декабрь.2012 20:53:46
#13
Попробуйте обновить Selenium до версии 2.27.
В более ранних версиях в качестве идентификатора сессии использовался timestamp, поэтому могли возникать одинаковые идентификаторы. Начиная с версии 2.27 в качестве идентификатора используется UUID.
Kovalev07
(Kovalev07)
11.Декабрь.2012 02:12:37
#14
Обновил. Проблема осталась.
Kovalev07
(Kovalev07)
11.Декабрь.2012 02:13:56
#15
Пробовал использовать http://docs.oracle.com/javase/6/docs/api/java/lang/ThreadLocal.html
для переменной WebDriver. Тоже не помогло.
barancev
(barancev)
11.Декабрь.2012 07:53:12
#16
1. Думаю, следует завести баг: http://code.google.com/p/selenium/issues
2. Приложите информацию о том, как сконфигурирован грид и логи выполнения тестов на клиентской и серверной стороне, где происходит "перескакивание".
Ноды пишут лог на консоль, можно просто перенаправить в файл.
На клиенте повысьте уровень логирования для команд Selenium:
driver.setLogLevel(Level.INFO);
В логах должно быть видно, что запрос на поиск кнопки уходит к неправильному драйверу, после чего и нажатие тоже уходит туда же. Ключевым является запрос на поиск.
Ну и кусочек кода, где показана эта команда поиска, а также предыдущая команда, чтобы было видно, что действительно используется тот же самый драйвер.