Java + Selenium 系列之多线程并发执行用例
一、Selenium Grid
什么是Selenium Grid?
Selenium Grid是Selenium的三⼤组件之一
Selenium Grid允许⽤⼾同时在不同的机器和系统上测试不同浏览器
二、Selenium Grid组成
hub节点
中⼼节点,或总控节点 管理各个node节点的注册信息和状态信息 接收并转发客⼾端(测试脚本)请求到合适的node节点 node节点
⼦节点,或代理节点 负责注册配置信息到hub节点(平台、浏览器、浏览器版本等) 负责接收来⾃hub节点的转发的请求以执⾏具体⽤例 也可单独作为远程节点执⾏测试⽤例
三、环境准备
测试机器安装JDK,配置环境变量
下载selenium-server-standalone-x.x.x.jar
参考链接https://npm.taobao.org/mirrors/selenium
四、配置运⾏
1、启动hub
java -jar selenium-server-standalone-3.141.59.jar -role hub -port 8888 -maxSession 10
参数解释:
java -jar selenium-server-standalone-3.141.59.jar ----------运⾏jar包
-role hub ----------以hub的⻆⾊运⾏
-port 8888 ----------指定hub运⾏的端⼝(默认为4444)
-maxSession 10 ---------最⼤的处理会话
为了⽅便执⾏,可以写成bat脚本再执⾏
2、查看hub的运⾏状态
浏览器中输⼊ http://localhost:8888/grid/console ,可以打开hub运行状态
3、启动node
以chrome的配置为例:
java -Dwebdriver.chrome.driver="chromedriver.exe" -jar selenium-server-standalone-3.141.59.jar -role node -hub "http://192.168.X.X:8888/grid/register" -port 5558 -browser "browserName=chrome,maxInstances=2,version=68,platform=WINDOWS"
参数解释:
Dwebdriver.chrome.driver=chromedriver.exe ---------指定chromeDriver驱动所在的路径(本地)
-jar selenium-server-standalone-3.141.59.jar-----------运⾏jar包
-role node -------------以node⻆⾊执⾏
-hub "http://192.168.1.222:8888/grid/register" -----------------指定要链接的hub地址,这样node才能和hub通讯连接上
-port 5558-----------node的执⾏端
-browser browserName=chrome,maxInstances=2,version=68,platform=WINDOWS
browserName=chrome运⾏的浏览器名称
maxInstances=2 最多⽀持两个浏览器⽰例
version=68浏览器版本号
platform=WINDOWS平台名称
转换成bat脚本如下:
4、执⾏脚本
node节点配置说明
node节点可以配置单⼀浏览器,如chrome、firefox、IE等等
五、TestNG并发执⾏测试
Selenium Grid能够分布式在不同机器上运⾏不同浏览器,但是我们看到的串⾏的效果(也就是⼀个浏览器执⾏结束 后,再运⾏另外⼀个浏览器)。要达到并发执⾏的效果,Selenium Grid是做不
的,我们需要通过TestNG单元测试 框架所带的并发执⾏机制。并发执⾏能够带来的好处:
减少了执⾏时间:并⾏测试也就意味着多个浏览器可以在同⼀时间被同时执⾏,从⽽减少了整体测试所花费的时间,允许多个线程并⾏同时执⾏⼀个测试脚本/不同的测试脚本
TestNG并发测试配置
解释:
parallel=tests表⽰以test标签对为⼀个线程单位
thread-count=2 线程数量
六、线程安全
在使用多线程执行用例的时候,我们发现有时候会出现错误,是因为共用静态变量时,同时执行会导致一个被占用,此时需要用ThreadLocal机制
1、创建一个静态的变量
2、设计两个方法去存取 或存放驱动
3、在调用驱动的时候,使用getDriver方法
例如: