如何将 threadLocal 用于 TestNG java.util.concurrent.Ex

问题描述

当我使用 maven 在 jenkins 上运行带有黄瓜 textNg 的测试用例时,有时会出现错误 java.util.concurrent.Ex。我需要使用同步让我的方法正常工作。 我有地图,我必须使用 ThreadLocal,但我不确定如何使用它。你能帮我吗?

private static Map<Integer,WebDriver> webDriverMap = new HashMap<Integer,WebDriver>();
    private static Map<Integer,String> browserMap = new HashMap<Integer,String>();
    private static Map<Integer,String> scenarioNameMap = new HashMap<Integer,String> featureNameMap = new HashMap<Integer,String> tagNameMap = new HashMap<Integer,String>();
    public static Map<String,String> scenarioSteps = new HashMap<String,String>();
    public String getbrowser () {
        
        return browserMap.get((int)Thread.currentThread().getId());
    }
    public static WebDriver getDriver() {

        return (WebDriver) webDriverMap.get((int)Thread.currentThread().getId());
    }

    public static synchronized void startDriver(String browser,String scenarioName) throws Throwable {
        
        webDriverMap.put((int)Thread.currentThread().getId(),initializeDriver(browser,scenarioName));
    }
    
    public static synchronized void setScenarioName(String scenarioName) throws Throwable {
        
        scenarioNameMap.put((int)Thread.currentThread().getId(),scenarioName);
    }
    
    public static synchronized String getScenarioName() throws Throwable {
        
        return scenarioNameMap.get((int)Thread.currentThread().getId());
    }
    
    public static synchronized void setFeatureName(String featureName) throws Throwable {
        
        featureNameMap.put((int)Thread.currentThread().getId(),featureName);
    }
    
    public static synchronized String getFeatureName() throws Throwable {
        
        return featureNameMap.get((int)Thread.currentThread().getId());
    }
    
    public static synchronized void setTagName(String tagName) throws Throwable {
        
        tagNameMap.put((int)Thread.currentThread().getId(),tagName);
    }
    
    public static synchronized String getTagName() throws Throwable {
        
        return tagNameMap.get((int)Thread.currentThread().getId());
    }
    
    public static synchronized void setScenarioSteps(String scenario,String steps) throws Throwable {

        scenarioSteps.put(scenario,steps);
    }
    
    public static synchronized String getScenarioSteps(String scenario) throws Throwable {
        
        return scenarioSteps.get(scenario);
    }
    
    public static synchronized void removeFinishedMap() {
        
        webDriverMap.remove((int)Thread.currentThread().getId());
        scenarioNameMap.remove((int)Thread.currentThread().getId());
        browserMap.remove((int)Thread.currentThread().getId());
        featureNameMap.remove((int)Thread.currentThread().getId());
        tagNameMap.remove((int)Thread.currentThread().getId());
    }
    
public static void stopDriver() {
         getDriver().quit();
         webDriverMap.remove((int)Thread.currentThread().getId());
    }

Thread.currentThread().getId() 我想我必须改变这个。

public String getbrowser () {
public static WebDriver getDriver() {
public static void stopDriver() {

我为此方法添加了同步,但它不起作用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)