TestNG并行测试正在进行死锁

时间:2017-09-18 18:11:04

标签: selenium-webdriver maven-2 testng

我已经使用了使用TestNG并行执行的selenium准备了一个框架,我通过代码生成testng.xml文件,其中将parallel关键字设置为“tests”。我的测试运行正常,但是在生成结果之后,构建/ JVM永远不会终止它进入死锁。调试代码后,我发现下面标有**的行导致了死锁问题。

private Runnable getTask() {
    boolean timedOut = false; // Did the last poll() time out?

    for (;;) {
        int c = ctl.get();
        int rs = runStateOf(c);

        // Check if queue empty only if necessary.
        if (rs >= SHUTDOWN && (rs >= STOP || workQueue.isEmpty())) {
            decrementWorkerCount();
            return null;
        }

        int wc = workerCountOf(c);

        // Are workers subject to culling?
        boolean timed = allowCoreThreadTimeOut || wc > corePoolSize;

        if ((wc > maximumPoolSize || (timed && timedOut))
            && (wc > 1 || workQueue.isEmpty())) {
            if (compareAndDecrementWorkerCount(c))
                return null;
            continue;
        }

        try {
            Runnable r = timed ?
   **workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS) :**
                **workQueue.take();**

            if (r != null)
                return r;
            timedOut = true;
        } catch (InterruptedException retry) {
            timedOut = false;
        }
    }
}

请帮助以防万一..

<    Thread [main] (Running)
    Thread [TestNG] (Running)   
    Thread [TestNG] (Running)   
    Daemon Thread [Exec Default Executor] (Running)     
    Daemon Thread [Exec Stream Pumper] (Running)    
    Daemon Thread [Exec Stream Pumper] (Running) >

测试用例脚本

    @Test public void Test_test() {
 try { 
////code/// 
driver.close(); 
} catch (Exception err) { 
System.out.println(err.getMessage()); 
Fail(err.getMessage()); 
}finally{ 
Closereport(); 
driver.quit(); 
} 
}

2 个答案:

答案 0 :(得分:1)

就像我怀疑的那样,线程停滞的问题是由于与ExtentReports的错误集成造成的。你需要解决这个问题。也许您可以参考文档here来获取一些样本。

除此之外,您可能想要修复我在您共享的代码中观察到的这些一般的anamolies。

  1. 从代码中删除静态变量。你有很多静态函数,当你并行运行测试时,这会导致问题。
  2. 您有一个子类RuntimeException,但该类似乎没有任何与例外相关的内容。
  3. 测试类中的WebDriver实例管理应该使用@BeforeClass@AfterClass,以确保在使用后正确清理浏览器。
  4. 请尝试遵循maven文件夹结构约定,以便它的代码可读性更好(因为人们习惯于src/main/java / src/test/java(对于源代码)和src/main/resources的常规文件夹结构/ src/test/resources(资源)

答案 1 :(得分:0)

使用同步更新了代码以消除死锁