Перейти к содержимому

Публикации DennisM

55 публикаций создано DennisM (учитываются публикации только с 23 мая 2023)



#148198 Какой максимум тестов можно кинуть в Selenium GRID в параллели?

Отправлено автор: DennisM 29 января 2016 - 16:01 в Selenium - Functional Testing

Есть Datadriven тесты и их много. Один сет на 200 второй на 500 тестов. При запуске 200 и более в параллели Grid медленно умирает. На нодах появляются браузеры и никакого движения внутри.  При запуске ~150 в параллели вроде всё работает но много тестов валятся не начавшись. Лимит на 2 нодах по 10 браузеров, т.е. 130 в ожидании сразу висят.

 

Error Message

Error forwarding the new session Error forwarding the request Read timed out
Command duration or timeout: 1110.85 seconds
Build info: version: '2.49.0', revision: '365eeb44deba2067b1761c8862ef21d55250e063', time: '2016-01-13 11:57:39'
System info: host: 'Jenkins', ip: '192.168.3.220', os.name: 'Windows 8.1', os.arch: 'x86', os.version: '6.3', java.version: '1.8.0_65'
Driver info: org.openqa.selenium.remote.RemoteWebDriver

 

Stacktrace

org.openqa.selenium.WebDriverException:
Error forwarding the new session Error forwarding the request Read timed out
Command duration or timeout: 1110.85 seconds
Build info: version: '2.49.0', revision: '365eeb44deba2067b1761c8862ef21d55250e063', time: '2016-01-13 11:57:39'
System info: host: 'Jenkins', ip: '192.168.3.220', os.name: 'Windows 8.1', os.arch: 'x86', os.version: '6.3', java.version: '1.8.0_65'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
    at com.expion.test.Test.AllServers.Test1(AllServers.java:297)
Caused by: org.openqa.grid.common.exception.GridException: Error forwarding the new session Error forwarding the request Read timed out

 

 

Конфигурация:

 

Java + Selenium 2.50.0 (WebDriver) + JUnit(Parameterized) + Maven(POM Parallel) -> Jenkins :)

 

Grid Hub:

java -jar c:\Jenkins\SeleniumGrid\selenium-server-standalone-2.50.0.jar -port 4444 -role hub -nodeTimeout 1000 -browserTimeout 10000

 

Grid Node:

java -Dwebdriver.chrome.driver=c:\Jenkins\SeleniumGrid\chromedriver.exe -Dwebdriver.ie.driver=c:\Jenkins\SeleniumGrid\IEDriverServer.exe -jar c:\Jenkins\SeleniumGrid\selenium-server-standalone-2.50.0.jar -role node -hub http://192.168.3.220...4/grid/register -port 5555 -maxSession 10 -browser "browserName=firefox, version=exp_auto_1, maxInstances=10" -browser "browserName=iexplore, maxInstances=10" -browser "browserName=chrome, maxInstances=10"




#148254 Какой максимум тестов можно кинуть в Selenium GRID в параллели?

Отправлено автор: DennisM 01 февраля 2016 - 18:06 в Selenium - Functional Testing

Интерестно  то, что если запустить всё на одну Ноду, то тесты проходят нормально. Похоже Грид не может аккуратно раскидать тесты на 2 ноды.
Для ограничения нагрузки на Грид, делал так же ограничение в   POM.XML. Не помогло...
Вижу решение только в уменьшении нагрузки (делать больше Джабс на Jenkins с меньшим количеством тестов в каждом) или раннить только на одной ноде. Но тогда теряется смысл Грида - раскидать тесты в параллели для уменьшения времени.
 
<build>
<plugins>
 
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
 
<includes>
<include>**/StackChecking.java</include>
</includes>
 
<parallel>all</parallel>
<threadCount>15</threadCount>
<argLine>-Xmx512m -XX:MaxPermSize=256m</argLine>
</configuration>
</plugin>
 
</plugins>
</build>



#148255 Какой максимум тестов можно кинуть в Selenium GRID в параллели?

Отправлено автор: DennisM 01 февраля 2016 - 18:11 в Selenium - Functional Testing

Машины мощщщные? где тесты запускаете?

Максимум 5-6 потоков надо ставить.

Все виртуалки. По 8 CPU дано каждой. С 10 браузерами в параллели нагрузка 70-80%




#148286 Какой максимум тестов можно кинуть в Selenium GRID в параллели?

Отправлено автор: DennisM 02 февраля 2016 - 14:03 в Selenium - Functional Testing

 

<threadCount>15</threadCount>

Судя по конфигурации, у вас по 10 браузеров разного типа, т.е. 15 потоков это на 5 больше, чем может выделить хаб, при условии, если вы используете стандартный паттерн WebDriverFactory.

Т.е. вам нужно делать количество потоков не больше, чем указано здесь:

-browser "browserName=chrome, maxInstances=10

 

Даже если там вот так: 
 
<parallel>all</parallel>
<useUnlimitedThreads>true</useUnlimitedThreads>
<parallelOptimized>true</parallelOptimized>
 
Результат тот же. На одной ноде всё ОК, на одновременно 2 начинает падать в случайном порядке.
 
Иногда в логе просто это:
Stacktrace java.lang.NullPointerException

 

С одной нодой этот тест проходит.




#148289 Какой максимум тестов можно кинуть в Selenium GRID в параллели?

Отправлено автор: DennisM 02 февраля 2016 - 17:06 в Selenium - Functional Testing

Заметил в отчете что фейлятся тесты которые уже прошли. Грид выполнил тест на одной ноде и бросил на второй? О_о
 
Test Name                   Duration         Age
........ 
.......
Test6_StackMenu[3]     2 min 2 sec    1
Test6_StackMenu[3]     0 ms               1
Test6_StackMenu[0]     7 min 19 sec   1

 

Test6_StackMenu[0]     0 ms                1

......

.....




#148291 Какой максимум тестов можно кинуть в Selenium GRID в параллели?

Отправлено автор: DennisM 02 февраля 2016 - 21:47 в Selenium - Functional Testing

Да.... Похоже JUnit (Parameterized) не работает коректно с Selenium Grid...




#148577 замер времени на выполнение операциий.

Отправлено автор: DennisM 16 февраля 2016 - 15:10 в Selenium - Functional Testing

import org.apache.commons.lang3.time.StopWatch;

 

....

 

StopWatch timer = new StopWatch();

 

timeout = 20; //sec

....

 

timer.start();

driver.(to-do bla bla);  // :)

new WebDriverWait(driver, timeout).until(ExpectedConditions.presenceOfElementLocated(elementsToWait));

timer.stop();

 

System.out.println("\nTime 1 : " + timer.getTime() + " milliseconds <<<<<--------------------------------<<<<<<");

 

 

timer.reset();

 

timer.start();

driver.(to-do bla bla);  // :)

new WebDriverWait(driver, timeout).until(ExpectedConditions.presenceOfElementLocated(elementsToWait));

timer.stop();

 

System.out.println("\nTime 2: " + timer.getTime() + " milliseconds <<<<<--------------------------------<<<<<<");

 

 

timer.reset();

 

....




#148582 Process refused to die after 10 seconds, and couldn't taskkill it

Отправлено автор: DennisM 16 февраля 2016 - 16:00 в Selenium - Functional Testing

Если ничего не помогает, убиваем жестко. :)

 

Извлечь комманду:

taskkill /f /im firefox.exe 

или

taskkill /f /im chrome.exe 

или

taskkill /f /im iexplorer.exe 

 

Метод для этого:

 

public String execCmdCommand(String command){
 
StringBuffer output = new StringBuffer();
 
Process p;
try {
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader = 
new BufferedReader(new InputStreamReader(p.getInputStream()));
 
String line = "";
 
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
 
} catch (Exception e) {
e.printStackTrace();
}
 
return output.toString();
}



#148630 Process refused to die after 10 seconds, and couldn't taskkill it

Отправлено автор: DennisM 17 февраля 2016 - 14:13 в Selenium - Functional Testing

Там и так taskkill выполняется, после этого Selenium 10 секунд ждёт завершения процесса. Судя по всему, этого времени просто не хватает, но в конце концов процесс всё таки останавливается. Так что необходимости повторно делать ему taskkill я не вижу.

Я не знаю что делает селениум при driver.close() . Похоже просто пытается закрыть корректно. Но taskkill убивает браузер всегда. Не закрывает аппликашку а убивает именно процесс.




#148680 Process refused to die after 10 seconds, and couldn't taskkill it

Отправлено автор: DennisM 18 февраля 2016 - 14:33 в Selenium - Functional Testing

При driver.close() просто закрывается текущее окно и всё, а там уже сам браузер пусть решает, что ему делать.

 

Зато при driver.quit() закрываются все окна браузера и останавливается процесс браузера. В операционной системе Windows для этого используется как раз taskkill. Именно поэтому второй раз убивать его нет смысла. Дважды не казнят :)

webDriver.Close() – Close() method closes the browser window that the driver has focus of.
webDriver.Quit() – Calls dispose; in other terms quit() method calls dispose method which will turn all the browser windows closed and ends webdriver session.
webDriver.Dispose() – Dispose() method closes all browser windows and safely ends the session.

 

taskkill - убивает всё не safely. :) 

 

Это разница как закрыть окно по крестику "Х" или убить процесс из диспетчера задач.
Использую taskkill всегда в конце тестов. Особенно после тяжелого datadriven с тяжелыми страницами. 
Если браузер зависает с сообщением "процесс не отвечает" то как бы вебдрайвер не дергался, окно он не закрывает. 
Taskkill - всё равно kill! ;)



#148681 Выпадающие списки Slenium WebDriver

Отправлено автор: DennisM 18 февраля 2016 - 14:52 в Selenium - Functional Testing

Бывает что на странице элементы не Select и не могут инициализироваться пока не выпадут из меню. В селениуме есть Actions.

 

Webelement menu= driver.findElement(By.xpath("//div[@class='меню.Иконка из которой всё выпадает']/a")); //меню. Иконка из которой всё выпадает

Actions mouse = new Actions(driver);

//Двигаем мышь на меню и зависаем над ним. Меню вываливается.
mouse.moveToElement(menu).build().perform();  

//mouse.moveToElement(menu).click().build().perform(); - если надо кликнуть а не висеть над меню

 

//Кликаем по опции из списка. 

Webelement item= driver.findElement(By.xpath("//div[@class='Элемент меню из списка']/a")); //Элемент меню из списка

mouse.moveToElement(item).click().build().perform();
 

//или тут уже сам Webdriver может найти и кликнуть

//item.click();

 

Подробнее:

https://selenium.goo...ns/Actions.html

http://toolsqa.com/s...e-hover-action/

http://www.guru99.co...-webdriver.html




#148721 Process refused to die after 10 seconds, and couldn't taskkill it

Отправлено автор: DennisM 19 февраля 2016 - 16:18 в Selenium - Functional Testing

 

 

Если ничего не помогает, убиваем жестко. :)

 

Извлечь комманду:

taskkill /f /im firefox.exe 

или

taskkill /f /im chrome.exe 

или

taskkill /f /im iexplorer.exe 

 

Метод для этого:

 

public String execCmdCommand(String command){
 
StringBuffer output = new StringBuffer();
 
Process p;
try {
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader = 
new BufferedReader(new InputStreamReader(p.getInputStream()));
 
String line = "";
 
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
 
} catch (Exception e) {
e.printStackTrace();
}
 
return output.toString();
}

 

это всё понятно, но как выбрать именно нужный экземпляр? тесты то раннятся в параллель и висит несколько инстансов

 

 

Для этого надо указывать PID  (Process ID)

taskkill /pid 1230  

https://technet.micr...y/bb491009.aspx

 

Вот как достать PID из текущего WebDriver теста в JAVA нужно поискать... Например:

http://stackoverflow...hed-by-selenium

 

Или просто после всех тестов убивай все оставшиеся браузеры.




#148722 Ошибка в Selenium WebDriver

Отправлено автор: DennisM 19 февраля 2016 - 16:30 в Selenium - Functional Testing

Поддерживаю про XPath.

такое дело: "//table/tbody/tr[1]/td[3]//table/tbody/tr/td[5]"  самое ужасное что можно придумать.

Вбей это в Firepath и оцени сколько элементов нашлось.

 

или проверь в коде типа:

int elements = driver.findElements(By.xpath("//table/tbody/tr[1]/td[3]//table/tbody/tr[1]/td[5]")).size();

если более 1, то кури мануал по Xpath, или давай сюда хтмл страницы.




#148950 Помогите новичку!

Отправлено автор: DennisM 29 февраля 2016 - 14:34 в Selenium - Functional Testing

//button/div/span[text() = 'Войти' or text() = 'Войтi' or text()='ENTER']

 

по вкусу добавь еще "or text()='bla-bla-Language'"  :)

 

проверил страницу. Там уже новые слова.

 

//button/div/span[text() = 'Войти' or text() = 'Увійти' or text()='Log In']

 

и страница кривая. Эти кнопки ХЗ где и не видны... Но XPath работает. ;)




#148984 Selenium WebDriver Браузер во всю ширину экрана

Отправлено автор: DennisM 01 марта 2016 - 17:49 в Selenium - Functional Testing

Jenkins как сервис запущен или запускал jenkins.war из коммандной строки?

Windows  не разрешает сервисам запускать другие программы как Firefox.

Запусти

java -jar jenkins.war 

как администратор.




#148985 Запустить JS внутри iframe

Отправлено автор: DennisM 01 марта 2016 - 18:02 в Selenium - Functional Testing

Есть такая страница:
 
<!DOCTYPE html>
<head id="Head1">
<body class="css-bootstrap HoverManager">
....
 
<iframe id="ml_frame">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR...l1-strict.dtd">
<head id="Head1">
<body class="main_body_wrapper>
....
<div class="q-msg-text-contianer">
<textarea class="js-msg-text-entrySelection(item)" style="display: none;"></textarea>
<div id="messageDiv">
</div>
</div>
 
....
</body>
</html>
</iframe>
...
</body>
</html>
 
 
Селениум не может ввести техт в <div id="messageDiv"> , а textarea скрыта...
можно выполнить JS чтобы сделать видимым  textarea. Но!
 
JS начинает в головы документа и все внутренности iframe защищены... 
 
Вопрос! Как сделать видимым textarea?



#149038 Запустить JS внутри iframe

Отправлено автор: DennisM 02 марта 2016 - 14:57 в Selenium - Functional Testing

 

Селениум не может ввести техт в <div id="messageDiv"> , а textarea скрыта...

 

 

Что значит не может ввести ? Ошибка какая-то происходит.

И ты переключаешься во фрейм ?

driver.switchTo().frame
Переключаюсь драйвером. Но драйвер не может ввести текст в <div id="messageDiv"> елемент, и он его нормально видит
Походу он может только в <textarea>, а она скрыта..
Смотри в HTML



#149039 Selenium WebDriver Браузер во всю ширину экрана

Отправлено автор: DennisM 02 марта 2016 - 15:00 в Selenium - Functional Testing

 

Jenkins как сервис запущен или запускал jenkins.war из коммандной строки?

Windows  не разрешает сервисам запускать другие программы как Firefox.

Запусти

java -jar jenkins.war 

как администратор.

Jenkins запущен был, как сервис.

Удалось решить проблему путём создания Новой среды сборки в Настройках Jenkins.

Стандартный "мастер" отключил, создал новый узел Autotest, выставил Способ запуска - "Let Jenkins control this Windows slave as a Windows service". Прописал Логин/Пароль и нужный хост.

Автотесты, кажется, стали прогоняться так, как если бы их запустил прописанный пользователь. Разрешение экрана теперь, вроде бы, нормальное 1920*1080.

 

>>> Windows  не разрешает сервисам запускать другие программы как Firefox.

Плохо. А что делать? Всегда запускать jenkins.war из коммандной строки?

 

Да. Я создал .bat файл для запуска с админскими правами. И проблем никаких. ;)

Также Jenkins скидывает всё свое барахло в папку юзера. Можно указать свое место.
Мой Start_Jenkins.bat файл выглядит так:
 
SET JENKINS_HOME=C:\Jenkins\.jenkins
java -jar jenkins.war



#149042 Selenium WebDriver Браузер во всю ширину экрана

Отправлено автор: DennisM 02 марта 2016 - 16:27 в Selenium - Functional Testing

 

 

Да. Я создал .bat файл для запуска с админскими правами. И проблем никаких. ;)

Также Jenkins скидывает всё свое барахло в папку юзера. Можно указать свое место.
Мой Start_Jenkins.bat файл выглядит так:
 
SET JENKINS_HOME=C:\Jenkins\.jenkins
java -jar jenkins.war

 

Отлично, всё ясно!

Я так же попробовал, но появилась одна проблема:

Jenkins, который запускался через службы, хранил все свои настройки в папке "C:\Program Files (x86)\Jenkins".

А Jenkins, который запускается через java -jar jenkins.war, смотрит настройки в папке "C:\Users\akorsakov\.jenkins".

Вопрос: как мне сделать так, чтобы во втором случае настройки смотрелись из папки "C:\Program Files (x86)\Jenkins", а не "C:\Users\akorsakov\.jenkins"???

Достаточно ли для этого запускать так:

SET JENKINS_HOME=C:\Program Files (x86)\Jenkins

???

 

Не уверен что винда разрешит самостоятельно программе сохранятся в program files.
Хотя если запущенно от администратора, то да.
Попробуй. Только на всякий случай сделай бэкап. ;)



#149048 Chromedriver: перестал срабатывать клик по элементу, хотя ff отрабатыв

Отправлено автор: DennisM 02 марта 2016 - 20:02 в Selenium - Functional Testing

В ff этот же скрипт отрабатывает полностью, так же как и ранее в хромдрайвере

После обновления Хрома вы обновили сам WebDriver и chromedriver.exe?




#149104 Выбор Cucumber Feature file через Jenkins

Отправлено автор: DennisM 03 марта 2016 - 19:41 в Selenium - Functional Testing

Имеем:
WebDriver -> Cucumber -> Maven build -> Jenkins
 
В Cucumber Запускаем всё это из:
-----
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
 
import org.junit.runner.RunWith;
 
@RunWith(Cucumber.class)
@CucumberOptions(
dryRun = false,
monochrome = true,
plugin = {"pretty", "html:target/cucumber"},
features="src/test/resources/Features/Tests",  //<<< ------   Вот это надо менять
glue={"com.work.test.CucumberStepDefinition"}
)
public class Pixie {
}

-------

 

Вопрос:
Как из Jenkins выбирать папку с Cucumber тестами?
 
Из Jenkins Build можно достать Choice параметр через:
String environment = System.getenv("environment");
 
Если сделать так:
features="src/test/resources/Features/" + System.getenv("environment") + "
 
То огурец ругается что этот параметр должен быть статическим...
 
???



#149167 Выбор Cucumber Feature file через Jenkins

Отправлено автор: DennisM 04 марта 2016 - 14:22 в Selenium - Functional Testing

Мне на практике было удобнее не фичи выбирать, а фильтровать тесты по тэгам.

Тэг можно навесить как на отдельный тест, так и на фичу. В итоге, в параметре features указываешь корневую папку, где лежит вообще всё. А дополнительно в командной строке в cucumber.options укаываешь нужные тэги.

Важная особенность: ключей "--tags" может быть несколько, а в одном ключе можно указать несколько тэгов через запятую. Так вот, при перечислении в одном ключе выборки объединяются (OR), а для разных ключей применяется пересечение (AND). В доках этого не видел, выяснил экспериментально.

 
Звучит неплохо. Но! Не хочется давать мануальщикам бомбить чего-то в командной строке.  :secret: Надо им давать только Choice Option из Jenkins drop-down...  :rtfm:
Думаю сделать несколько .java файлов с разными @CucumberOptions.
 
В pom.xml сделать разные профайлы. И в профайлах выбирать файл для запуска...
Минус в том что придется загадить pom.xml кучей профайлов...
 
Это дело:
---
<property>
<name>environment</name>
<value>TestsSetOne</value>
</property>
---
 
 он понимает так же как Java:
String environment = System.getenv("environment");
 
 
 
Вот это придется размножить:
 
 
----
<profile>
<id>TestsSetOne</id>
<activation>
<property>
<name>environment</name>
<value>TestsSetOne</value>
</property>
</activation>
 
 
<build>
<plugins>
 
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
 
<includes>
<include>**/CucumberRun/SetOne.java</include>
</includes>
 
<!-- <parallel>all</parallel> <runOrder>random</runOrder> <useUnlimitedThreads>true</useUnlimitedThreads> 
<parallelOptimized>true</parallelOptimized> -->
<argLine>-Xmx512m -XX:MaxPermSize=256m</argLine>
</configuration>
</plugin>
 
</plugins>
</build>
 
</profile>



#149168 Запустить JS внутри iframe

Отправлено автор: DennisM 04 марта 2016 - 14:28 в Selenium - Functional Testing

Лучше покажите страницу, где есть демка или пример этого редактора. Очень сложно по неполному куску HTML-кода давать какие-то советы.

Не выйдет... Эта форма находится на страницах после логина. Шерить пароли не могу.  :secret:




#149169 Как найти то чего нет?

Отправлено автор: DennisM 04 марта 2016 - 14:34 в Автоматизированное тестирование

Можно написать что-нибудь свое...
 
public boolean CheckForNotElement(By by, String FailText) throws Exception
{
 driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
 if (!driver.findElement(by).isDisplayed()){
   System.out.println(FailText);
   driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
return false;
} else
{
 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
 return true;
}
}



#149254 Чтение Cucumber feature file из TFS

Отправлено автор: DennisM 09 марта 2016 - 19:15 в Автоматизированное тестирование

Можно-ли читать тест-кейс из TFS из извлекать его через Cucumber так же как из .feature файла?

Например тест кейс записан в gherkin формате:

 

Given ...

When ...

Then ...

 

Во время билда, перед извлечением тестов взять TFS тест кейс, записать в локальную директорию и извлечь с помощью Cucumber?