性能测试框架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先把程序请求网络数据的情况保存在本地文件中。比如请求了什么资源,用了多久的时间。随后我们进行性能的测试的时候,就不在需要再请求网络了,而是直接根据之前记录下来的数据,来还原之前的网络状况。

Telemetry介绍

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

  • benchmark:测试基准,把measurement和StorySet组合在一起,对其他被测程序进行性能测试。
  • measurement(StoryTest),测试方法,它运行Story(Page),执行具体测量性能逻辑,并收集metric性能指标数据。
  • Story(Page),一个具体的测试场景,比如在某个网页上面执行某些操作。
  • StorySet(page_sets),Story的集合,并有一些共享的数据。
  • metric ,性能指标,负责收集到的原始性能数据,并计算成恰当的性能结果
  • Timeline Based Measurement 一个内置的measurement,基于时间线的测量方式。

使用Telemetry使用Telemetry

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

录制StorySet网络数据

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

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

运行benchmark

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

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

  • –browser。指定浏览器的类型。通常我们需要测试我们自己的浏览器,设置为–browser=excat,那么它就会根据–browser-executable参数的路径值来启动相应的程序。
  • –browser-executable。被测试程序的路径,与–browser参数配合起来使用。
  • –output-format。输出结果的格式。有chartjson、csv、 gtest、histograms、 html、json-test-results等格式。个人觉得html格式挺好的,有数据可视化的折线图。
  • –use-live-sites。忽略本地的wpr数据,使用线上的网络数据。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注