Jenkins - 自动化测试
Jenkins - 自动化测试策略
Section titled “Jenkins - 自动化测试策略”自动化测试是持续集成(Continuous Integration,CI)的基石。Jenkins 擅长将各种类型的自动化测试集成到构建 Pipeline 中,从而快速反馈代码质量。
目标是在不同阶段客观地验证构建质量。Jenkins 本身不执行测试,但它协调测试工具和框架的执行,然后收集并呈现结果。
集成常见的测试类型
Section titled “集成常见的测试类型”1. 单元测试
Section titled “1. 单元测试”这些测试独立隔离的单个组件(类、方法)。它们通常速度快,并且运行频繁。
- 工具: JUnit (Java)、TestNG (Java)、NUnit (.NET)、pytest (Python)、Jest (JavaScript)、Go testing 包。
- 集成: 使用构建工具(Maven、Gradle、npm、pip、go test)作为构建阶段(build stage)的一部分来执行单元测试。
- Jenkins: 在 Pipeline 步骤(Pipeline step)中利用构建工具集成(例如,
mvn test、gradle test、npm test)。使用junit等步骤(针对 JUnit/TestNG XML 报告)发布结果,以便在 Jenkins 中显示趋势和详细报告。有关详细信息,请参阅“单元测试集成”章节。
2. 集成测试
Section titled “2. 集成测试”这些测试不同组件或系统之间的交互(例如,应用程序代码与数据库、微服务之间的通信)。
- 工具: 通常使用与单元测试相同的框架,但需要设置外部依赖(数据库、API)。像 Testcontainers 这样的工具可以在 Docker 中管理依赖。
- 集成: 通常在单元测试通过后运行。可能需要在 Pipeline 中设置一个专门的阶段。
- Jenkins: 通过构建工具执行测试。
junit步骤可以发布结果。确保 Jenkins agent 环境能够访问必要的服务,或者在构建中使用 Testcontainers 等工具。
3. UI / 端到端 (E2E) 测试
Section titled “3. UI / 端到端 (E2E) 测试”这些通过驱动应用程序的用户界面(UI)(Web 浏览器、移动应用)来模拟真实用户交互。
- 工具: Selenium WebDriver、Cypress、Playwright(用于 Web)、Appium(用于移动应用)。
- 集成: 通常在应用程序构建并可能部署到测试环境后运行。通常需要一个专门的、更复杂的阶段。
- Jenkins:
-
- 使用构建工具执行测试(例如,在 Maven 中使用
mvn failsafe:integration-test运行 Selenium 测试,使用npx cypress run运行 Cypress 测试)。
- 使用构建工具执行测试(例如,在 Maven 中使用
-
- 环境设置: Jenkins agent 需要访问 Web 浏览器(例如,Chrome、Firefox)及其相应的驱动程序(ChromeDriver、GeckoDriver)。直接管理这些可能会很复杂。
-
- 无头模式执行 (Headless Execution): 在 agent 上以无头模式运行浏览器,以避免需要显示器。
-
- Docker 解决方案: 在 Docker 容器(例如,Selenium Grid Docker 镜像)中运行浏览器,以便更轻松地管理环境。
-
- 云测试服务: 集成 Sauce Labs、BrowserStack 或 LambdaTest 等服务,以便在云中的各种浏览器/操作系统组合上运行测试。这些服务通常提供 Jenkins 插件。
-
- 发布结果: 如果您的框架生成兼容的 XML 报告,请使用
junit步骤。使用publishHTML步骤发布 HTML 报告(例如,来自 Cypress 的报告)。
- 发布结果: 如果您的框架生成兼容的 XML 报告,请使用
注意:使用 ‘Hudson Selenium Plugin’ 直接运行 HTML 测试集的旧方法已经过时(outdated)。现代实践是在标准测试框架中使用 WebDriver 绑定。
使用 Maven 的 Selenium 测试 Pipeline 阶段示例
Section titled “使用 Maven 的 Selenium 测试 Pipeline 阶段示例”这假设您使用 JUnit/TestNG 编写了 Selenium WebDriver 测试,并配置通过 Maven Failsafe 插件运行。
stage('E2E Tests') { // Agent 需要访问浏览器驱动程序或使用带有浏览器的 Docker agent agent { label 'selenium-agent' } // 或者使用 Docker agent steps { echo 'Running Selenium E2E Tests...' // 假设应用程序已部署或可通过 WEBAPP_URL 访问 sh 'mvn verify -Dwebdriver.base.url=$WEBAPP_URL' } post { always { // 无论结果如何都发布测试结果 junit '**/target/failsafe-reports/*.xml' // 可选:如果生成了 HTML 报告则发布 // publishHTML(target: [allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: 'target/reports', reportFiles: 'my-report.html', reportName: 'E2E Test Report']) } }}- 在适当的阶段运行测试: 早期运行快速的单元测试,后期运行较慢的 E2E 测试。
- 快速失败(Fail fast): 如果关键测试失败,立即停止 Pipeline。
- 隔离测试环境: 使用 Docker 或专用 agent 防止测试相互干扰。
- 有效报告: 使用插件(
junit、publishHTML,以及 Warnings NG 用于静态分析)使结果可见并跟踪趋势。 - 管理测试数据: 确保测试拥有可靠且一致的数据。
- 并行化测试: 在可能的情况下并行运行测试,以加快执行速度(通常由测试框架或构建工具处理)。
请查阅您的特定测试框架和构建工具的文档,以了解执行它们并生成与 Jenkins 兼容报告的最佳方法。