Skip to content

Jenkins - 远程测试

运行自动化测试,尤其是 UI 或 E2E 测试(如 Selenium、Cypress、Playwright),通常需要特定的环境(浏览器、驱动、操作系统)或大量资源。在专用的 Jenkins agent(远程机器)上执行这些测试是一种常见做法。

  1. 分布式构建设置: 你需要配置 Jenkins agent 并连接到 controller。参见“分布式构建(Agent)”章节。
  2. Agent 环境: 所选的 agent 必须安装必要的测试软件:
    • 测试执行框架/运行器(例如,Java 测试的 Maven/Gradle,Cypress/Playwright 的 Node.js/npm)。
    • Web 浏览器(Chrome、Firefox 等),如果运行 UI 测试。
    • 相应的 WebDriver 可执行文件(ChromeDriver、GeckoDriver)放置在系统 PATH 中或在测试代码/配置中指定。
    • 你的测试所需的任何其他依赖项。
  3. 测试代码: 你的自动化测试应该是项目的一部分,通常通过构建工具命令执行。
  4. Pipeline 配置: 你的 Jenkins Pipeline (Jenkinsfile) 应配置为在适当的 agent 上运行测试阶段。

备选方案: 除了手动设置 agent 环境,可以考虑使用带有预构建镜像(包含浏览器和驱动程序,例如 Selenium Docker 镜像)的 Docker agent,或云测试平台(Sauce Labs、BrowserStack)。

关键是在 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 的连接方式会影响设置:

  • 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 服务运行。
  • Agent 连接性: 确保 agent 在“管理 Jenkins” → “节点”中处于在线并已连接状态。
  • 环境不匹配: 验证 agent 上的浏览器、驱动、Java、Node.js 等的确切版本与测试所需的版本一致。
  • PATH 问题: 确保 WebDriver 可执行文件和构建工具在运行 agent 进程的用户对应的 PATH 中配置正确。
  • 权限: 检查 agent 工作空间目录(远程根目录)中的文件系统权限。
  • 无头模式: 如果 agent 没有显示器,确保浏览器配置为在无头模式下运行。
  • 防火墙: 网络防火墙可能会阻止 agent、controller 或被测应用程序之间的连接。
  • 测试失败: 检查控制台输出和发布的测试结果(junit、HTML 报告),查找来自测试框架或 WebDriver 的特定错误消息。

在专用 agent 上远程运行测试,使你能够扩展测试工作量,并确保测试在一致、合适的环境中运行。