问题
我有一堆jUnit测试(许多具有自定义运行器,例如PowerMockRunner或JUnitParamsRunner)都在一些根包测试
下(它们在测试
的不同深度的不同子包中)。
我想收集包<code>tests<code>下的所有测试,并在不同的JVM中并行运行每个测试类。理想情况下,并行化是可配置的,但默认的number_of_cores也完全可以。请注意,我不想在自己的JVM中运行每个方法,而是要在每个类中运行。
背景< br >在我的许多测试中,我通过批注< code > @ run with(powermockrunner . class)和< code > @ PowerMockRunnerDelegate(junitparamsrunner . class)将PowerMock与JUnitParams结合使用。我有大约9000个单元测试,它们在“正常”的时间内完成,但是我有一个8核CPU,使用默认的一次一个测试的运行程序,系统的利用率严重不足。由于我经常运行测试,额外的时间越来越多,我真的想并行运行测试类。
注意,不幸的是,在很多测试中,我需要模拟静态方法,这也是我使用PowerMock的部分原因。
我所尝试的<;br>;必须模拟静态方法,这样就不可能使用<;code>;com.googlecode.junittoolbox。ParallelSuite(这是我最初的解决方案),因为它在同一个JVM中运行所有东西,静态模拟会被交错和混乱。至少从我所犯的错误来看是这样的。
我根本不了解JUnit堆栈,但是在四处寻找之后,似乎另一种选择可能是尝试编写和注入我自己的RunnerBuilder
- 但我不确定我是否可以从RunnerBuilder
中生成另一个JVM进程,不太可能。我认为正确的解决方案是某种作为一项分级任务的线束。
我还刚刚发现了一些Android Studio(Intellij)测试选项,但唯一可用的fork选项是method
,这不是我想要的。我目前正在探索这个解决方案,所以也许我会弄清楚,但我想我会并行询问社区,因为我还没有太多锁。
更新:终于能够让Android Studio(Intellij)使用选项Test Kind:All in目录
(由于某种原因,包选项没有进行递归搜索)和选择分叉模式Class
来收集我的所有测试。但是,这仍然按顺序运行找到的每个测试类,并且没有我看到的关于并行化的选项。这非常接近我想要的,但并不完全...:(
也许这在问题发布时是不可能的,但现在你可以在android studio中轻松做到。
我正在使用gradle构建工具:<code>com.android.tools.build:gradle:2.2.3‘
我在根<代码>构建中添加了以下内容。gradle文件。
allprojects {
// ...
tasks.withType(Test) {
maxParallelForks = Runtime.runtime.availableProcessors()
}
}
现在,我的测试有多个<code>Gradle测试执行器</code>运行器。运行机器的核心越多,执行器越多!
感谢分享你的原答案!
我没有使用Intellij(Android Studio)内置的JUnit运行配置,而是注意到Android Studio有一堆预构建的gradle任务,其中一些涉及到测试。然而,那些表现出相同的顺序执行问题。然后,我找到了使用gradle运行并行测试任务,并将以下语句添加到我的根< code>build.gradle文件中:
subprojects {
tasks.withType(Test) {
maxParallelForks = Runtime.runtime.availableProcessors()
}
}
这工作得很好,我的CPU现在与100%挂钩(对于大部分运行,因为未完成的测试类的数量变得
这个解决方案的缺点是它没有与Android Studio(Intellij)漂亮的junit runner UI集成。因此,当gradle任务正在进行时,我无法真正看到测试完成的速度等。在任务执行结束时,它只会显示总运行时间和指向HTML生成报告的链接。这是一个小问题,我完全可以接受,但如果我能想出如何改进解决方案以使用JUnitRunner UI,那就太好了。
为了减少测试的运行时间,我希望并行运行测试。我有几个不能并行运行的类。 假设我有两种类型的类:-并行类-包含类1,类2-不并行类-包含类3,类4我想并行运行类1和类2到类3和类4(但lass3不会并行运行到类4) 我试图这样做: 我并行运行这两个测试,但只有第一个测试具有类的并行性。 如果我可以选择添加parallel=“classes”进行测试,我尝试在TestNG文档中搜索。我看不到,但它正在
Cucumber测试没有并行运行(Cucumber jvm并行插件)? 如果我使用runner类执行测试,一次将执行一个功能文件,但是当将以下插件添加到POM文件时,似乎没有功能文件执行? 即使我指向了正确的功能文件文件夹? 我的POM文件:
问题内容: 我有大量的测试,大约需要半小时才能运行,并且希望能够并行进行测试。 有没有办法用IntelliJ IDEA 9做到这一点? 问题答案: IDEA仅从版本10开始才了解并行JUnit测试。 有一个跟踪器问题,您可以投票并等待进度:http: //youtrack.jetbrains.net/issue/IDEA-47103 我们计划将其添加到IDEA 10中,但是优先级将取决于票数。
我试图用TestNG并行运行一个示例测试项目。但它是在一个线程中顺序执行的。我漏掉什么了吗? 谢了。
我正在将并行执行引入我的testNG套件中。当我将“parallel”设置为“tests”时,两个浏览器打开,两个测试的第一个类同时开始--这是我所期望的。当我将其设置为“classes”时,我希望第一个测试中的两个类同时开始,但是只有一个浏览器打开,第一个类中的第一个方法执行,然后用第二个类中的第一个方法打开一个新的浏览器,依此类推。谁能告诉我我做错了什么? 下面是我的xml文件:
我有一套用网格运行的Selenium WebDriver测试。当我运行这个testng.xml文件时: 在我看来,在suite标记中指定parallel=“classes”与TestNG文档是一致的,但不能在单独的类中实现@test方法的异步执行。 为什么。xml文件的这种配置不起作用?我需要做什么不同的工作来使它发挥作用?