解决TestNG多线程并发时,线程不安全问题

本文部分内容来自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<WebDriver> ThreadDriver=new ThreadLocal<WebDriver>();
    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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值