【Selenium】maxSession与maxInstance的关系及docker-selenium的使用
https://stackoverflow.com/questions/30095385/selenium-maxsession-for-all-nodeshttps://seleniumhq.github.io/docs/grid.htmlhttps://github.com/SeleniumHQ/docker-selenium主要写一下maxSession和maxInstance的作用...
内容
- 主要写一下maxSession和maxInstance的作用和使用方式
- docker-chrome的默认状态是什么?可能会出现什么错误?怎么修改?
命令
我们在使用进行Selenium测试。对于某些测试,我们需要序列化测试(不并发),以便最多一个浏览器(在我们的例子中,它也是一个用户)。可以使用-maxSession参数限制会话;有些时候我们的节点机器配置可能不是太好,不能够同时启动多个浏览器,可以使用-maxInstance参数限制;
使用selenium grid模式去设计我们的selenium UI自动化,那么在启动节点服务的命令是这样的:
java -Xrs -jar selenium-server.jar
-role node
-port 4444
-hub http://10.10.10.10:4450/grid/register
-firefoxProfileTemplate SeleniumProfile
-maxSession 5
-timeout 300000
-browser "browserName=firefox,maxInstances=10,platform=ANY,seleniumProtocol=WebDriver"
-browser "browserName=chrome,maxInstances=10,platform=ANY,seleniumProtocol=WebDriver"
或是
java -jar selenium-server-standalone.jar
-role node
-Dwebdriver.chrome.driver=chromedriver.exe
-nodeConfig node1Config.json
其中的参数-nodeConfig node1Config.json
(官网示例)
{
"capabilities": [
{
"browserName": "firefox",
"acceptSslCerts": true,
"javascriptEnabled": true,
"takesScreenshot": false,
"firefox_profile": "",
"browser-version": "27",
"platform": "WINDOWS",
"maxInstances": 5,
"firefox_binary": "",
"cleanSession": true
},
{
"browserName": "chrome",
"maxInstances": 5,
"platform": "WINDOWS",
"webdriver.chrome.driver": "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe"
},
{
"browserName": "internet explorer",
"maxInstances": 1,
"platform": "WINDOWS",
"webdriver.ie.driver": "C:/Program Files (x86)/Internet Explorer/iexplore.exe"
}
],
"configuration": {
"_comment" : "Configuration for Node",
"cleanUpCycle": 2000,
"timeout": 30000,
"proxy": "org.openqa.grid.selenium.proxy.WebDriverRemoteProxy",
"port": 5555,
"host": ip,
"register": true,
"hubPort": 4444,
"maxSession": 5
}
}
说明
-role node : 作为节点
-port 4444 : 暴露selenium hub调用的服务端口
-hub http://******:4450/grid/register : hub服务注册中心
-maxSession 5 : 最大的并发量
-firefoxProfileTemplate SeleniumProfile : firefox配置文件
-timeout 300000 : 超时时间
-browser "browserName=firefox,maxInstances=10,platform=ANY,seleniumProtocol=WebDriver" :注册firefox
-browser "browserName=chrome,maxInstances=10,platform=ANY,seleniumProtocol=WebDriver" :注册chrome
注册完的信息可以在 hub服务的http://10.10.10.10:4450/grid/console
页面看到
MaxInstances
相同版本的浏览器可以在远程系统上运行多少个实例;
-browser browserName=firefox,version=12,maxInstances=5,platform=LINUX
-browser browserName=InternetExplorer,version=9.0,maxInstances=5,platform=LINUX
可以在远程机器上同时运行5个Firefox 12
实例和5个IE9
实例。因此,hub调用的时候可以并行运行10个不同浏览器的实例(FF12和IE9)。
MaxSession
在远程系统中,一次可以并行运行多少个浏览器(任何浏览器和任何版本)。因此,这将覆盖maxInstances设置,并可以限制可以并行运行的浏览器实例的数量;
- 当
maxSession=1
,时强制您运行的浏览器不会超过1; - 当
maxSession=2
,可以同时进行2次chrome测试,或者1次Internet Explorer和1次Firefox测试)无论您定义了什么MaxInstances。
可以理解为
MaxInstances
:(默认值:5)这为每个节点提供了更多的插槽,例如,MaxInstances=5每个节点最多允许5个浏览器;
MaxSession
:(默认值:5)设置可以在节点中同时运行的最大测试数量。如果MaxInstances=5,则MaxSession也应该至少为5;
因此MaxSession
与整个Grid相关,它应该与hub配置一起使用,如果我们的selenium只有一个节点或者说我们采用直连node,也可以使用;MaxInstances
因为它与特定浏览器的实例数有关,它应该与节点配置一起使用
备注:默认的参数可以通过standalone.jar的源码去查看;还有就是理解我们一个脚本命令的流转流程(脚本->hub->node->webdriver->browserDriver->browser)
关于docker-selenium
我们主要会使用docker版的browser,其中包含了selenium node的服务,和普通window模式一样;这里需要注意的是,我们经常使用的selenium/standalone-chrome-debug
,启动服务后他的maxSession
和maxInstance
是多少?
node-base(docker-Dockerfile 部分内容,他们直接的继承关系就不用说了,可以去dockerhub或github上看)
...
#========================
# Selenium Configuration
#========================
# As integer, maps to "maxInstances"
ENV NODE_MAX_INSTANCES 1
# As integer, maps to "maxSession"
ENV NODE_MAX_SESSION 1
# As address, maps to "host"
ENV NODE_HOST 0.0.0.0
# As integer, maps to "port"
ENV NODE_PORT 5555
# In milliseconds, maps to "registerCycle"
ENV NODE_REGISTER_CYCLE 5000
# In milliseconds, maps to "nodePolling"
ENV NODE_POLLING 5000
# In milliseconds, maps to "unregisterIfStillDownAfter"
ENV NODE_UNREGISTER_IF_STILL_DOWN_AFTER 60000
# As integer, maps to "downPollingLimit"
ENV NODE_DOWN_POLLING_LIMIT 2
# As string, maps to "applicationName"
ENV NODE_APPLICATION_NAME ""
# Debug
ENV GRID_DEBUG false
可以看出
# As integer, maps to "maxInstances"
ENV NODE_MAX_INSTANCES 1
# As integer, maps to "maxSession"
ENV NODE_MAX_SESSION 1
官网提供的docker-chrome最大并发是1
,所以如果由并发超过1
的测试任务,可能回报出SessionNotCreatedException
错误
org.openqa.selenium.SessionNotCreatedException: A new session could not be created.
那么,我们想在docker-chrome上提高并发,怎么真么办?好办,改Dockerfile
,你可以通过继承方式去从头到尾地改,或者直接改启动命令
docker run --env NODE_MAX_INSTANCES 5 --env NODE_MAX_SESSION 5 ...
当前我还没有得出修改限制后的运行效果,可能docker-chrome就不支持并发,待更后续的试验结果;
参考
更多推荐
所有评论(0)