Jenkins - 单元测试
Jenkins - 单元测试集成
Section titled “Jenkins - 单元测试集成”集成单元测试是 CI(Continuous Integration)的基础。Jenkins 可以轻松地将单元测试作为 Pipeline 的一部分运行并可视化结果。
Jenkins 依赖构建工具(如 Maven、Gradle、Ant、npm、pip)来执行测试,并依赖测试框架(如 JUnit、TestNG、NUnit、pytest、Jest)来运行测试并生成报告文件,通常采用 XML 格式。
常见场景:使用 Maven/Gradle 的 Java 单元测试
Section titled “常见场景:使用 Maven/Gradle 的 Java 单元测试”大多数 Java 项目使用 Maven 或 Gradle 进行构建和依赖管理。这些工具内置支持在构建生命周期中运行 JUnit 或 TestNG 测试。
- Maven: Surefire 插件在
test阶段(mvn test或mvn package)运行单元测试。它在target/surefire-reports中生成 XML 报告。 - Gradle: 内置的
test任务运行测试(通常默认为 JUnit)。它在build/test-results/test中生成 XML 报告,并在build/reports/tests/test中生成 HTML 报告。
集成到 Jenkins Pipeline
Section titled “集成到 Jenkins Pipeline”此过程涉及您的 Jenkinsfile 中的两个主要步骤:
-
执行测试: 使用构建步骤(
sh或bat)调用构建工具的测试命令。 -
发布结果: 使用
junit步骤(由 JUnit 插件提供,默认已安装)解析生成的 XML 报告并在 Jenkins UI 中显示它们。
示例:使用 Maven 的 Declarative Pipeline
Section titled “示例:使用 Maven 的 Declarative Pipeline”pipeline { agent any // 或者使用配置了 Java/Maven 的特定 agent stages { stage('Build & Unit Test') { steps { echo 'Compiling and running unit tests...' // 使用 'mvn clean test' 或 'mvn clean verify' // 如果配置了集成测试,'verify' 也会运行集成测试 sh 'mvn clean test' } } // 其他阶段,如 Integration Test、Deploy... } post { always { echo 'Publishing test results...' // 告诉 Jenkins 在哪里找到 JUnit XML 报告 junit 'target/surefire-reports/**/*.xml' } // 您可以在此处添加成功/失败时的特定操作 success { echo 'Unit tests passed!' } failure { echo 'Unit tests failed!' // 可能发送通知 } }}示例:使用 Gradle 的 Declarative Pipeline
Section titled “示例:使用 Gradle 的 Declarative Pipeline”pipeline { agent any // 或者使用配置了 Java/Gradle 的特定 agent stages { stage('Build & Unit Test') { steps { echo 'Compiling and running unit tests...' // 确保 gradlew 有执行权限 sh 'chmod +x ./gradlew' sh './gradlew build' // 'build' 任务通常包含 'test' // 或者明确指定:sh './gradlew test' } } } post { always { echo 'Publishing test results...' // JUnit 插件也会读取 Gradle 的 XML 输出 junit '**/build/test-results/test/*.xml'
// 可选:发布 HTML 报告以便轻松查看 publishHTML(target: [ allowMissing: true, alwaysLinkToLastBuild: true, keepAll: false, // 节省空间,只保留最新的 reportDir: 'build/reports/tests/test', reportFiles: 'index.html', reportName: 'Gradle Test Report' ]) } }}查看测试结果
Section titled “查看测试结果”构建运行后,junit 步骤处理报告后:
- 构建状态将反映测试失败(Unstable 或 Failed)。
- 构建页面上会出现一个“测试结果”链接。
- 点击“测试结果”会显示摘要:总测试数、失败数、跳过数。
- 您可以深入查看特定的包、类和失败的测试方法,通常可以直接在 Jenkins 中看到堆栈跟踪(stack traces)。
- 一个“测试结果趋势”图显示了近期构建的通过/失败历史记录。
Blue Ocean UI 通常提供一种更现代化、更具视觉吸引力的方式来在 Pipeline 视图中直接查看集成后的测试结果。
其他语言/框架
Section titled “其他语言/框架”其他生态系统的模式类似:
- JavaScript (Jest/Mocha): 使用
npm test或yarn test运行测试。将您的测试运行器配置为输出 JUnit XML 报告(例如,使用jest-junit)。在 Jenkins 中使用junit步骤。 - .NET (NUnit/MSTest): 使用
dotnet test运行测试。将其配置为生成 trx 或 JUnit XML 报告。使用junit步骤或如果可用,使用专用的插件。 - Python (pytest/unittest): 使用
pytest或python -m unittest运行测试。配置 pytest 生成 JUnit XML(pytest --junitxml=report.xml)。使用junit步骤。
始终检查您的测试框架是否能生成 JUnit XML 格式的报告,因为这是 Jenkins 最能普遍理解的格式。