Help us learn about your current experience with the documentation. Take the survey.

运行测试

在你的 GDK 环境中运行

首先,请按照说明安装 GDK,将其作为你的本地 GitLab 开发环境。

然后,进入 QA 文件夹,安装 gems,并通过 RSpec 运行测试:

cd gitlab-development-kit/gitlab/qa
bundle install
bundle exec rspec <path/to/spec.rb>
  • 如果你想在 GDK 上运行需要 SSH 的测试,你需要修改你的 GDK 设置
  • 你可以使用 GDK 安装中为 root 预设的密码参见 GDK 帮助。如果你已将 root 密码更改为非默认值,请将密码导出为 GITLAB_ADMIN_PASSWORD
  • 默认情况下,测试将在无头浏览器中运行。如果你想观察测试执行过程,可以导出 WEBDRIVER_HEADLESS=false
  • 标记为 :orchestrated 的测试需要特殊设置(例如,自定义 GitLab 配置或 LDAP 等附加服务)。所有编排测试都可以通过 gitlab-qa 运行。还有一些设置说明用于在 GDK 或其他本地 GitLab 实例上运行其中一些测试。

远程开发

对于 VSCode 用户,.devcontainer 定义了在 Docker 容器中开发 E2E 测试的配置,该容器默认连接到由 gitlab-qa gem 启动的环境的同一网络。有关如何使用 dev containers 的更多信息,请参阅教程

这在开发需要具有特定 omnibus 配置的 GitLab 实例的 E2E 测试时很有用。典型的工作流程示例:

  • 启动具有特定配置的 GitLab omnibus 实例但不运行测试,例如:gitlab-qa Test::Integration::Import EE --no-tests。有关可用配置,请参见文档
  • VSCode 环境启动 dev 容器
  • 从容器内开发和运行测试,这些测试将自动在已启动的 GitLab 实例上执行

典型 GDK 安装的通用命令

如果你已将 GDK 配置为在非默认的特定 IP 地址和端口上运行,并且希望测试框架显示调试日志,可以使用以下示例命令:

QA_LOG_LEVEL=DEBUG \
QA_GITLAB_URL="http://{GDK IP 地址}:{GDK 端口}" \
bundle exec rspec <path/to/spec.rb>

有关变量的说明,请参见下方的其他示例支持的环境变量列表

在 Docker 中的 GitLab 上运行

GitLab 可以在 Docker 中安装

请参阅上一节,了解可能需要调整以下命令或 GitLab 实例配置的情况。你可以在文档中找到更多信息

在类 Unix 操作系统上

  1. 使用以下命令启动一个可在 http://127.0.0.1 访问的实例:

    docker run \
     --hostname 127.0.0.1 \
     --publish 80:80 --publish 22:22 \
     --name gitlab \
     --shm-size 256m \
     --env GITLAB_OMNIBUS_CONFIG="gitlab_rails['initial_root_password']='5iveL\!fe';" \
     gitlab/gitlab-ee:nightly

    如果你使用的是配备 Apple Silicon 的 Mac,你还需要添加:--platform=linux/amd64

  2. 一旦 GitLab 在 http://127.0.0.1 上启动并可访问,在另一个 shell 标签页中,导航到你计算机上 GitLab 仓库的 qa 目录,并运行以下命令。

    bundle install
    export WEBDRIVER_HEADLESS=false
    export GITLAB_ADMIN_PASSWORD=5iveL\!fe
    export QA_GITLAB_URL="http://127.0.0.1"
  3. 然后,可以使用以下命令运行大多数不需要特殊设置的测试。在此示例中,我们将运行 log_in_spec.rb

    bundle exec rspec ./qa/specs/features/browser_ui/1_manage/login/log_in_spec.rb

在 Windows PC 上

  1. 如果你还没有安装以下软件,请安装:

  2. 使用以下命令启动一个可在 http://127.0.0.1 访问的实例。如果需要,你可能需要授予管理员权限:

    docker run --hostname 127.0.0.1 --publish 80:80 --publish 22:22 --name gitlab --shm-size 256m --env GITLAB_OMNIBUS_CONFIG="gitlab_rails['initial_root_password']='5iveL\!fe';" gitlab/gitlab-ee:nightly
  3. 一旦 GitLab 在 http://127.0.0.1 上启动并可访问,在另一个命令提示符窗口中,导航到你计算机上 GitLab 仓库的 qa 目录,并运行以下命令。

    bundle install
    set WEBDRIVER_HEADLESS=false
    set GITLAB_ADMIN_PASSWORD=5iveL\!fe
    set QA_GITLAB_URL=http://127.0.0.1
  4. 然后,可以使用以下命令运行大多数不需要特殊设置的测试。在此示例中,我们将运行 log_in_spec.rb

    bundle exec rspec .\qa\specs\features\browser_ui_manage\login\log_in_spec.rb

特定类型的测试

你可以提供要运行的具体测试作为另一个参数。例如,要运行与仓库相关的规范,你可以执行:

bundle exec rspec qa/specs/features/browser_ui/3_create/repository

EE 测试

运行 EE 测试时,你需要有可用的许可证。GitLab 工程师可以申请许可证

获得许可证文件后,你可以将其导出为环境变量,然后框架就可以使用它。如果你这样做,它将自动安装。

export QA_EE_LICENSE=$(cat /path/to/gitlab_license)

隔离测试

可以通过分配 :quarantine 元数据将测试置于隔离状态。这意味着它们将被跳过,除非使用 --tag quarantine 运行。这可用于在修复过程中预计会失败的测试(类似于如何使用 skippending)。

bundle exec rspec --tag quarantine

或者,可以使用 DISABLE_QUARATINE 变量

DISABLE_QUARANTINE=true bundle exec bin/qa Test::Instance::All http://localhost:3000

自定义 bin/qa 测试运行器

bin/qa 是一个额外的自定义包装脚本,它抽象了一些测试所需的更复杂的设置。此选项需要在命令中指定测试场景和测试实例的 GitLab 地址。例如,要运行任何 Instance 场景测试,可以使用以下命令:

bundle exec bin/qa Test::Instance::All http://localhost:3000

功能开关

可以通过使用命令行选项 --enable-feature FEATURE_FLAG--disable-feature FEATURE_FLAG 来启用或禁用功能标志来运行测试。

例如,要启用强制执行 Gitaly 请求限制的功能标志,你可以使用以下命令:

bundle exec bin/qa Test::Instance::All http://localhost:3000 --enable-feature gitaly_enforce_requests_limits

这将指示 QA 框架启用 gitaly_enforce_requests_limits 功能标志(通过 API),运行 Test::Instance::All 场景中的所有测试,然后再次禁用该功能标志。

类似地,要禁用强制执行 Gitaly 请求限制的功能标志,你可以使用以下命令:

bundle exec bin/qa Test::Instance::All http://localhost:3000 --disable-feature gitaly_enforce_requests_limits

这将指示 QA 框架禁用 gitaly_enforce_requests_limits 功能标志(通过 API)(如果尚未禁用),运行 Test::Instance::All 场景中的所有测试,然后如果之前已启用,则再次启用该功能标志。

请注意,不使用 -- 分隔符,因为 --enable-feature--disable-feature 是 QA 框架选项,而不是 rspec 选项。

测试配置

覆盖 GitLab 地址

在针对 GDK 运行测试时,默认地址是 http://127.0.0.1:3000。可以通过提供环境变量 QA_GITLAB_URL 来覆盖此值:

QA_GITLAB_URL=https://gdk.test:3000 bundle exec rspec

覆盖已认证用户

默认情况下,所有测试都使用 GDK 预置的 root 用户来为每个测试创建新的唯一测试用户。

测试还将使用预置的管理员用户的个人访问令牌。

如果你需要使用不同的管理员凭据进行身份验证,可以提供 GITLAB_ADMIN_USERNAMEGITLAB_ADMIN_PASSWORD 环境变量,如果管理员用户已创建令牌,还可以设置 GITLAB_QA_ADMIN_ACCESS_TOKEN

GITLAB_ADMIN_USERNAME=admin GITLAB_ADMIN_PASSWORD=myadminpassword GITLAB_QA_ADMIN_ACCESS_TOKEN=token bundle exec rspec

所有支持的环境变量都在这里

发送额外的 cookies

可以设置环境变量 QA_COOKIES 以在每个请求中发送额外的 cookies。在 gitlab.com 上,这是将流量定向到 canary 队列所必需的。为此,请设置 QA_COOKIES="gitlab_canary=true"

要设置多个 cookies,请使用 ; 字符分隔它们,例如:QA_COOKIES="cookie1=value;cookie2=value2"

无头浏览器

默认情况下,测试使用无头浏览器。要覆盖此设置,必须将 WEBDRIVER_HEADLESS 设置为 false

WEBDRIVER_HEADLESS=false bundle exec rspec

日志级别

默认情况下,测试使用 info 日志级别。要更改测试的日志级别,可以设置环境变量 QA_LOG_LEVEL

QA_LOG_LEVEL=debug bundle exec rspec