Jenkins - 远程测试
Jenkins - 远程测试设置
Section titled “Jenkins - 远程测试设置”运行自动化测试,尤其是 UI 或 E2E 测试(如 Selenium、Cypress、Playwright),通常需要特定的环境(浏览器、驱动、操作系统)或大量资源。在专用的 Jenkins agent(远程机器)上执行这些测试是一种常见做法。
- 分布式构建设置: 你需要配置 Jenkins agent 并连接到 controller。参见“分布式构建(Agent)”章节。
- Agent 环境: 所选的 agent 必须安装必要的测试软件:
-
- 测试执行框架/运行器(例如,Java 测试的 Maven/Gradle,Cypress/Playwright 的 Node.js/npm)。
-
- Web 浏览器(Chrome、Firefox 等),如果运行 UI 测试。
-
- 相应的 WebDriver 可执行文件(ChromeDriver、GeckoDriver)放置在系统 PATH 中或在测试代码/配置中指定。
-
- 你的测试所需的任何其他依赖项。
- 测试代码: 你的自动化测试应该是项目的一部分,通常通过构建工具命令执行。
- Pipeline 配置: 你的 Jenkins Pipeline (
Jenkinsfile) 应配置为在适当的 agent 上运行测试阶段。
备选方案: 除了手动设置 agent 环境,可以考虑使用带有预构建镜像(包含浏览器和驱动程序,例如 Selenium Docker 镜像)的 Docker agent,或云测试平台(Sauce Labs、BrowserStack)。
配置 Pipeline 进行远程测试
Section titled “配置 Pipeline 进行远程测试”关键是在 Jenkinsfile 中使用 agent 指令,将包含测试的阶段定向到正确配置的 agent。
示例:在带标签的 Agent 上运行 Selenium 测试(通过 Maven)
Section titled “示例:在带标签的 Agent 上运行 Selenium 测试(通过 Maven)”假设你有一个配置了 selenium-agent 标签的 agent,并且该 agent 上安装了 Java、Maven、Chrome 和 ChromeDriver。
pipeline { agent any // Build stage might run anywhere
stages { stage('Build') { steps { sh 'mvn clean package -DskipTests' // Archive artifact if needed for deployment before test // archiveArtifacts artifacts: 'target/*.war' } }
// Deployment to test environment might happen here // stage('Deploy to Test Env') { ... }
stage('Run Selenium E2E Tests') { // *** Target this stage to the specific agent *** agent { label 'selenium-agent' }
steps { echo "Running tests on agent: ${env.NODE_NAME}" // Assuming tests run via 'mvn verify' or a specific profile // Pass the application URL if needed sh 'mvn verify -Pselenium-tests -Dwebapp.url=http://test-env.example.com' } post { always { // Publish results generated on the agent junit '**/target/failsafe-reports/*.xml' } } } }}启动 Agent(回顾)
Section titled “启动 Agent(回顾)”agent 的连接方式会影响设置:
- SSH Agent(推荐用于 Linux/macOS): 在 Jenkins 中使用 SSH 凭据配置 agent。Jenkins 连接到 agent。确保 agent 运行有 SSH 服务器并安装了必要的工具。
- JNLP Agent(Agent 连接到 Controller): 在 Jenkins 中配置 agent,启动方式选择“通过连接到 controller 启动 agent”。在远程机器上手动启动 agent 进程(使用
java -jar agent.jar -jnlpUrl ... -secret ...)或通过脚本/服务启动。要求 controller 上的 JNLP 端口(例如 50000)开放且 agent 可以访问。由于设置和潜在的防火墙复杂性,此方法现在通常不太推荐。 - Windows Agent: 可以通过 SSH(如果安装了 SSH 服务器)、JNLP 启动,或配置为作为 Windows 服务运行。
远程测试故障排除
Section titled “远程测试故障排除”- Agent 连接性: 确保 agent 在“管理 Jenkins” → “节点”中处于在线并已连接状态。
- 环境不匹配: 验证 agent 上的浏览器、驱动、Java、Node.js 等的确切版本与测试所需的版本一致。
- PATH 问题: 确保 WebDriver 可执行文件和构建工具在运行 agent 进程的用户对应的
PATH中配置正确。 - 权限: 检查 agent 工作空间目录(
远程根目录)中的文件系统权限。 - 无头模式: 如果 agent 没有显示器,确保浏览器配置为在无头模式下运行。
- 防火墙: 网络防火墙可能会阻止 agent、controller 或被测应用程序之间的连接。
- 测试失败: 检查控制台输出和发布的测试结果(
junit、HTML 报告),查找来自测试框架或 WebDriver 的特定错误消息。
在专用 agent 上远程运行测试,使你能够扩展测试工作量,并确保测试在一致、合适的环境中运行。