性能测试框架Telemetry

Telemetry是Chrome浏览器项目的一个性能测试框架。它允许你在页面(或者是任何Android App)上自动化的执行任何操作,然后给你报告相关的性能指标。Telemetry支持Windows、Mac、Linux、Chrome OS、Android等平台上的Chromium内核浏览器、ContentShell还有Android App的性能测试。它与浏览器的自动化测试通过DevTools Remote Debugging Protocol,与Android App的自动化测试通过adb shell。

之前我的同事@甚知 做过这方面的技术分享,最近我做浏览器内核升级,做性能对比,再次用起了Telemetry这个工具,研究了一两个星期,写篇博客总结一下。

Web Page Replay

性能测试的一个关键点是保证测试的可重复性。Telemetry使用了一种Web Page Replay技术来缓存所有的请求网络数据,在后续的测试中再重放之前的网络环境,保证了测试结果不会因为网络环境的改变而产生偏差。

正常情况下,浏览器是直接从Internet中获得网络数据。Web Page Recorder先把程序请求网络数据的情况保存在本地文件中。比如请求了什么资源,用了多久的时间。随后我们进行性能的测试的时候,就不在需要再请求网络了,而是直接根据之前记录下来的数据,来还原之前的网络状况。

telemetry1

Telemetry介绍

telemetry2

以上是Telemetry一些重要的对象:

使用Telemetry

运行benchmark进行性能测试之前,我需要录制StorySet的wpr数据。如果没有已经录制的好的wpr数据,我们可以在运行run_benchmark脚本时加上–use-live-sites命令行参数,它会使用线上的网络数据进行测试。

录制StorySet网络数据

录制StorySet的wpr数据很简单。StorySet里面有个archive_data_file的成员变量,它指定了保存StorySet网络数据的文件路径。运行以下命令:

python record_wpr aef_page_set --browser=system

它会自动打开系统安装好的Chrome浏览器,并开始录制aef_page_set这个StorySet所需的网络数据,保存在archive_data_file所指定的路径。

运行benchmark

运行以下脚本,开始运行aef.smoothness这个benchmark测试程序的流程性。我们在命令行里指定了程序的路径和输出结果的格式和输出目录:

python run_benchmark aef.smoothness --browser=exact --browser-executable="D:\to_xp\content_shell.exe" --output-format=html --output-dir="D:\telemetry\result\aef.smoothness"

run_benchmark这个脚本的命令行参数比较多,以下介绍一些常用的: