java - 如何控制 ParallelSuite 线程数?

标签 java testing junit concurrency

我有以下代码:

@RunWith(ParallelSuite.class)
@Suite.SuiteClasses({Test1.class,
        Test2.class,
        Test3.class,
        Test4.class,
        Test5.class,
        Test6.class,
        Test7.class})
public class ParallelRunner {
}

我运行它并发现只有 3 个测试并行运行。这些测试足够长 - 15 秒以上

是操作系统调度程序问题还是 junit 线程池限制?

如何配置线程池限制?

最佳答案

ParallelComputer 中,您可以找到以下方法:

private static Runner parallelize(Runner runner) {
        if (runner instanceof ParentRunner) {
            ((ParentRunner)runner).setScheduler(new RunnerScheduler() {
                private final ExecutorService fService = Executors.newCachedThreadPool();

                public void schedule(Runnable childStatement) {
                    this.fService.submit(childStatement);
                }

                public void finished() {
                    try {
                        this.fService.shutdown();
                        this.fService.awaitTermination(9223372036854775807L, TimeUnit.NANOSECONDS);
                    } catch (InterruptedException var2) {
                        var2.printStackTrace(System.err);
                    }

                }
            });
        }

        return runner;
    }

我们需要替换它:

private final ExecutorService fService = Executors.newCachedThreadPool();

我只是复制粘贴的 ParallelComputer 类代码并将这一行替换为:

private final ExecutorService fService = Executors.newFixedThreadPool(MAX_THREAD_COUNT);

关于java - 如何控制 ParallelSuite 线程数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49005611/

相关文章:

java - 使用 Junit 对边缘情况进行单元测试

java - 下一页的前向变量

java - org.openqa.selenium.SessionNotCreatedException:无法创建新的远程 session 。在模拟器中初始化android驱动程序时

java - 如何向 Java 线程传递参数?

ruby - let() 值在 before( :all) is used?

testing - 使用 `import` 语句而不是 `require` 调用单个摩卡测试

java - 如何使用 Junit 测试向 Leanft 添加重试逻辑?

java - 将 JVM/JRE 设置为自动使用 Windows 代理

testing - 使用 Theories JUnit4 运行的测试类中可以放置多少测试方法

java - 递归循环 Selenium Webdriver