使用OutOfMemoryError运行Cucumber测试失败:Java堆空间异常

时间:2012-11-14 16:01:01

标签: java maven cucumber bdd

我正在使用Cucumber应用BDD方法,这是伟大的!

问题是我的测试套件变得越来越大,现在我得到以下异常,但是我的测试由于错误的原因而失败...

我正在使用所有排序或黄瓜功能,例如:背景,场景大纲和简单场景。 我像这样运行测试:

@RunWith(Cucumber.class)
@Cucumber.Options(features={"...../controller1"})
public class RunCukes1Test {
}

我将我的功能文件拆分到不同的目录(controller1,controller2 ......)和跑步者(RunCukes1Test,RunCukes2Test ......),但这没有帮助。

当我运行每个测试本身时一切正常,但当我使用mave生命周期测试运行它时,它失败了。有没有人知道Java Cucumber中的任何最佳实践以避免此类问题。

    Tests run: 5896, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 33.082 sec
Running com.kenshoo.urlbuilder.appservice.controller.RunCukes4Test

Tests run: 11838, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 80.833 sec
Exception in thread "Thread-73" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2882)
    at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515)
    at java.lang.StringBuffer.append(StringBuffer.java:306)
    at java.io.BufferedReader.readLine(BufferedReader.java:345)
    at java.io.BufferedReader.readLine(BufferedReader.java:362)
    at org.codehaus.plexus.util.cli.StreamPumper.run(StreamPumper.java:129)
Exception in thread "ThreadedStreamConsumer" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOfRange(Arrays.java:3209)
    at java.lang.String.<init>(String.java:215)
    at java.lang.StringBuffer.toString(StringBuffer.java:585)
    at org.apache.maven.surefire.report.PrettyPrintXMLWriter.escapeXml(PrettyPrintXMLWriter.java:167)
    at org.apache.maven.surefire.report.PrettyPrintXMLWriter.addAttribute(PrettyPrintXMLWriter.java:178)
    at org.apache.maven.surefire.shade.org.codehaus.plexus.util.xml.Xpp3DomWriter.write(Xpp3DomWriter.java:50)
    at org.apache.maven.surefire.shade.org.codehaus.plexus.util.xml.Xpp3DomWriter.write(Xpp3DomWriter.java:55)
    at org.apache.maven.surefire.shade.org.codehaus.plexus.util.xml.Xpp3DomWriter.write(Xpp3DomWriter.java:39)
    at org.apache.maven.surefire.report.XMLReporter.testSetCompleted(XMLReporter.java:128)
    at org.apache.maven.surefire.report.MulticastingReporter.testSetCompleted(MulticastingReporter.java:51)
    at org.apache.maven.surefire.report.TestSetRunListener.testSetCompleted(TestSetRunListener.java:115)
    at org.apache.maven.plugin.surefire.booterclient.output.ForkClient.consumeLine(ForkClient.java:97)
    at org.apache.maven.plugin.surefire.booterclient.output.ThreadedStreamConsumer$Pumper.run(ThreadedStreamConsumer.java:67)
    at java.lang.Thread.run(Thread.java:662)

Results :

Tests run: 11790, Failures: 0, Errors: 0, Skipped: 0

1 个答案:

答案 0 :(得分:0)

在黄瓜测试运行后,我得到了另一个java-heap-space异常的答案。 你可以在这里看到它 - related problem

我的理论是-XX:MaxPermSize是黄瓜运行期间的一个因素,因为Cucumber会生成测试代码,而PermSize与所描述的代码量有关what is permsize in java

在解析测试结果时,-Xmx后黄瓜运行的一个因素。

因此,解决方案是在它们和实际可用内存之间找到平衡。