如何跳过执行期间挂起/卡住的测试Selenium - Maven - Jenkins

时间:2017-06-01 11:21:36

标签: java maven selenium jenkins maven-surefire-plugin

我想请求您就我的问题提供帮助。我有包含50个测试脚本的回归套件(.xml)。我们可以使用Maven在Jenkins中执行回归套件,但它突然挂起/卡住了。例如:

测试用例1-15已完成,但在测试用例16中,构建/执行突然停留/挂起某一步骤。我尝试在Eclipse中执行测试用例16,以了解哪些步骤/代码存在问题,但它工作正常。

我想询问是否存在maven-surefire功能,当它检测到测试脚本卡住/挂起一定时间(例如5分钟)时,它将失败该测试脚本然后继续下一个。

请在下面看我的pom.xml

 <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <target>1.8</target>
                <source>1.8</source>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <inherited>true</inherited>
            <configuration>
                <testFailureIgnore>false</testFailureIgnore>
                <suiteXmlFiles>
                    <suiteXmlFile>${xmlPath}</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>
    </plugins>
  </build>

2 个答案:

答案 0 :(得分:1)

您可以在测试本身的测试注释中添加超时:

@Test(timeout=600000)  //Fails if the method takes longer than 10 minutes

这是毫秒,所以你只需要确定测试应该花费的最长时间,然后calculate it from there

编辑:如果您只想设置一次而不必为每个单独的测试添加超时,那么您可以在基类中设置规则:

import org.junit.Rule;
import org.junit.rules.TestWatcher;

...

@Rule
public TestWatcher watcher = new TestWatcher() {
    @Override
    public Statement apply(Statement base, Description description) {           
        if (description.getMethodName().toLowerCase().contains("thisTestTakesLonger")) {
            return new FailOnTimeout(base, 600000); //10 minutes = 600000
        } else {
            return new FailOnTimeout(base, 300000); //5 minutes = 300000
        }  
    }
};

else是全局超时,如果你有一个单独的测试需要更长时间(如果每个测试的长度大致相同,你可能只想要其他位)

答案 1 :(得分:0)

您可以通过在pom.xml

中将此属性设置为true来让maven忽略测试失败
<testFailureIgnore>true</testFailureIgnore>