efficient selenium infrastructure with selenoid · installing selenium webdriver manually install...

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

Upload: others

Post on 29-May-2020

51 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Efficient Selenium Infrastructurewith Selenoid

by Ivan Krutov and Roman Orlov

Page 2: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Ivan Krutov

Java & Golang developer

Selenoid core maintainer

Devops

Page 3: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Roman Orlov

Python and Golang developer

Devops and SRE

Big Selenium cluster

Page 4: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

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 · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Available browsers

Page 6: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Selenium Tools

Selenoid BrowsersMoon

Page 7: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Agenda

Local browser tests development

Creating Selenium cluster

Advanced Selenoid features for big clusters

Page 8: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Selenium RC architecture

Test

Selenium Server

Browser

Selenium Core

Page 9: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Selenium WebDriver architecture

Page 10: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

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 · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Selenium window focus problem

Page 12: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Selenium browser settings problem

Page 13: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Installing two Firefox versions

/usr/binFF 68

FF 69

Page 14: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Selenium compatibility issues

Chromedriver ???75

Page 15: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Bad Foundation

Page 16: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Linux covers 80% of browsers

Page 17: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Let’s use containers where possible!

Page 18: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

How it should work

Selenium API

Container

Page 19: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

SelenoidSelenium

Page 20: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Selenoid runs isolated browsers

Page 21: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Images for all recent browsers

3.6+ 33.0+12.16

48.0+

Page 22: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

https://bit.ly/35sK7Jv

Page 23: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

https://bit.ly/testconworkshop

Page 24: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Chrome Devtools Protocol

JSON over WS

Page 25: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

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 · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Scaling Selenium for small team

Workstation Server or VM

Page 27: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Fault Tolerance

DC1 DC2

Page 28: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

ScalabilityDC1 DC2 DC3 DC4

Page 29: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Standard API

Page 30: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Access control

Page 31: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Browser consumption control

x 100

x 50

x 10someuser

Page 32: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Selenium Grid

Page 33: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Selenium Grid

Not fault-tolerantNot really scalableNo access control

Page 34: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Client-side Load Balancing

Page 35: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Hosts Information File

Page 36: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Client-side load balancing

Fault-tolerantScalableNo access controlNot standard Selenium

Page 37: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

A lot of teams

Page 38: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Server-side Load Balancing

Page 39: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

GoGridRouter (aka Ggr)

100% Golang

6 Mb binary

400 rps 200 Mb RAM→

Page 40: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Traditional Selenium testing

Selenium API Web Driver Browser

Page 41: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Traditional Selenium testing

Page 42: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Traditional Selenium testing

IE 8

IE 11

Webdriver

Page 43: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Traditional Selenium testing

Page 44: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Traditional Selenium testing

Page 45: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Browsers in containers

Page 46: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Windows in Docker container

?

Page 47: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Android in Docker container

Appium

Page 48: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Windows in Docker container

Webdriver

Page 49: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Building Windows image (step 1/3)

ISO

LaserDisc

VM Webdriver

Page 50: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Building Windows image (step 2/3)

VM

memory.img

disk.img

Page 51: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Building Windows image (step 3/3)

Page 52: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

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

Page 53: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Selenoid

Telegraf

Grafana

InfluxDB

Page 54: Efficient Selenium Infrastructure with Selenoid · Installing Selenium Webdriver Manually install Java Manually download Selenium JAR Manually download web-driver binaries Manually

Selenoid

Filebeat Logstash

Logstash

Kibana