{{< details >}}
- Tier: 专业版, 旗舰版
- Offering: JihuLab.com, 私有化部署
{{< /details >}}
通过负载性能测试,您可以在 极狐GitLab CI/CD 中测试任何待处理代码更改对应用程序后端的影响。
极狐GitLab 使用 k6,一个免费且开源的工具,用于衡量应用程序在负载下的系统性能。
与用于测量网站在客户端浏览器中的性能的 浏览器性能测试 不同,负载性能测试可用于对应用程序端点(如 API、Web 控制器等)进行各种类型的负载测试。这可以用来测试后端或服务器在规模上的表现。
例如,您可以使用负载性能测试对应用程序中流行的 API 端点执行许多并发的 GET 调用,以查看其性能表现。
负载性能测试如何工作
首先,在您的 .gitlab-ci.yml
文件中定义一个生成 负载性能报告产物 的作业。极狐GitLab 检查此报告,比较源分支和目标分支之间的关键负载性能指标,然后在合并请求小部件中显示信息:
接下来,您需要配置测试环境并编写 k6 测试。
合并请求小部件在测试完成后显示的关键性能指标为:
- 检查:在 k6 测试中配置的 检查的通过率百分比。
- TTFB P90:开始接收响应所需时间的第 90 百分位数,即首次字节时间 (TTFB)。
- TTFB P95:TTFB 的第 95 百分位数。
- RPS:测试能够达到的每秒请求数 (RPS) 的平均值。
{{< alert type=”note” >}}
如果负载性能报告没有可比较的数据,例如您第一次在 .gitlab-ci.yml
中添加负载性能作业时,负载性能报告小部件不会显示。它必须至少在目标分支(例如 main
)上运行过一次,然后才能显示在针对该分支的合并请求中。
{{< /alert >}}
配置负载性能测试作业
配置负载性能测试作业可以分为几个不同的部分:
- 确定测试参数,例如吞吐量等。
- 设置负载性能测试的目标测试环境。
- 设计并编写 k6 测试。
确定测试参数
您需要做的第一件事是确定您想要运行的负载测试类型以及您希望它如何运行(例如,用户数量、吞吐量等)。
测试环境设置
负载性能测试的大部分工作是准备目标测试环境以应对高负载。您应确保它能够处理测试时的吞吐量。
通常还需要在目标环境中具有代表性的测试数据,以供负载性能测试使用。
我们强烈建议不要在生产环境中运行这些测试。
编写负载性能测试
环境准备好后,您可以编写 k6 测试本身。k6 是一个灵活的工具,可以用于运行多种性能测试。
在极狐GitLab CI/CD 中配置测试
当您的 k6 测试准备好后,下一步是在极狐GitLab CI/CD 中配置负载性能测试作业。最简单的方法是使用极狐GitLab 附带的 Verify/Load-Performance-Testing.gitlab-ci.yml
模板。
{{< alert type=”note” >}}
对于大规模的 k6 测试,您需要确保执行实际测试的极狐GitLab Runner 实例能够处理运行该测试。默认共享的 JihuLab.com runners 可能规格不足以处理大多数大规模的 k6 测试。
{{< /alert >}}
此模板在作业中运行 k6 Docker 容器并提供多种方式来自定义作业。
一个示例配置工作流程:
- 设置极狐GitLab Runner 以运行 Docker 容器,例如 Docker-in-Docker 工作流程。
-
在您的
.gitlab-ci.yml
文件中配置默认的负载性能测试 CI/CD 作业。您需要包含模板并使用 CI/CD 变量进行配置:include: template: Verify/Load-Performance-Testing.gitlab-ci.yml load_performance: variables: K6_TEST_FILE: <PATH TO K6 TEST FILE IN PROJECT>
上述示例在您的 CI/CD 流水线中创建一个 load_performance
作业来运行 k6 测试。
{{< alert type=”note” >}}
对于 Kubernetes 设置,应使用不同的模板:Jobs/Load-Performance-Testing.gitlab-ci.yml
。
{{< /alert >}}
k6 有多种选项可以配置测试的运行方式,例如要使用的吞吐量 (RPS),测试应运行多长时间等。几乎所有选项都可以在测试本身中配置,但您也可以通过 K6_OPTIONS
变量传递命令行选项。
例如,您可以使用 CLI 选项覆盖测试的持续时间:
include:
template: Verify/Load-Performance-Testing.gitlab-ci.yml
load_performance:
variables:
K6_TEST_FILE: <PATH TO K6 TEST FILE IN PROJECT>
K6_OPTIONS: '--duration 30s'
极狐GitLab 仅在 MR 小部件中显示关键性能指标,前提是 k6 的结果通过摘要导出保存为 负载性能报告产物。始终使用最新的负载性能产物,其中使用测试的摘要值。
如果启用了 极狐GitLab Pages,您可以在浏览器中直接查看报告。
在审查应用程序中的负载性能测试
上述 CI/CD YAML 配置示例适用于针对静态环境进行测试,但可以扩展以通过一些额外步骤与 审查应用程序 或 动态环境 一起工作。
最佳方法是将动态 URL 捕获在 .env
文件中作为作业产物共享,然后使用我们提供的名为 K6_DOCKER_OPTIONS
的自定义 CI/CD 变量来配置 k6 Docker 容器以使用该文件。这样,k6 就可以使用 .env
文件中的任何环境变量在脚本中使用标准 JavaScript,例如:http.get(`${__ENV.ENVIRONMENT_URL}`)
。
例如:
- 在
review
作业中:- 捕获动态 URL 并将其保存到
.env
文件中,例如echo "ENVIRONMENT_URL=$CI_ENVIRONMENT_URL" >> review.env
。 - 将
.env
文件设置为 作业产物。
- 捕获动态 URL 并将其保存到
- 在
load_performance
作业中:- 设置它以依赖于 review 作业,以便继承环境文件。
- 使用 Docker CLI 选项环境文件设置
K6_DOCKER_OPTIONS
变量,例如--env-file review.env
。
- 配置 k6 测试脚本以在其步骤中使用环境变量。
您的 .gitlab-ci.yml
文件可能类似于:
stages:
- deploy
- performance
include:
template: Verify/Load-Performance-Testing.gitlab-ci.yml
review:
stage: deploy
environment:
name: review/$CI_COMMIT_REF_SLUG
url: http://$CI_ENVIRONMENT_SLUG.example.com
script:
- run_deploy_script
- echo "ENVIRONMENT_URL=$CI_ENVIRONMENT_URL" >> review.env
artifacts:
paths:
- review.env
rules:
- if: $CI_COMMIT_BRANCH # 根据需要修改以匹配您的流水线规则,或使用 `only/except`。
load_performance:
dependencies:
- review
variables:
K6_DOCKER_OPTIONS: '--env-file review.env'
rules:
- if: $CI_COMMIT_BRANCH # 根据需要修改以匹配您的流水线规则,或使用 `only/except`。