阿福的软件测试指南

chromium团队是如何做测试的

一直有个想法,想全面深入地了解chromium团队如何做测试。从而借用他们的方法,来完善我们团队的测试,但是都是零零散散地看了一些,希望在2015年,通过我的抛砖,带动大家一起来研究。从而可以避免我们做重复的二次开发,也可以通过学习chromium团队优秀的测试架构和测试脚本,来提高自己的测试设计能力和测试开发能力。 另外,我相信,不是所有的chromium团队做的测试适合我们团队,我们必须结合我们团队的实际情况,来挑选chromium测试团队的精华,落地到我们团队。 另外,一个人的精力总是有限,所以通过发起编写这个共享文档,让测试团队的同学,都把自己了解到的内容补充进来。

chromium的测试overview:

http://www.chromium.org/developers/testing

Buildbot

Buildbot 是chromium测试时的一个重要的设计, 利用Buildbot 可以实现持续集成, 也可以实现自动对每个版本进行测试. 介绍文档在: http://www.chromium.org/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot 主控台: https://chromium-build.appspot.com/p/chromium/console

Telemetry

telemetry的英文释意是:远距离测量,也就是学术上的遥测的概念。 遥测是一种用来查看应用程序运行行为的最简单的方法。通常会有多个视图(View)分别实时地显示 CPU 使用情况、内存使用情况、线程状态以及其他一些有用的信息,以便用户能很快地发现问题的关键所在。 在chromium里,telemetry是一个性能自动化测试框架。chromium的项目主页地址是:http://www.chromium.org/developers/telemetry。 用Telemetry,可以实现在一组网页上运行任意操作, 并生成性能报表。

框架主要做的工作是:

在任意操作系统平台上, 用任意指定参数启动浏览器. 打开一个标签页,转到需要测试的网页. 通过 Inspector timeline and traces 抓取性能数据. 利用Web Page Replay, 缓存这些真实世界的网页,这样,这些网页用来做基准测试时, 就不会变动了.

Telemetry的设计原则是:

一次编写脚本, 即可在所有平台上运行,包括 - Windows,Mac,Linux,Chrome OS 和 Android. 基于浏览器可执行包,即安装安装包后即可执行,不需要用chromium源代码和自己编译. 利用WebPageReplay机制, 使得测试的环境基准不变, 重复测试得出的数据偏差很小. 用例和测量分开 可以在其他浏览器上运行, 这样可以用来做竞品对比测试. (还没有实现)

Telemetry的代码设计:

Telemetry在Chrome的 DevTools 的Remote Debugging Protocol上, 做了一个python的包装. Telemetry的代码在chromium源码的 src/tools/telemetry/ 目录里, 性能基准在 src/tools/perf/.

Telemetry对基准(benchmark)进行了重新定义, 在Telemetry这里, 一个基准(benchmark)有以下部分组成: 一次测量(measurement) 一个页面集合(page set) 一系列的浏览器可选参数(a set of optional browser options) 你可以用一个简短的命令,来执行一次基准测试. 测试的配置都被写入每个基准(benchmark)里, 来保证在不同机器上测试时的一致性. 一次测量 (代码里即 PageTest 的概念), 就是在一个页面上可以跑的东西. 给定一个页面, 一次测量(PageTest )就会评估页面的性能, 完成后会给出性能数据, 柱状图, trace文件,以及通过或者失败与否.

测量(PageTest) 可以做到在任意网页上运行, 要设计一个好的测量(PageTest) 是非常困难的, chromium测试团队已经设计了一些, 可以直接采用, 在 src/tools/perf/ 这个目录下. 比如: tools/perf/measurements/smoothness.py tools/perf/measurements/memory.py

网页集(Page Set)

即一系列网址的组合, 可以是外网的网站, 或者是WebPageReplay里缓存页, 或者是本地的网页文件. 网页的操作, 比如点击按钮,滚动页面等,也包括在这个网页集(Page Set)里. 比如:最高访问量前25的网站(top 25 websites),从右至左文字排列的国际网站(international sites with right to left text)

如何本地执行一次Telemetry基准(benchmark):http://www.chromium.org/developers/telemetry/run_locally

如何设置好网页集(Page Set):http://www.chromium.org/developers/telemetry/manage_page_sets

如何用Web Page Replay来记录一个网页集(Page Set):http://www.chromium.org/developers/telemetry/record_a_page_set 如何增加一个 measurement:http://www.chromium.org/developers/telemetry/add_a_measurement 功能引导:http://www.chromium.org/developers/telemetry/telemetry-feature-guidelines 用Telemetry进行性能分析:http://www.chromium.org/developers/telemetry/profiling 性能Profile: http://www.chromium.org/developers/telemetry/telemetry-profile-generation 用Telemetry做 unittests:http://www.chromium.org/developers/telemetry/telemetry-unittests 如果我们在使用Telemetry的过程中,有疑问,可以通过邮件咨询chromium的人: [email protected]. 或者参加Telemetry小组论坛:https://groups.google.com/a/chromium.org/forum/#!forum/telemetry

常见问题Q&A

Q:如何用浏览器打开特定网址? A:把网址放到一个网页集(Page Set)中,详情参见http://www.chromium.org/developers/telemetry/manage_page_sets

Q:使用记录好的网页集(Page Set)返回错误? A: 记录没有被包括在Chromium的代码树里. 如果你是谷歌的合作伙伴, 跑下gsutil config 命令来进行认证; 然后再重试下.如果你还没有安装 gsutil , 到这里安装下: src/tools/telemetry/third_party/gsutil/gsutil.如果你不是谷歌的合作伙伴, 你可以用--use-live-sites 命令来跑外网的站点或者自己动手做网页集缓存.

Web Page Replay

目前,该项目已经迁移到了github: https://github.com/chromium/web-page-replay

Chrome Performance Dashboard

Chrome Performance Dashboard 是chrome浏览器展现性能数据的平台, 新的平台地址是: https://chromeperf.appspot.com/ 老的平台地址是: http://www.chromium.org/developers/testing/chromium-build-infrastructure/performance-test-plots

Web Page Test

Aka, wpt. 这是google员工Patrick Meenan全职开发的性能监测工具,它可以通过截图来直观地看到页面加载的过程,并能进行视频对比,方便演示性能优化结果,WebPagetest是目前功能最全面的开源监测工具,还可以部署到本地机器,方便进行内部的性能测试。