Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree...

54
Efficient Selenium Infrastructure with Selenoid by Ivan Krutov and Roman Orlov

Transcript of Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree...

Page 1: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Efficient Selenium Infrastructurewith Selenoid

by Ivan Krutov and Roman Orlov

Page 2: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Ivan Krutov

Java & Golang developer

Selenoid core maintainer

Devops

Page 3: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Roman Orlov

Python and Golang developer

Devops and SRE

Big Selenium cluster

Page 4: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Selenium clustersTypical Selenium Grid

50 browsers

10000 sessions / day

1 data center

5 rps

500 Kbit/s

Sometimes down

My cluster

5000+ browsers

2.5M sessions / day

5 data centers

4000 rps

> 2 Gbit/s

24/7/365

Page 5: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Available browsers

Page 6: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Selenium Tools

Selenoid BrowsersMoon

Page 7: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Agenda

Local browser tests development

Creating Selenium cluster

Advanced Selenoid features for big clusters

Page 8: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Selenium RC architecture

Test

Selenium Server

Browser

Selenium Core

Page 9: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Selenium WebDriver architecture

Page 10: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Installing Selenium WebdriverManually install Java

Manually download Selenium JAR

Manually download web-driver binaries

Manually unpack web-drivers from archives

Manually install required browsers

Manually type complicated start command

Page 11: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Selenium window focus problem

Page 12: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Selenium browser settings problem

Page 13: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Installing two Firefox versions

/usr/binFF 68

FF 69

Page 14: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Selenium compatibility issues

Chromedriver ???75

Page 15: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Bad Foundation

Page 16: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Linux covers 80% of browsers

Page 17: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Let’s use containers where possible!

Page 18: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

How it should work

Selenium API

Container

Page 19: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

SelenoidSelenium

Page 20: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Selenoid runs isolated browsers

Page 21: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Images for all recent browsers

3.6+ 33.0+12.16

48.0+

Page 22: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

https://bit.ly/35sK7Jv

Page 23: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

https://bit.ly/testconworkshop

Page 24: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Chrome Devtools Protocol

JSON over WS

Page 25: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Chrome Devtools ProtocolDOM tree manipulation

CSS style manipulation

Tracking network activities

Inspecting accessibility tree

Page tracing and profiling

Subscribe to page events

Page 26: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Scaling Selenium for small team

Workstation Server or VM

Page 27: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Fault Tolerance

DC1 DC2

Page 28: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

ScalabilityDC1 DC2 DC3 DC4

Page 29: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Standard API

Page 30: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Access control

Page 31: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Browser consumption control

x 100

x 50

x 10someuser

Page 32: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Selenium Grid

Page 33: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Selenium Grid

Not fault-tolerantNot really scalableNo access control

Page 34: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Client-side Load Balancing

Page 35: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Hosts Information File

Page 36: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Client-side load balancing

Fault-tolerantScalableNo access controlNot standard Selenium

Page 37: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

A lot of teams

Page 38: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Server-side Load Balancing

Page 39: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

GoGridRouter (aka Ggr)

100% Golang

6 Mb binary

400 rps 200 Mb RAM→

Page 40: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Traditional Selenium testing

Selenium API Web Driver Browser

Page 41: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Traditional Selenium testing

Page 42: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Traditional Selenium testing

IE 8

IE 11

Webdriver

Page 43: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Traditional Selenium testing

Page 44: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Traditional Selenium testing

Page 45: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Browsers in containers

Page 46: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Windows in Docker container

?

Page 47: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Android in Docker container

Appium

Page 48: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Windows in Docker container

Webdriver

Page 49: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Building Windows image (step 1/3)

ISO

LaserDisc

VM Webdriver

Page 50: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Building Windows image (step 2/3)

VM

memory.img

disk.img

Page 51: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Building Windows image (step 3/3)

Page 52: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

http://github.com/aerokube/windows-images

Page 53: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Selenoid

Telegraf

Grafana

InfluxDB

Page 54: Efficient Selenium Infrastructure with Selenoid€¦ · Chrome Devtools Protocol DOM tree manipulation CSS style manipulation Tracking network activities Inspecting accessibility

Selenoid

Filebeat Logstash

Logstash

Kibana