WebDriver多线程并发
要想多线程并发的运行WebDriver,必须同时满足2个条件,首先你的测试程序是多线程,其次需要用到Selenium Server。下载位置如下图:

下载下来后是一个jar包,需要在命令行中运行。里面有2个东西:hub和node。可以这么理解:hub是运行在一个服务器上的线程池,负责收集测试case提交的请求,将请求分配给匹配的node;而node就是工作线程,具体干活的。node可以有多个,运行在不同的系统上。hub和node也可以不在一个机器上。
多线程并发运行WebDriver的步骤:1.运行hub 2.运行node 3.运行test case 。下面说下具体实现方法。
1.运行hub。在命令行中输入:java -jar selenium-server-standalone-2.37.0.jar -role hub -maxSession 40 -port 4444
参数中必须指明-role hub 才是运行hub。默认端口是4444,如果端口被占用就需要指定其他。-maxSession是最大处理的会话请求,我这里设置为40。如果不指定的话,默认是1(即单线程模式了)。
2.运行node。(先说下运行一个node情况)在命令行中输入(下面的命令是一行敲完):
java -Dwebdriver.ie.driver=D:\IEDriverServer.exe -jar selenium-server-standalone-2.37.0.jar -role node -hub http://127.0.0.1:4444/grid/register -maxSession 20 -browser "browserName=internet explorer,version=9,platform=WINDOWS,maxInstances=20" -port 5555
由于node是可以运行在不通系统上的,所以指定驱动位置-Dwebdriver.ie.driver=D:\IEDriverServer.exe。参数中必须指明-role node才是运行node。参数-hub 后面是第一步中hub的IP和端口:http://hub的IP:端口/grid/register 。node默认的maxSession的值就是5(最多并发5个浏览器),即启动一个node会默认有5个firefox、1个chrome、1个IE的实例。如果用IE浏览器的话,就算你的测试case是多线程,最终也会是一个一个的执行。但是如果在后面的-browser的参数中指明maxInstances=5,那么就会同时运行5个浏览器。-browser参数是指明node可以用的浏览器信息。注意,如果node的maxSession和maxInstances设置的有问题,那么hub的命令窗口中会给出警告。通过这里能够知道你的node是否设置成功。运行node后,窗口中也会显示该node的信息。-port是端口号,默认端口是5555,如果端口被占用就需要指定其他。如果你启动第二个node的话,端口就必须指定了,不能是5555。
我设置的node是只运行IE,并且并发数是20,最多有20个IE浏览器在运行。node中的maxSession的值不能超过hub中的。如果想多线程并发要在hub和node的参数中同时指明maxSession值。node中如果用IE浏览器,指明maxSession后还需要指明同样大小的maxInstances值。我的例子最终会同时运行20个IE浏览器。maxSession是说node可以有几个浏览器同时运行,而maxInstances是说某个浏览器可以有几个同时运行。由于我的电脑运行20个IE已经有些卡了,那么可以再另外一个电脑上再运行一个20Session大小的node。个人测试结果:运行一个20Session大小的node和运行2个10Session大小的node没什么差别。运行多个node主要还是为了能够分布式的测试,不至于一个电脑打开太多浏览器。
3.运行test case。首先将上面代码中的44和47行注释掉,将48行注释打开。我们需要用远程的方式将请求提交给hub(后面的/wd/hub是固定的)。
WebDriver driver = new RemoteWebDriver(new URL("http://hub的IP:端口/wd/hub"),capability);
由于是远程的方式,所以44行的设置就没什么用了。下面你可以运行你的程序了,你会发现同时启动20个线程,就会有20个IE浏览器同时在运行。
WebDriver多线程并发的更多相关文章
- Selenium 2 & WebDriver &多线程 并发
我用的是Selenium2,至于它的背景和历史就不赘述了.Selenium2也叫WebDriver.下面讲个例子,用WebDriver+java来写个自动化测试的程序.(如果能用firefox去测试的 ...
- Selenium & Webdriver 远程测试和多线程并发测试
Selenium & Webdriver 远程测试和多线程并发测试 Selenium Webdriver自动化测试,初学者可以使用selenium ide录制脚本,然后生成java程序导入ec ...
- 多线程并发同一个表问题(li)
现有数据库开发过程中对事务的控制.事务锁.行锁.表锁的发现缺乏必要的方法和手段,通过以下手段可以丰富我们处理开发过程中处理锁问题的方法.For Update和For Update of使用户能够锁定指 ...
- Java面试题整理一(侧重多线程并发)
1..是否可以在static环境中访问非static变量? 答:static变量在Java中是属于类的,它在所有的实例中的值是一样的.当类被Java虚拟机载入的时候,会对static变量进行初始化.如 ...
- Java多线程-并发容器
Java多线程-并发容器 在Java1.5之后,通过几个并发容器类来改进同步容器类,同步容器类是通过将容器的状态串行访问,从而实现它们的线程安全的,这样做会消弱了并发性,当多个线程并发的竞争容器锁的时 ...
- HashMap多线程并发问题分析
转载: HashMap多线程并发问题分析 并发问题的症状 多线程put后可能导致get死循环 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题. ...
- 用读写锁三句代码解决多线程并发写入文件 z
C#使用读写锁三句代码简单解决多线程并发写入文件时提示“文件正在由另一进程使用,因此该进程无法访问此文件”的问题 在开发程序的过程中,难免少不了写入错误日志这个关键功能.实现这个功能,可以选择使用第三 ...
- 由获取微信access_token引出的Java多线程并发问题
背景: access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留512个字符空间.acces ...
- ThreadLocal 多线程并发,数据隔离
ThreadLocal: 创建一个线程本地变量. 本质:在ThreadLocal类中有一个Map,用于存储每一个线程的变量的副本. 优点:既实现多线程并发,游兼顾数据的安全性. 区别:Synchro ...
随机推荐
- ASP.NET MVC3 模板页的使用
占位符的使用: 下面是一个模板页 _Layout.cshtml <!DOCTYPE html> <html> <head> @RenderSection(" ...
- 练习3:修改withdraw 方法 练习目标-使用有返回值的方法:在本练习里,将修改withdraw方法以返回一个布尔值来指示交易是否成功。
boolean withdraw(double get){ if(get<=balance) { System.out.println("取钱"+get+"元,当余 ...
- BrowserSync前端调试工具使用
上次介绍了一款DebugGap移动端调试工具DebugGap推荐.但是这几天使用了之后感觉还是有些不足,尤其是里面的调试工具虽然和Chrome里面的调试长的很像,但是多少有些不同,使用起来还是不太方便 ...
- Unity 产生各不相同的随机数
1. 网上很多方法都说用时间种子来解决,但是在极短的时间内,这种方法没效 Random r = new Random(DateTime.Now.Millisecond); Random Counter ...
- WPF自定义控件与样式(6)-ScrollViewer与ListBox自定义样式
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: Scr ...
- 有关try..catch..finally处理异常的总结
//看一下下面的程序,你能正确的写出不同的testEx2()方法时,程序的最终打印出来的数据吗....先不要看下面的答案 public class ExceptionTest { public Exc ...
- Request 接收参数乱码原理解析三:实例分析
通过前面两篇<Request 接收参数乱码原理解析一:服务器端解码原理>和<Request 接收参数乱码原理解析二:浏览器端编码原理>,了解了服务器和浏览器编码解码的原理,接下 ...
- PHP的学习--PHP的引用
引用是什么 在 PHP 中引用意味着用不同的名字访问同一个变量内容.这并不像 C 的指针,替代的是,引用是符号表别名.注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字.最 ...
- selenium处理select标签的下拉框
有时候我们会碰到<select></select>标签的下拉框.直接点击下拉框中的选项不一定可行.Selenium专门提供了Select类来处理下拉框. <select ...
- .Net常见错误
常见错误 #1: 把引用当做值来用,或者反过来 C++ 和其他很多语言的程序员,习惯了给变量赋值的时候,要么赋单纯的值,要么是现有对象的引用.然而,在C# 中,是值还是引用,是由写这个对象的程序员决定 ...