在 jenkins 上测试失败但在本地运行
Posted
技术标签:
【中文标题】在 jenkins 上测试失败但在本地运行【英文标题】:Test broken on jenkins but running locally 【发布时间】:2015-03-26 00:00:37 【问题描述】:我们遇到了这样一个奇怪的错误。我们的测试在本地机器(windows)上运行,但不在jenkins(linux)上运行。
我们得到一个
Caused by: java.lang.RuntimeException: There was an error in the forked process
java.lang.NoClassDefFoundError:
我正在寻找解决方案并在 bugzilla 上获得此信息 或archive。
有人知道这个问题以及如何解决它吗?
谢谢
更新
maven-surefire-plugin 也在父 pom.xml 中定义,用于与 cobertura 一起使用。测试运行两次,但第二次测试失败,如上所述。
我正在定义 2 个使用 surefire 插件的配置文件和该部分中的一个 surefire 插件定义。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>$maven-surefire-plugin.version</version>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
<exclude>**/*SoapUiTest.java</exclude>
</excludes>
<excludes>
<!--exclude>**/*.java</exclude -->
</excludes>
<additionalClasspathElements>
<additionalClasspathElement>$basedir/src/main/java</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>soapUi</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>$maven-surefire-plugin.version</version>
<configuration>
<excludes>
<exclude>**/*EntityTest.java</exclude>
</excludes>
<includes>
<include>**/*SoapUiTest.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>integration</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>$maven-surefire-plugin.version</version>
<configuration>
<excludes>
<exclude>**/*EntityTest.java</exclude>
</excludes>
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
我做错了什么?
【问题讨论】:
尝试在 linux 命令行中使用mvn -e test
执行测试,看看会发生什么。
【参考方案1】:
我记得有类似的问题。它可能与 ulimit - 允许打开的文件数有关。 ClassLoader 需要打开文件进行加载。由于类未加载/可用 NoClassDefFoundError 在方法调用时抛出。 检查可以打开多少个文件:
ulimit -a
增加打开文件的数量:
ulimit -n NEW_NUMBER
要永久更改它,请按照this link 的说明进行操作
按照以下步骤操作:
vi /etc/security/limits.conf 并添加到下面提到的
软文件 65535 硬文件 65535
【讨论】:
您好,感谢您的提示,但这并不能解决问题。发生的事情是 cobertura 和 surefire 正在运行这两个测试。运行默认测试执行时,surefire 没有找到类。为什么它不这样做是我想知道和修复的。【参考方案2】:这是 cobertura 本身的问题 (-Dcobertura.test=true)。激活它解决了问题。
【讨论】:
以上是关于在 jenkins 上测试失败但在本地运行的主要内容,如果未能解决你的问题,请参考以下文章
Swift 测试在本地通过,但在 Travis-CI 上构建失败
grunt karma 覆盖在 jenkins 上失败,但在 windows/unix 上有效