博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决TestNG多线程并发时,线程不安全问题
阅读量:4635 次
发布时间:2019-06-09

本文共 2046 字,大约阅读时间需要 6 分钟。

本文部分内容来自http://www.cnblogs.com/sdet/p/3677939.html  ,感谢原作者。

TestNG的强大功能之一就是支持多线程并发测试,但前提是需要我们的程序是线程安全的,否则实际测试过程中就会出错。例如当我们初始化两个driver时,如果不保证线程安全,则两个driver在运行时会相互干扰甚至死掉。

未进行线程安全优化之前的代码(用Selenium 3,firefox浏览器驱动需要特殊设置):

public static WebDriver driver;/*设置静态driver,可随时调用*/    public static void getDriver(String browser){        if(browser.equals("firefox")){            System.setProperty("webdriver.firefox.marionette","C:\\Program Files (x86)\\Mozilla Firefox\\geckodriver.exe");//selenium3中火狐浏览器需要设置geckodriver            driver = new FirefoxDriver();        }else if(browser.equals("chrome")){            System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");            driver=new ChromeDriver();        }    }

此时通过getDriver()方法可直接调用对应driver,如果两个测试用例分别都创建相同浏览器driver,同时在TestNG的.xml文件中配置多线程并发执行,此时两浏览器执行的操作虽然分别在不同线程中,但因为引用的是同一个driver,因此会出现两浏览器相互跳跃操作的情况,即本该在浏览器1中的操作跳跃到浏览器2中执行,从而报错,解决办法是使用ThreadLocal来保证线程安全,具体代码如下:

/*使用ThreadLocal来保证程序的线程安全,以免TestNG在进行多线程并发测试时发生线程安全问题*/    public static ThreadLocal
ThreadDriver=new ThreadLocal
(); public static String browserType; public static WebDriver getDriver(){ WebDriver driver=ThreadDriver.get(); if(driver==null){
//如果当前线程没有绑定driver,则根据.xml配置文件创建driver并使用ThreadDriver.set()方法绑定到线程中。 if(browserType.equals("firefox")){ System.setProperty("webdriver.firefox.marionette","C:\\Program Files (x86)\\Mozilla Firefox\\geckodriver.exe"); driver=new FirefoxDriver(); ThreadDriver.set(driver); }else if(browserType.equals("chrome")){ System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe"); driver=new ChromeDriver(); ThreadDriver.set(driver); } } return driver;}public static void setupDriver(String browser){
//设置driver类型 browserType=browser; }

 

转载于:https://www.cnblogs.com/qianjin100/p/6424617.html

你可能感兴趣的文章
Sublime Text 自动换行
查看>>
poj2420A Star not a Tree?(模拟退火)
查看>>
Charles抓取https请求
查看>>
LAMP环境搭建
查看>>
C语言的变量的内存分配
查看>>
clientcontainerThrift Types
查看>>
链接全局变量再说BSS段的清理
查看>>
hdu 1728 逃离迷宫
查看>>
HTML5与CSS3权威指南之CSS3学习记录
查看>>
docker安装部署
查看>>
AVL树、splay树(伸展树)和红黑树比较
查看>>
多媒体音量条显示异常跳动
查看>>
运算符及题目(2017.1.8)
查看>>
React接入Sentry.js
查看>>
ssh自动分发密匙脚本样板
查看>>
转 小辉_Ray CORS(跨域资源共享)
查看>>
Linux安装postgresql
查看>>
MyBatis启动:MapperStatement创建
查看>>
Tomcat 调优及 JVM 参数优化
查看>>
【kindeditor】KindEditor获取多个textarea文本框的值并判断非空
查看>>