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"
}
}
Option | Possible values | Description |
---|---|---|
logger.level | debug , info , warning , error |
Logging level. |
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 |
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. |
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. |
selenium
- http://www.seleniumhq.org/wda
- agent for WDA
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 . |
Strategy option | Possible values | Description |
---|---|---|
limit | - | Omit this property, сount of nodes always unlimited. |
params | - | Omit this property. |
node_list | - | Omit this property. |
Strategy option | Possible values | Description |
---|---|---|
params.namespace | string | Namespace in k8s for on-demand nodes. |
params.pod_creation_timeout | string as 12m , 60s |
Max waiting time for creating a pod. |
node_list.[].params.image | string | Docker image with selenium. |
node_list.[].params.port | string | Port of selenium. |