Selenium 的持续集成实现

我们过去有一个 Jenkins CI 工具,它在 Sauce Labs 上执行单元测试和运行集成测试。我们将所有测试都迁移到了 Travis,现在使用 Github Actions 执行所有操作。

此文档之前位于 wiki

通用架构

我们有许多运行 Ubuntu 的 Google Compute Engine 虚拟机,目前托管在 {0..29}.ci.seleniumhq.org - 它们有公开可寻址的 DNS 设置,指向 ab.{0..29}.ci.seleniumhq.org,以便 cookie 测试可以进行子域查找。

其中一台机器 ci.seleniumhq.org 正在运行 jenkins。如果您想要 jenkins 的登录名,请联系 juangj。“Build All Java”作业轮询 SCM 的更改,并执行以下操作

当此构建成功时,它会触发我们关心的每个操作系统/浏览器/测试组合的下游构建。它还会触发下游的干净构建,以确保我们的 maven pom 仍然有序(“Maven 构建”)。

除了“Maven 构建”与编译在同一个构建节点上运行(一个具有 32GB RAM 的强大的 8 核机器)之外,所有下游构建都在单独的构建节点上运行。

下游构建使用环境变量配置,如 SauceDriver 类所示。下游构建从构建主服务器下载 selenium-trunk tar,然后运行测试(这些测试应该已经由 Build All Java 规则编译)。其中两个下游构建是特殊的;“HtmlUnit Java Tests”和“Small Tests”只是在本地无头运行。其他构建使用 SauceLabs

关于网络的说明:构建节点设置在内部网络 10.1.0/24 上,因此它们之间的网络通信非常快速和免费。

当运行无头浏览器测试时,测试文件 servlet 会在由环境变量确定的端口(231${EXECUTOR_NUMBER} 和 241${EXECUTOR_NUMBER} - EXECUTOR_NUMBER 目前始终等于 0)上托管测试文件。测试使用的主机名由环境变量设置(ab.${NODE_NAME}.ci.seleniumhq.org,其中 NODE_NAME 在 {0..29} 中)。使用我们的凭据(存储在 jenkins 全局环境变量中,在“系统配置”页面上设置)从 SauceLabs 请求浏览器。Jenkins 当前设置为每个测试运行并行运行三个测试类,同样在“系统配置”页面上设置。

测试运行,结果会通知到 IRC。

感谢 SauceLabsGoogle 捐赠基础设施来运行所有这些测试。

常见问题

我想像 Jenkins 一样在 Sauce 上运行我的测试(我的测试在 CI 上失败了,但在我的机器上运行良好!)

请参阅 SauceDriver 页面

我想添加一个新的浏览器(Firefox 发布了新版本!)

Jenkins 没有很好的模板概念。我(dawagner)有一些 Selenium 脚本可以自动化 Jenkins 的 UI,以使用预定义的设置创建新作业。如果您想手动执行此操作,以下是大致的步骤

  • 找到您要复制的最相似的配置。如果它是新的 Firefox 版本,请找到最新的 Firefox(它应该大致有 6 个相关联的构建:Javascript + Java {Windows,Linux} **{Native,Synthesized}
  • 对于每个构建,创建一个新作业(登录后在主页左侧的菜单中)
  • 以其他作业的样式命名作业。选择“复制现有作业”,然后输入您正在复制的作业。
  • 滚动浏览预先填充的作业。替换版本号、浏览器名称和任何其他需要替换的详细信息。对于 Firefox 更新,目前有三个地方您应该替换数字(“browser_version”字段和“Build Execute Shell”中的两个)
  • 保存
  • 转到“Build All Java”任务,对其进行配置,将您的新构建添加到“要构建的项目”字段中,其中列出了许多其他项目。**

如果它是 Firefox 更新,您可能还需要删除现有的构建。

上次修改时间:2022 年 1 月 10 日:更多 wiki (#907) [部署站点] (adcf706a1ad)