2012-11-14 140 views
1

我正在使用使用黄瓜的BDD方法,这非常棒!运行黄瓜测试失败,出现OutOfMemoryError:Java堆空间异常

的问题是,我的测试套件越来越大,现在我得到下面的异常从而未能从错误的原因,我的测试...

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

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

我我的功能文件分割到不同的目录(控制器1,控制器2 ...)和亚军(RunCukes1Test,RunCukes2Test ...),但是这并没有帮助。

当我运行每个测试本身时一切正常,但是当我使用mave生命周期测试运行它时,它会失败。有没有人知道在Java黄瓜的任何最佳做法,以避免这样的问题。

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 
+0

那么发生了什么与其他类似的问题:http://stackoverflow.com/questions/13381977/jenkins-build-fails-after-running-cucumber-tests-on-java-heap-space-exception? – maba

+0

我认为有两个不同的问题。一个是在黄瓜期间(在开发环境中),另一个是在黄瓜后期(在建立环境中)。 – LiorK

+0

但您是否在其他问题上得到了帮助?这个问题解决了吗? – maba

回答

0

我得到的回答到另一个Java堆空间例外,我有,黄瓜测试运行后。 你可以在这里看到它 - related problem

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

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

所以解决的办法是找到它们之间的平衡和实际可用的内存。