1. Browser Performance Testing
原文:https://docs.gitlab.com/ee/user/project/merge_requests/browser_performance_testing.html
2. Browser Performance Testing
Introduced in GitLab Premium 10.3.
如果您的应用程序提供 Web 界面,并且您正在使用GitLab CI / CD ,则可以快速确定浏览器中待处理代码更改对渲染性能的影响.
2.1. Overview
GitLab 使用Sitespeed.io (一种免费的开源工具)来测量网站的渲染性能. GitLab 构建的Sitespeed 插件在名为browser-performance.json的文件中输出所分析的每个页面的性能得分,该数据可以显示在合并请求中.
2.2. Use cases
考虑以下工作流程:
- 营销团队的成员正在尝试通过添加新工具来跟踪参与度.
 - 通过浏览器性能指标,他们可以看到他们的更改如何影响最终用户页面的可用性.
 - 指标显示,更改后,页面的性能得分有所下降.
 - 查看详细报告时,他们看到
<head>包含了新的 JavaScript 库,这会影响加载页面的速度. - 他们向前端开发人员寻求帮助,他们将库设置为异步加载.
 - 前端开发人员批准合并请求,并授权将其部署到生产中.
 
2.3. How browser performance testing works
首先,在.gitlab-ci.yml文件中定义一个生成浏览器性能报告工件的作业 . 然后,GitLab 会检查此报告,比较源分支和目标分支之间每一页的关键性能指标,并在合并请求中显示信息.
有关性能作业的示例,请参阅" 配置浏览器性能测试" .
注意:如果"浏览器性能"报告没有可比较的数据,例如,当您第一次在.gitlab-ci.yml添加"浏览器性能"作业时,"浏览器性能"报告小部件将不会显示. 它必须在目标分支(例如master )上至少运行一次,然后才能在针对该分支的合并请求中显示.
2.4. Configuring Browser Performance Testing
这个例子显示如何运行sitespeed.io 容器使用 GitLab CI / CD 上的代码和sitespeed.io使用泊坞窗功能于泊坞窗.
- 首先,使用Docker-in-Docker 构建设置 GitLab Runner.
 在
.gitlab-ci.yml文件中,按如下所示配置默认的浏览器性能测试 CI 作业:include: template: Verify/Browser-Performance.gitlab-ci.yml performance: variables: URL: https://example.com
注意:对于 12.4 之前的版本,请参阅旧版 GitLab的信息. 如果您正在使用 Kubernetes 集群,请使用template: Jobs/Browser-Performance-Testing.gitlab-ci.yml .
上面的示例在 CI / CD 管道中创建了一个performance作业,并针对您在URL定义的网页运行 sitespeed.io 以收集关键指标.
该示例使用的 CI / CD 模板自 12.4 起已包含在所有 GitLab 安装中,但不适用于 Kubernetes 集群. 如果您使用的是 GitLab 12.3 或更早版本,则必须手动添加配置
该模板将GitLab 插件用于 sitespeed.io ,并将完整的 HTML sitespeed.io 报告保存为" 浏览器性能"报告工件 ,您可以稍后下载和分析该工件 . 此实现始终采用最新的浏览器性能工件. 如果启用了GitLab Pages,则可以直接在浏览器中查看报告.
您还可以使用环境变量自定义作业:
SITESPEED_IMAGE:配置要用于作业的 Docker 映像(默认为sitespeedio/sitespeed.io),而不是映像版本.SITESPEED_VERSION:配置要用于作业的 Docker 映像的版本(默认13.3.0).SITESPEED_OPTIONS:根据需要配置任何其他 sitespeed.io 选项(默认为nil). 有关更多详细信息,请参阅sitespeed.io 文档 .
For example, you can override the number of runs sitespeed.io makes on the given URL, and change the version:
include:
  template: Verify/Browser-Performance.gitlab-ci.yml
performance:
  variables:
    URL: https://www.sitespeed.io/
    SITESPEED_VERSION: 13.2.0
    SITESPEED_OPTIONS: -n 5 
2.4.1. Configuring degradation threshold
在 GitLab 13.0 中引入 .
您可以配置降级警报的敏感度,以避免针对度量指标的小幅下降获得警报. 这是通过设置DEGRADATION_THRESHOLD变量来完成的. 在以下示例中,仅当" Total Score指标下降 5 分或更多时,才会显示警报:
include:
  template: Verify/Browser-Performance.gitlab-ci.yml
performance:
  variables:
    URL: https://example.com
    DEGRADATION_THRESHOLD: 5 
Total Score指标基于 sitespeed.io 的教练表现得分 . 在教练文档中有更多信息.
2.4.2. Performance testing on Review Apps
上面的 CI YAML 配置非常适合在静态环境下进行测试,并且可以扩展为动态环境,但是还需要一些额外的步骤:
performance作业应在动态环境启动后运行.在
review工作中: 1. 生成带有动态 URL 的 URL 列表文件. 2. 将文件另存为工件,例如,在作业script使用echo $CI_ENVIRONMENT_URL > environment_url.txt. 3. 将列表作为 URL 环境变量(可以是 URL 或包含 URL 的文件)传递给performance作业.现在,您可以针对所需的主机名和路径运行 sitespeed.io 容器.
您的.gitlab-ci.yml文件如下所示:
stages:
  - deploy
  - performance
include:
  template: Verify/Browser-Performance.gitlab-ci.yml
review:
  stage: deploy
  environment:
    name: review/$CI_COMMIT_REF_SLUG
    url: http://$CI_COMMIT_REF_SLUG.$APPS_DOMAIN
  script:
    - run_deploy_script
    - echo $CI_ENVIRONMENT_URL > environment_url.txt
  artifacts:
    paths:
      - environment_url.txt
  only:
    - branches
  except:
    - master
performance:
  dependencies:
    - review
  variables:
    URL: environment_url.txt 
2.4.3. GitLab versions 12.3 and older
自推出以来,浏览器性能测试经历了几处更改. 在本节中,我们将详细介绍这些更改以及如何基于 GitLab 版本运行测试:
- 在 GitLab 12.4 中提供了一个工作模板 .
 - 在 13.2 中,使用其他模板变量将该功能从
Performance重命名为Browser Performance. 出于兼容性原因,模板中的作业名称仍然是performance,但可以在以后的迭代中重命名以匹配. - 对于 11.5 至 12.3,没有可用的模板,必须按以下方式手动定义作业:
 
performance:
  stage: performance
  image: docker:git
  variables:
    URL: https://example.com
    SITESPEED_VERSION: 13.3.0
    SITESPEED_OPTIONS: ''
  services:
    - docker:stable-dind
  script:
    - mkdir gitlab-exporter
    - wget -O ./gitlab-exporter/index.js https://gitlab.com/gitlab-org/gl-performance/raw/master/index.js
    - mkdir sitespeed-results
    - docker run --shm-size=1g --rm -v "$(pwd)":/sitespeed.io sitespeedio/sitespeed.io:$SITESPEED_VERSION --plugins.add ./gitlab-exporter --outputFolder sitespeed-results $URL $SITESPEED_OPTIONS
    - mv sitespeed-results/data/performance.json performance.json
  artifacts:
    paths:
      - performance.json
      - sitespeed-results/
    reports:
      performance: performance.json 
- 对于 11.4 和更早版本,应按以下方式定义作业:
 
performance:
  stage: performance
  image: docker:git
  variables:
    URL: https://example.com
  services:
    - docker:stable-dind
  script:
    - mkdir gitlab-exporter
    - wget -O ./gitlab-exporter/index.js https://gitlab.com/gitlab-org/gl-performance/raw/master/index.js
    - mkdir sitespeed-results
    - docker run --shm-size=1g --rm -v "$(pwd)":/sitespeed.io sitespeedio/sitespeed.io:6.3.1 --plugins.add ./gitlab-exporter --outputFolder sitespeed-results $URL
    - mv sitespeed-results/data/performance.json performance.json
  artifacts:
    paths:
      - performance.json
      - sitespeed-results/ 
建议升级到最新版本并使用模板,以确保您收到最新更新,包括对 sitespeed.io 版本的更新.
