Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium Geb、Spock、Gradle和maxParallelForks_Selenium_Gradle_Automated Tests_Spock_Geb - Fatal编程技术网

Selenium Geb、Spock、Gradle和maxParallelForks

Selenium Geb、Spock、Gradle和maxParallelForks,selenium,gradle,automated-tests,spock,geb,Selenium,Gradle,Automated Tests,Spock,Geb,我在理解Geb/Spock测试中存在的问题时遇到了一些困难。我们正在使用gradle,并尝试并行运行我们的测试。据我所知,gradle中的maxParallelForks属性将在单独的JVM中运行测试类 我遇到的问题是,当我有6个测试类,并将maxParallelForks设置为4时,当测试开始时,我将得到4个并行运行的测试类。令人惊叹的!但最后2节课才是问题所在。假设在前4节课中,2节课在1分钟内完成,2节课在5分钟内完成。我看到的不是前2节课结束后再开始下2节课,而是等到最后2节长时间运行的

我在理解Geb/Spock测试中存在的问题时遇到了一些困难。我们正在使用gradle,并尝试并行运行我们的测试。据我所知,gradle中的maxParallelForks属性将在单独的JVM中运行测试类

我遇到的问题是,当我有6个测试类,并将maxParallelForks设置为4时,当测试开始时,我将得到4个并行运行的测试类。令人惊叹的!但最后2节课才是问题所在。假设在前4节课中,2节课在1分钟内完成,2节课在5分钟内完成。我看到的不是前2节课结束后再开始下2节课,而是等到最后2节长时间运行的课结束后再开始其他课程。这远远不够理想

我是不是误会了什么,或者我在什么地方丢失了一处房产?这就是我的身材。格雷德尔:

tasks.withType(Test) {
   systemProperties System.properties
   maxParallelForks = 4
   forkEvery = 1 
}

类被分配给fork,以便提前执行,而不是在轮询的基础上执行。因此,前两个fork将预先分配两个类,而另外两个类则各分配一个,不管每个类完成所需的时间。在最坏的情况下,运行时间最长的两个类将被分配给一个fork。这就是它的工作原理——将类划分为多个组,然后将单独的测试JVM(fork)与要为每个JVM执行的类列表一起旋转


另一方面-您不想执行
forkEvery=1
-这将在每个测试类降低测试执行速度后重新启动测试JVM,但没有任何好处。

使用JUNIT套件,您可以决定特定fork需要选择哪一组类

import org.junit.runner.RunWith
import org.junit.runners.Suite

@RunWith(Suite.class)
@Suite.SuiteClasses([
    TimeTaking.class, // Class that takes a lot of time
    NotSoMuchTimeTaking.class, //Class that is quick
// Add more test classes which need to be executed in same fork.  
])

public class FirstTestSuite { // keep this empty
}
类似地,创建第二个TestSuite{ }等等

除上述步骤外,在build.gradle中包括*TestSuite.class

tasks.withType(Test) {
systemProperties System.properties
maxParallelForks = 4
forkEvery = 1  
include '**/*TestSuite*.class'
}     

通过这种方式,您将能够控制您的执行,并决定哪些测试类需要以什么顺序执行。

是否有一种方法可以构造或命名我的类,以了解类分配给fork的顺序?在我的例子中,两个运行时间最长的测试每次都是最后一个测试,因此,如果每次运行都指定相同的测试,那么if。另外,我是否会将forkeevery保留为默认值(0)?