使用Sauce Labs进行页面性能测试与监控

在过去的一个月里,我研究了关于Sauce Labs的一个很酷的新功能,该功能有助于前端应用的性能。

以下将是我最近的研究,在我们谈论性能测试时,大多数人都会想到压力和负载测试,这涉及到测量后端系统的响应。

现在已经有很多很棒的工具可以用来加载测试应用程序,但是Sauce的解决方案是专门为前端性能测试设计的。

为什么需要这个?

现在许多现代应用程序都使用JavaScript框架,如React和AngularJS这样的前端库。这些功能丰富的前端库添需要增加一层对应的度量标准帮助我们监控性能。

因此,在本地机器上度量正在测试的应用程序的呈现时间变得至关重要。

您可以获得什么样的性能数据?

Sauce能够访问与Chrome浏览器其他并行连接。 他们通过控制chrome driver和Chrome本身之间的通信来实现这一点。

这使得他们可以开始跟踪浏览器,并从Chrome中获取浏览器引擎中发生的任何事情的所有信息。

然后,他们使用谷歌提供的工具,如Lighthouse,来解析这些所有的数据。

因为跟踪日志数据可能有大量的有效负载(有时高达10兆字节),而不使用诸如Sauce之类的东西,您可能无法使用它们。

Sauce将扫描日志,以便您轻松读取所需性能指标。

你可以用sauce性能测量什么?

新的Sauce性能功能几乎可以捕获所有JavaScripts呈现指标,包括:

Performance Score - 提供性能指标的加权平均值,有助于跟踪团队进度。

Page Load Time - 显示页面何时完全加载(或浏览器正式触发onload事件时)。

Speed Index - Google定义的页面的视觉完整性。

Estimated Input Latency - 输入响应性是用户如何感知应用程序性能的关键因素。

Time to First Byte -   从服务器、相关应用程序缓存或本地资源接收响应的第一个字节之前所花费的时间。

Time to First Paint - 这是第一次在场景中绘制像素点的时间。这个指标不包括默认的背景色,但包括任何用户定义的背景色。

Time to First Contentful Paint - 当绘制任何内容(文档对象模型中定义的对象)时,将触发第一个内容绘制。 这可以是文本,图像或画布渲染。

Time to First Meaningful Paint - 第一个有意义的绘画是浏览器提供的指标,用于衡量在网站上完全呈现最有意义的内容所需的时间。 它相当于第一个内容绘画,并描述了浏览器首次渲染任何文本,图像(包括背景图像),非白色画布或SVG之前的持续时间。 这包括具有挂起的Web字体的文本。 这是用户可以开始使用页面内容的第一个时刻。

Time to Interactive - 从导航开始到布局稳定,Web字体可见,页面响应用户输入的秒数。 如果没有任务阻塞至少50毫秒,页面将稳定。

Time to First CPU Idle - CPU处理所有页面信息所需的时间。

DOM Content Loaded - 在完全加载和解析初始HTML文档时,将触发加载DOM内容的事件,而无需等待样式表,图像和子帧完成加载。 应该仅使用非常不同的事件加载来检测完全加载的页面。 将DOM内容加载更合适时,将加载时间用作性能指标是一个流行的错误。

(*这些定义的参考资料来自 Google Lighthouse Docs 和 FireFox Developer docs.)

虽然服务器端因素影响这些度量,但是如果您能够隔离它们并随着时间的推移度量它们,那么您可以捕获这些增量。

这可以让您了解应用程序加载和呈现的速度。

您还可以编写代码来检查您没有超出以前的基准测试。

它还提供了基于lighthouse计算的性能评分,这是使用基本Selenium WebDriver通常无法获得的数据。

如何在Selenum测试中添加sauce lab性能测试

要在Sauce Labs中开始捕获性能值,您需要做的就是为现有的WebDriver测试添加两个新功能。

extendedDebugging:true,

capturePerformance:true,

没有sauce lab话,我需要非常麻烦的进行这方面的测试

要在过去做到这一点,我必须创建一个WinRunner脚本。然后,我必须添加一个循环计时器函数,等待元素出现在应用程序中。

然后,我将它添加到LoadRunner控制器中,并使用HTTP Vuser协议对系统加载。然后,WinRunner脚本将作为GUI Vuser在客户机上运行,并保持本地呈现时间的计时。

当然,这并不准确,但在当时,这是我实现这个功能的唯一方法。如果我以前有sauce lab,我就能省下很多时间。

为什么这很酷

是它与负载和压力测试没有特别的关系; 事实上,它是故意不考虑它们的。

当遇到性能下降的情况时,我们不可避免地会在用户的行为中感觉到性能下降。

此时,大多数测试人员所做的第一件事就是运行一个负载和压力测试,认为这是一个性能问题。但是无论您只是使用几个节点进行热身,还是运行500个节点,都会发生这种行为。

它不是线性增长;它仍然是静态的。

这可能会让你说“哦,天哪。这意味着UI中有些东西发生了变化。例如,有人引入了一些运行时间很长的DOM元素,或者有人增加了图像的大小,等等。

当我们看到性能问题时,我们倾向于运行负载和压力测试,而不理解它实际上是一个UI问题。

使用此工具,您可以避免开销,并使用它不仅帮助诊断UI问题,还可以在您特别关心的页面上输入性能,然后随着时间的推移注意该页面上的性能是否发生了变化。

你为什么要关心前端性能?

有一个搜索引擎优化 (SEO)的B2C网站,每天有数百万的点击量。

他们有大约1万个关键词排名第一。

后来有一天,谷歌引入了一种名为Panda的算法,它改变了谷歌对其搜索机器人查看web内容的方式进行索引的方式。

在改变之前,他们综合考虑了反弹率和相关性等因素。在Panda中,他们开始比以前的算法更重视页面性能。

有一天突然这个网站排名开始下降。

花了几个月的时间通过Lighthouse来检查他们的页面表现如何。

如果他们当时就有了这个特性,并在Selenium脚本的旁边运行,他们就会立即知道页面加载何时开始变慢,并且不会受到如此巨大的SEO损失。

因此,如果您在零售或银行业或某些BTC中搜索引擎优化是至关重要的,那么在测试中运行这些测试是非常宝贵的。

另外一个基于性能的测试工具叫做Speedo。

Speedo是一个NodeJS包,使您能够直接从命令行在Sauce上运行性能测试。

Speedo旨在帮助团队开始进行性能测试,因此它的设计易于使用,并且可以处理与运行前端性能测试和验证性能回归相关的复杂性。

Speedo可轻松集成任何CI / CD系统,这是将Sauce Performance插入CI / CDpipeline 并开始捕获性能的绝佳方式。

如果您有使用Sauce Labs的企业计划并且正在使用Chrome(截至目前,性能指标只能在Google Chrome上捕获),则需要查看此新功能。

当然以上是和sauce labs 服务强绑定  有没有基于开源的免费的工具?

当然没有。。。。 但是我们可以进行二次开发 自己在脚本中收集所需数据 拿 python selenium 举个栗子

``` 

''' Loosely based on the example code in http://www.obeythetestinggoat.com/

how-to-get-selenium-to-wait-for-page-load-after-a-click.html

'''

'''

Import the necessary packages required for execution

'''

from selenium import webdriver

''' Chrome web driver interface

'''

hyperlink = "http://lambdatest.com"

driver = webdriver.Chrome()

driver.get(hyperlink)

''' Use Navigation Timing  API to calculate the timings that matter the most ''' 

navigationStart = driver.execute_script("return window.performance.timing.navigationStart")

responseStart = driver.execute_script("return window.performance.timing.responseStart")

domComplete = driver.execute_script("return window.performance.timing.domComplete")

''' Calculate the performance'''

backendPerformance_calc = responseStart - navigationStart

frontendPerformance_calc = domComplete - responseStart

print("Back End: %s" % backendPerformance_calc)

print("Front End: %s" % frontendPerformance_calc)

driver.quit()

``` 

我们可以看到其实我们在脚本中 调用了一些浏览器对外暴露的接口 来实现性能监控,然后可以利用图表进行展示,当然如果有时间精力,完全可以自己做一套定制化的服务。

本人:石头 来自thoughtworks 西安

个人website:https://qaseven.cn

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270