You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins共享库Groovy测试框架搭建及依赖问题求助

最简Jenkins共享库Groovy测试方案

方案1:纯Groovy+JUnit+自定义测试运行脚本(无需构建工具)

这个方案不用Gradle/Maven,只依赖Groovy和JUnit,适合快速上手。

步骤1:解决Jenkins依赖

  1. 查看你的Jenkins版本(系统管理→系统信息→version字段)。
  2. 下载对应版本的jenkins-core.jar,放到项目根目录的lib文件夹里;或者在测试类顶部添加@Grab注解自动下载(CI环境需联网):
@Grab('org.jenkins-ci.main:jenkins-core:2.401.3') // 替换为你的Jenkins版本
import hudson.model.Hudson
// 其他测试代码

步骤2:编写JUnit兼容的测试类

把你的测试类改成使用JUnit 4注解,示例:

import org.junit.Test
import static org.junit.Assert.*

class ThingTest {
    @Test
    void testThingBehavior() {
        def thing = new company.Thing() // 调用src/company下的类
        assertEquals("预期结果", thing.doSomething())
    }
}

步骤3:编写自动测试脚本

创建run-tests.groovy脚本,自动发现测试、运行并生成JUnit XML报告:

import org.junit.runner.JUnitCore
import org.junit.runner.notification.RunListener
import org.junit.runner.Description
import java.io.File
import com.thoughtworks.xstream.XStream
import com.thoughtworks.xstream.io.xml.DomDriver

class XmlReportListener extends RunListener {
    private List<TestResult> testResults = []
    private long startTime

    @Override
    void testStarted(Description description) {
        startTime = System.currentTimeMillis()
    }

    @Override
    void testFinished(Description description) {
        testResults << new TestResult(
            name: "${description.className}.${description.methodName}",
            status: "passed",
            duration: System.currentTimeMillis() - startTime
        )
    }

    @Override
    void testFailure(Failure failure) {
        testResults << new TestResult(
            name: "${failure.description.className}.${failure.description.methodName}",
            status: "failed",
            duration: System.currentTimeMillis() - startTime,
            error: [message: failure.message, stackTrace: failure.exception.stackTrace.join("\n")]
        )
    }

    void writeReport(File outputFile) {
        def testSuite = [
            name: "Jenkins共享库测试",
            tests: testResults.size(),
            failures: testResults.count { it.status == "failed" },
            skipped: 0,
            testcase: testResults
        ]

        def xstream = new XStream(new DomDriver())
        xstream.alias("testsuite", Map)
        xstream.alias("testcase", TestResult)
        xstream.alias("failure", Map)
        xstream.useAttributeFor(TestResult, "name")
        xstream.useAttributeFor(TestResult, "duration")

        outputFile.parentFile.mkdirs()
        outputFile.withWriter { xstream.toXML(testSuite, it) }
    }
}

class TestResult {
    String name
    String status
    long duration
    Map error
}

// 自动发现test目录下的所有测试类
def testClasses = []
new File("test").eachFileMatch(~/.*Test.groovy/) { file ->
    def className = file.name.replace(".groovy", "")
    testClasses << Class.forName(className)
}

// 运行测试并生成报告
def listener = new XmlReportListener()
new JUnitCore().addListener(listener).run(testClasses as Class[])
listener.writeReport(new File("test-reports/junit-report.xml"))

println "测试完成,报告已生成:test-reports/junit-report.xml"

步骤4:执行测试

在CI或本地运行:

groovy -cp "src:lib/*" run-tests.groovy

生成的XML报告可被Jenkins等CI工具直接识别。


方案2:修正Gradle配置(标准Java/Groovy测试流程)

如果能接受用Gradle,这是更省心的方案,自动处理依赖和报告生成。

正确的build.gradle配置

plugins {
    id 'groovy'
}

repositories {
    mavenCentral()
    maven { url 'https://repo.jenkins-ci.org/public/' } // Jenkins专属仓库
}

dependencies {
    implementation 'org.codehaus.groovy:groovy-all:3.0.17' // 匹配你的Groovy版本
    testImplementation 'junit:junit:4.13.2'
    testImplementation "org.jenkins-ci.main:jenkins-core:2.401.3" // 替换为你的Jenkins版本
}

test {
    // 自动发现test目录下的所有测试类
    testClassesDirs = sourceSets.test.groovy.srcDirs
    // 生成JUnit XML报告
    reports {
        junitXml.enabled = true
        html.enabled = true
    }
    // 打印测试日志
    testLogging {
        events 'PASSED', 'FAILED', 'SKIPPED'
    }
}

执行测试

./gradlew test

报告生成在build/reports/tests/test/目录下,直接可用于CI展示。


关键注意点

  • Jenkins版本匹配:必须使用和你的Jenkins服务器完全一致的jenkins-core版本,否则会出现类兼容问题。
  • CI环境网络:如果用@Grab或Gradle,需确保CI环境能访问Maven Central和Jenkins仓库。

内容的提问来源于stack exchange,提问作者mikepurvis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:01:28