检测 jenkins 上的测试失败
Detect test failures on jenkins
我从 5 天开始就在 Jenkins 周围玩耍,但我遇到了问题。我有一个 Java 代码已经用 JUnit 进行了单元测试,我正在使用 Gradle Build 来构建代码。我故意尝试使三个测试中的一个测试失败,并且 gradle build 报告失败!这是意料之中的。然而,我将我的代码推送到 github SampleTestProject 上,一分钟后(根据配置)在 Jenkins 上触发了构建。然而,即使在本地机器上构建时测试失败,jenkins 也会将构建标记为成功!!
我要 post 的代码真的很糟糕,但是可以 hands-on 在 jenkins 上体验一下
主要class
package com.bitwise.test;
/**
* Created by AniruddhaS on 2/11/2016.
*/
public class Hello {
public String sayHello() {
return "Hello";
}
public int addArgs(int i, int i1) {
return (i+i1);
}
public String sayBye() {
return "Bye";
}
public int mulArgs(int i, int i1) {
return (i*i1);
}
}
测试class
package com.bitwise.test;
import junit.framework.Assert;
import org.junit.Test;
import org.junit.experimental.theories.suppliers.TestedOn;
/**
* Created by AniruddhaS on 2/11/2016.
*/
public class HelloTest {
@Test
public void itShouldReturnHelloOnCallingHelloMethod(){
//given
Hello vector=new Hello();
//when
Assert.assertSame("Hello",vector.sayHello());
//then
}
@Test
public void itShouldReturnAValueAfterAdditionOfTheArgumentValues(){
//given
Hello adder=new Hello();
//when
Assert.assertEquals(3,adder.addArgs(2,1));
//then
}
@Test
public void itShouldPrintByeWhenRelevantFunctionIsCalled(){
//given
Hello bye=new Hello();
//when
Assert.assertSame("Bye",bye.sayBye());
//then
}
@Test
public void itShouldMultiply(){
//given
Hello bye=new Hello();
//when
Assert.assertEquals(6,bye.mulArgs(5,3));/*here mulArgs emits 15 but
test fails since expected value is 6*/
//then
}
}
build.gradle
group 'hello'
version '1.0'
apply plugin: 'java'
sourceCompatibility = 1.5
repositories {
mavenCentral()
}
task test1<<
{
println("hello, test running")
}
test{
testLogging{
events 'started','passed'
events 'started','failed'
}
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}
请指教如何解决以上问题!
提前致谢:)
好吧,我无法理解您的代码,但您可以在 jenkins 中添加 post-build 操作,这会影响作业的状态。
例如:Text finder plugin:
在您指定的日志文件中搜索关键字并使用它来将 "successful" 构建降级为失败。
Log Parser Plugin : 显示错误和警告摘要
您 运行 如何设置 Gradle 脚本?
无论您是使用 "Execute shell" 步骤来执行 ./gradlew test
之类的操作,还是使用 Gradle plugin 来执行 test
任务,Jenkins 将标记构建为失败如果Gradle脚本失败,例如由于测试断言失败。
但是您想要的是将 Jenkins 构建标记为 unstable 而不是 failed.
为此,您需要更新 Gradle 脚本,以便在 build.gradle
:
的 test
块中不将测试失败视为致命错误
test {
ignoreFailures = true
}
然后您可以 运行 您的 Gradle Jenkins 脚本并让它 analyse JUnit 结果,这会将构建状态设置为 成功 或 不稳定 ,取决于测试是通过还是失败。
Gradle java
插件将 JUnit XML 格式的测试结果写入 build/test-results/TEST-HelloTest.xml
(在您的示例中)。
要分析结果,请转到作业配置中的 "Post-build actions",然后添加 "Publish JUnit test result report",然后在 "Test report XMLs" 字段中输入 **/TEST-*.xml
。
我从 5 天开始就在 Jenkins 周围玩耍,但我遇到了问题。我有一个 Java 代码已经用 JUnit 进行了单元测试,我正在使用 Gradle Build 来构建代码。我故意尝试使三个测试中的一个测试失败,并且 gradle build 报告失败!这是意料之中的。然而,我将我的代码推送到 github SampleTestProject 上,一分钟后(根据配置)在 Jenkins 上触发了构建。然而,即使在本地机器上构建时测试失败,jenkins 也会将构建标记为成功!!
我要 post 的代码真的很糟糕,但是可以 hands-on 在 jenkins 上体验一下
主要class
package com.bitwise.test;
/**
* Created by AniruddhaS on 2/11/2016.
*/
public class Hello {
public String sayHello() {
return "Hello";
}
public int addArgs(int i, int i1) {
return (i+i1);
}
public String sayBye() {
return "Bye";
}
public int mulArgs(int i, int i1) {
return (i*i1);
}
}
测试class
package com.bitwise.test;
import junit.framework.Assert;
import org.junit.Test;
import org.junit.experimental.theories.suppliers.TestedOn;
/**
* Created by AniruddhaS on 2/11/2016.
*/
public class HelloTest {
@Test
public void itShouldReturnHelloOnCallingHelloMethod(){
//given
Hello vector=new Hello();
//when
Assert.assertSame("Hello",vector.sayHello());
//then
}
@Test
public void itShouldReturnAValueAfterAdditionOfTheArgumentValues(){
//given
Hello adder=new Hello();
//when
Assert.assertEquals(3,adder.addArgs(2,1));
//then
}
@Test
public void itShouldPrintByeWhenRelevantFunctionIsCalled(){
//given
Hello bye=new Hello();
//when
Assert.assertSame("Bye",bye.sayBye());
//then
}
@Test
public void itShouldMultiply(){
//given
Hello bye=new Hello();
//when
Assert.assertEquals(6,bye.mulArgs(5,3));/*here mulArgs emits 15 but
test fails since expected value is 6*/
//then
}
}
build.gradle
group 'hello'
version '1.0'
apply plugin: 'java'
sourceCompatibility = 1.5
repositories {
mavenCentral()
}
task test1<<
{
println("hello, test running")
}
test{
testLogging{
events 'started','passed'
events 'started','failed'
}
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}
请指教如何解决以上问题!
提前致谢:)
好吧,我无法理解您的代码,但您可以在 jenkins 中添加 post-build 操作,这会影响作业的状态。
例如:Text finder plugin: 在您指定的日志文件中搜索关键字并使用它来将 "successful" 构建降级为失败。
Log Parser Plugin : 显示错误和警告摘要
您 运行 如何设置 Gradle 脚本?
无论您是使用 "Execute shell" 步骤来执行 ./gradlew test
之类的操作,还是使用 Gradle plugin 来执行 test
任务,Jenkins 将标记构建为失败如果Gradle脚本失败,例如由于测试断言失败。
但是您想要的是将 Jenkins 构建标记为 unstable 而不是 failed.
为此,您需要更新 Gradle 脚本,以便在 build.gradle
:
test
块中不将测试失败视为致命错误
test {
ignoreFailures = true
}
然后您可以 运行 您的 Gradle Jenkins 脚本并让它 analyse JUnit 结果,这会将构建状态设置为 成功 或 不稳定 ,取决于测试是通过还是失败。
Gradle java
插件将 JUnit XML 格式的测试结果写入 build/test-results/TEST-HelloTest.xml
(在您的示例中)。
要分析结果,请转到作业配置中的 "Post-build actions",然后添加 "Publish JUnit test result report",然后在 "Test report XMLs" 字段中输入 **/TEST-*.xml
。