jsonwire-gridWebDriverGrid
This is high-performance scalable implementation of Selenium Grid (hub),
Selenium-Grid allows you run your tests on different machines against different browsers in parallel. That is, running multiple tests at the same time against different machines running different browsers and operating systems. Essentially, Selenium-Grid support distributed test execution. It allows for running your tests in a distributed test execution environment.
One session per one node, no more no less😺
Scaling grid-instances for fault-tolerance
Support and effective management over 9000 nodes, for parallel testing👹
Single entry point for all your test apps
Send metrics to statsd
Support on-demand nodes in Kubernetes cluster (Only if grid running in cluster)
Download last release and unzip
cd to jsonwire-grid_vXXX
Type export CONFIG_PATH=./config-local-sample.json
Type ./jsonwire-grid
Grid running!
Download selenium
java -jar selenium-server-standalone-3.4.0.jar -role node -hub http://127.0.0.1:4444/grid/register
Repeat!
Try create session, such as curl -X POST http://127.0.0.1:4444/wd/hub/session -d '{"desiredCapabilities":{"browserName": "firefox"}}'
If you see something similar with {"state":null,"sessionId":"515be56a...
all right! If not, submit issue
Configurations are stored in json files. Example:
{
"logger": {
"level": "debug"
},
"db": {
"implementation": "local"
},
"grid": {
"client_type": "selenium",
"port": 4444,
"strategy_list": [
{
"type": "persistent"
}
],
"busy_node_duration": "15m",
"reserved_node_duration": "5m"
}
}
Logger - Configuration of logger.
Option
Possible values
Description
logger.level
debug
, info
, warning
, error
Logging level.
DB - Configuration of storage.
Option
Possible values
Description
db.implementation
mysql
, local
Select your favorite db, or local storage.
db.connection
see next table
DSN for your db.
Note: Note: Local (in-memory) storage does not support common session storage between grid-instances.
DB implementation
DSN format
mysql
spec , example db_user:db_pass@(db_host:3306)/db_name?parseTime=true
(parseTime=true - required option)
local
omit this property, because every instance have its own in-memory storage
Statsd - Configuration of metrics.
Option
Possible values
Description
statsd.host
string
Host of statsd server.
statsd.port
int
Port of statsd server.
statsd.protocol
string
Network protocol.
statsd.prefix
string
Prefix of metrics tag.
statsd.enable
bool
Enable metric.
Grid - Configuration of app.
Option
Possible values
Description
grid.client_type
selenium
, wda
Type of used nodes.
grid.port
int
Grid will run on this port.
grid.busy_node_duration
string
as 12m
, 60s
Max session lifetime, when timeout was elapsed grid will kill the session.
grid.reserved_node_duration
string
as 12m
, 60s
Max timeout between send request POST /session
and opening the browser window. (Deprecated will renamed)
grid.strategy_list
array
List of strategies, if grid not able create session on first strategy it go to next, until list ends. Read more about strategies.
Option
Possible values
Description
type
string
, see type of strategy.
Host of statsd server.
limit
int
, unlimited if equals 0
Max count of active nodes on this strategy.
params
object
, dependent on strategy type
Object describes available nodes, ex. docker config, kubernetes config, etc.
node_list
array
, dependent on strategy type
Array of objects describing available nodes.
node_list.[].params
object
, dependent on strategy type
Object of describing node, ex. image_name, etc.
node_list.[].capabilities_list
array
, ex. [{"foo: "bar"}, {"foo: "baz", "ololo": "trololo"}]
array of objects describes available capabilities .
persistent
- using externally started nodes, same as original selenium grid.
Strategy option
Possible values
Description
limit
-
Omit this property, сount of nodes always unlimited.
params
-
Omit this property.
node_list
-
Omit this property.
kubernetes
- on-demand nodes in kubernetes cluster.
Strategy option
Possible values
Description
params
-
Omit this property.
node_list.[].params.image
string
Docker image with selenium.
node_list.[].params.port
string
Port of selenium.