Jenkins共享库Groovy测试框架搭建及依赖问题求助
最简Jenkins共享库Groovy测试方案
方案1:纯Groovy+JUnit+自定义测试运行脚本(无需构建工具)
这个方案不用Gradle/Maven,只依赖Groovy和JUnit,适合快速上手。
步骤1:解决Jenkins依赖
- 查看你的Jenkins版本(系统管理→系统信息→
version字段)。 - 下载对应版本的
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
相关产品推荐
相关产品推荐

