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

 

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;
    }

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

 

posted @ 2017-02-21 16:08  钱_进  阅读(3450)  评论(0编辑  收藏  举报