运行测试
在你的 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 测试时很有用。典型的工作流程示例:
- 启动具有特定配置的
GitLabomnibus 实例但不运行测试,例如: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 操作系统上
-
使用以下命令启动一个可在
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 -
一旦 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" -
然后,可以使用以下命令运行大多数不需要特殊设置的测试。在此示例中,我们将运行
log_in_spec.rb。bundle exec rspec ./qa/specs/features/browser_ui/1_manage/login/log_in_spec.rb
在 Windows PC 上
-
如果你还没有安装以下软件,请安装:
- Google Chrome
- Docker Desktop
- Git
- Ruby。请参考
.ruby-version文件以获取要安装的 Ruby 的确切版本。
-
使用以下命令启动一个可在
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 -
一旦 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 -
然后,可以使用以下命令运行大多数不需要特殊设置的测试。在此示例中,我们将运行
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/repositoryEE 测试
运行 EE 测试时,你需要有可用的许可证。GitLab 工程师可以申请许可证。
获得许可证文件后,你可以将其导出为环境变量,然后框架就可以使用它。如果你这样做,它将自动安装。
export QA_EE_LICENSE=$(cat /path/to/gitlab_license)隔离测试
可以通过分配 :quarantine 元数据将测试置于隔离状态。这意味着它们将被跳过,除非使用 --tag quarantine 运行。这可用于在修复过程中预计会失败的测试(类似于如何使用 skip 或 pending)。
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_USERNAME、GITLAB_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