Mais conteúdo relacionado Semelhante a Selenium grid on-demand (20) Selenium grid on-demand2. ‣ Создатель сообщества @qa_ru и
@qa_jobs в Telegram
‣ В QA c 2012 года
‣ В IT с 2007 года
‣ Немного пишу код =)
‣ Люблю Linux
‣ Спикер на QAFest 2016
и XPDays 2016, TestCon 2017
12. ‣ Прогнать автотесты (регресс)
‣ Проанализировать результаты
прогона автотестов
Успеть за 30 минут:
13. ‣ Прогнать автотесты (регресс)
‣ Проанализировать результаты
прогона автотестов
‣ Сделать приемочное тестирование
Успеть за 30 минут:
15. Чтобы успеть за 30 минут, надо:
‣ Ускорить прогон автотестов (до 10 минут)
16. Чтобы успеть за 30 минут, надо:
‣ Ускорить прогон автотестов (до 10 минут)
‣ Избавиться от очередей на запуск автотестов
19. ‣ Залить проблему $ (купить еще
железа)
‣ Решить проблему инженерным
способом
Как ускорить прогон автотестов?
23. ‣ Команды, выпускающие релизы от
3-5 раз в день
‣ Команды, выпускающие по 1
релизу раз в 1-2 недели
As is: команды/проекты
24. ‣ Команды, выпускающие релизы от
3-5 раз в день
‣ Команды, выпускающие по 1
релизу раз в 1-2 недели
‣ 20 проектов с автотестами
As is: команды/проекты
30. CI: Jenkins
VM 2 VM 3VM 1 VM 4 VM 5
As is:
VM7 VM 8VM 6 VM 9 VM 10
VM 12 VM 13VM 11 VM 14 VM 15
ДЦ1
ДЦ2
ДЦ3
32. ‣ от 30 до 70 тестов
1 проект с
автотестами -
это:
33. ‣ от 30 до 70 тестов
‣ Запуск тестов в 1 поток = 30 минут
1 проект с
автотестами -
это:
34. ‣ от 30 до 70 тестов
‣ Запуск тестов в 1 поток = 30 минут
‣ Запуск тестов в 3 потока = 10
минут
1 проект с
автотестами -
это:
35. ‣ от 30 до 70 тестов
‣ Запуск тестов в 1 поток = 30 минут
‣ Запуск тестов в 3 потока = 10
минут
‣ На практике от 5 до 10 потоков
1 проект с
автотестами -
это:
38. ‣ 60 сессий с тестами
‣ 15 vm = 30 сессий
Запуск 20
проектов -
это:
39. ‣ 60 сессий с тестами
‣ 15 vm = 30 сессий
‣ 30 сессий отправятся в очередь
Запуск 20
проектов -
это:
41. Virtual machines Docker
30 сессий
15 машин = 60 Gb RAM / 30 Cores
500 Mb RAM на 1 контейнерvs
120 сессий
15 машин
2 сессии в машине
42. Virtual machines Docker
30 сессий
15 машин = 60 Gb RAM / 30 Cores
500 Mb RAM на 1 контейнерvs
120 сессий
15 машин
2 сессии в машине
46. Virtual machines Docker
30 сессий
15 машин = 60 Gb RAM / 30 Cores
500 Mb RAM на 1 контейнерvs
120 сессий
15 машин
2 сессии в машине
73. $ java
-jar selenium-server-standalone.jar
-role hub
Host 1
74. $ java
-jar selenium-server-standalone.jar
-role hub
Hub
process
Host 1
80. $ java
-jar selenium-server-standalone.jar
-role node
-hub http://host1:4444/grid/register
Host 2
87. Момент из жизни ноды
Hub
Node
Привет! Хочешь пообщаться? Я тут:
Host: 192.168.1.5
Port: 5555
А еще я дружу с Chrome!
88. Момент из жизни ноды
Hub
Node
Привет! Хочешь пообщаться? Я тут:
Host: 192.168.1.5
Port: 5555
А еще я дружу с Chrome!
Ага! На,
потестируй-ка!
91. Внутри контейнера с нодой
/opt/selenium$ ls
chromedriver-2.29
selenium-server-standalone.jar
config.json
93. entry_point.sh
java ${JAVA_OPTS} -jar /opt/selenium/selenium-server-standalone.jar
-role node
-hub http://$HUB_HOST:$HUB_PORT/grid/register
-nodeConfig /opt/selenium/config.json
${SE_OPTS} &
94. Запуск контейнера с нодой
$ docker run selenium/node-chrome
-e HUB_HOST=192.168.1.5
-e HUB_PORT=4444
102. Pipeline job autotests
cli Number Of
Containers
Selenium
Hub
Selenium
chrome
node
Selenium
firefox
node
Selenium
chrome
node
Selenium
firefox
node
Selenium Grid
Hub, node запущены
в docker-контейнерах
Jenkins: Job1
cli Create
Selenium Grid
run
AutotestsProject
103. Pipeline job autotests
cli Number Of
Containers
Selenium
Hub
Mesos
master
marathon
REST API
Selenium
chrome
node
Selenium
firefox
node
Selenium
chrome
node
Selenium
firefox
node
Selenium Grid
Hub, node запущены
в docker-контейнерах
Jenkins: Job1
cli Create
Selenium Grid
run
AutotestsProject
104. Pipeline job autotests
cli Number Of
Containers
Selenium
Hub
Mesos
master
marathon
REST API
Selenium
chrome
node
Selenium
firefox
node
Selenium
chrome
node
Selenium
firefox
node
Selenium Grid
Hub, node запущены
в docker-контейнерах
Jenkins: Job1
cli Delete
Selenium Grid
cli Create
Selenium Grid
run
AutotestsProject
109. $ $ ansible-playbook -i inventory play-site.yml
-e test_id=mytest
-e nodes_type=chrome
-e nodes_count=4
116. $ docker run
-p <?>:5555
selenium/node-chrome
Host with Mesos
Ports to use:
20000
…
21000
117. $ docker run
-p 20856:5555
selenium/node-chrome
Host with Mesos
Ports to use:
20000
…
21000
118. $ docker run
-p 20856:5555
selenium/node-chrome
Host with Mesos
Ports to use:
20000
…
21000
119. Selenium Node в Mesos
‣ Поднимается на случайном хосте
‣ Получает случайный порт
120. Docker bridged network
Docker container
Selenium
Node
20345
5555
Reality
Host: 192.168.1.5
Port: 20345
From view of Node
Host: 172.17.0.2
Port: 5555
127. Docker host network
Docker container
Selenium Node
20345
X virtual framebuffer
‣ Ему нужен порт
‣ А он уже занят
другим контейнером!
128. Docker bridged network
Docker container
Selenium
Node
20345
5555
Docker environment
$HOST: 192.168.1.5
$PORT0: 20345
Reality
Host: 192.168.1.5
Port: 20345
136. Порт порту - рознь!
‣ Порт, на котором поднимается нода
‣ Порт, который нода сообщает хабу
138. Give it to Hub!
if (advertisePort != null) {
myPort = advertisePort;
}
141. В итоге
• Кластер, в котором создаются докер-
контейнеры
• Selenium grid как приложение
142. В итоге
• Кластер, в котором создаются докер-
контейнеры
• Selenium grid как приложение
• Jenkins
143. В итоге
• Кластер, в котором создаются докер-
контейнеры
• Selenium grid как приложение
• Jenkins
• Cкрипты, которые автоматизируют какую-то
работу