如何使用NodeJS + Lighthouse + Gulp构建自动化网站性能测试工具

2023-10-01 07:08

本文主要介绍如何使用NodeJS + Lighthouse + Gulp构建自动化网站性能测试工具。有一定的参考价值。现在我就和大家分享一下。有需要的朋友可以参考一下

假设你还不知道 Lighthouse 是什么,Lighthouse 是 Google 旗下的一个开源工具,可以自动检测网站质量。它界面友好、操作简单、使用方法多样、视角全面。您可以使用它来测试任何网页。通常用户、QA 和开发人员都可以快速上手。

启动姿势难度系数+1 Lighthouse的使用方法有很多种。最简单的一种是使用 Chrome 的开发者工具。步骤如下:

打开 Chrome 浏览器

按F12

在弹出窗口中打开审核选项卡

单击执行审核...检查全部

运行审核

难度系数+2 您也可以使用命令行。

安装节点

安装 Lighthouse npm install -g lighthouse

在命令行运行 lighthouse

以上两种使用方法不是本文的重点。如果想了解更多,可以参考DevTools中运行Lighthouse

难度系数+3 由于最近在学习NodeJS,所以决定使用Node 8 + Gulp来运行lighthouse。为了提高结果的准确性,我对每个任务跑了10次lighthouse,并且只关心结果指标中的第一个。有意义——画毫秒,最后取10次的平均值。为了可视化和可读性,最终结果以网页的形式显示。用户可以在网页上看到每次执行 Lighthouse 后第一次有意义的绘制的毫秒数。 ,您还可以看到平均值。如果用户对某个执行的详细信息感兴趣,可以点击链接查看。最终效果如下:

环境设置和安装节点8

安装依赖包

npm 我灯塔 --save-dev

npm 我的 chrome 启动器 --save-dev

npm i fs-extra --save-dev

npm i gulp --save-dev 配置在项目根目录中创建 Lighthouse 配置文件 lighthouse-config.js。这里我们都使用默认的配置。要使用默认配置,需要在配置文件中声明extends: "lighthouse:default"。 ”。

module.exports = {

扩展:“灯塔:默认”

}如果读者需要了解更详细的配置选项,请参考:

Lighthouse 本文的大部分内容是关于命令行的。命令行参数也可用于 Node

节流这篇文章是关于网络模拟的

默认配置特定默认配置参数

网页测试模拟不同网速

仿真模拟不同的设备

编码在项目根目录创建gulpfile.js,首先引入所有依赖工具:

const gulp = require("gulp");

const 灯塔 = require("灯塔");

const chromeLauncher = require("chrome-launcher");

const 打印机 = require("lighthouse/lighthouse-cli/printer");

const Reporter = require("lighthouse/lighthouse-core/report/report-generator");

const fs = require("fs-extra");

const config = require(".lighthouse-config.js");在开始使用lighthouse之前,首先创建一个写入文件的方法,最终生成自定义的报告文件:

异步函数写入(文件,报告){

尝试{

等待fs.outputFile(文件,报告);

} catch(错误 e){

console.log("写报告时出错", e);

}

} 在调用 Lighthouse 之前,我们需要首先启动一个 Chrome 实例并向 Lighthouse 提供端口号。 --headless 表示不打开浏览器窗口。

异步函数 launchChrome() {

让铬;

尝试{

chrome = 等待 chromeLauncher.launch({

chromeFlags:[

“--禁用GPU”,

“--无沙盒”,

“--无头”

],

启用扩展:true,

日志级别:“错误”

});

console.log(chrome.port)

返回{

端口:chrome.port,

chromeFlags:[

“--无头”

],

日志级别:“错误”

}

} 抓住 (e) {

console.log("启动 Chrome 时出错", e);

}

}Chrome实例启动后,我们就可以调用Lighthouse了。调用时,我们必须提供需要进行性能测试的网站、参数以及之前创建的配置。参数包括Chrome启动端口、启动方式(是否是headless等)。

异步函数 lighthouseRunner(opt) {

尝试{

return wait lighthouse("https://m.fjsmjj.com", opt, config);

} 抓住 (e) {

console.log("运行灯塔时出错");

}

}Lighthouse的返回结果是一个json对象,包含性能测试结果、最终版本的配置参数、指标分组等信息。读者可以参考理解结果进行更深入的理解。

由于我们需要使用官方的Lighthouse模板来生成报告,所以我们调用官方的方法。注意,第一个参数在result.lhr中传递,第二个参数声明为生成html报告(也可以生成csv等格式的报告)。

函数genReport(结果){

return Reporter.generateReport(result.lhr, "html");

} 接下来我们编写一个将上述方法串在一起的函数。首先启动一个Chrome实例,然后将Chrome实例的一些参数传递给Lighthouse,使用lighthouse运行的结果生成报告,并将其写入html文件中。 ,html文件应该有一个时间戳和执行顺序作为唯一标识符。 start方法返回结果中的first-meaningful-paint(这是我们最关心的指标,读者可以根据自己的需求进行替换,具体指标请参考Lighthouse)。

异步函数运行(时间戳,num){

让chromeOpt =等待launchChrome();

让结果=等待lighthouseRunner(chromeOpt);

让报告 = genReport(结果);

等待打印机.write(报告, "html", `./cases/lighthouse-report@${timestamp}-${num}.html`);

返回 result.lhr.audits["first-meaningful-paint"].rawValue;

等待 chrome.kill();

} 现在,我们可以正式开始编写 gulp 任务了。首先,获取用于命名最终生成的报告的当前时间戳,然后声明一个数组来记录每次运行 Lighthouse 时生成的第一个有意义的绘制毫秒数。计数,然后运行Lighthouse 10次,使用预先创建的模板文件,并根据这10次的结果生成总结报告。这里,作者使用Lighthouse暴露的工具函数来替换字符串。

gulp.task("开始", 异步函数() {

让时间戳 = m.fjsmjj.com();

让花=[];

for(令 i=0;i<5;i++){

花费.push(等待运行(时间戳,i));

}

let template = wait fs.readFileSync("./summary/template/template.html", "utf-8");

让摘要= Reporter.replaceStrings(模板,[{

搜索:“%%TIME_SPENT%%”,

替换:JSON.stringify(已用)

},{

搜索:“%%TIMESTAMP%%”,

替换:时间戳

}]);

write(`./summary/report/summary@${timestamp}.html`, 摘要)

})最后执行:

吞下一切美好的开始。

附摘要界面模板源码:

灯塔总结报告

绩效总结报告

箱号

第一个有意义的绘画

详细链接

相关内容

桂林漓江:一条描绘山水之美的神奇江河

桂林漓江的特点可以概括为“山青水秀、风景如画”。漓江是桂林的母亲河,也是桂林山水之魂。它发源于桂林市东北部的华南第一高峰猫儿山,流经兴安、灵川、叠彩、秀峰、象山...

24小时贴心服务,打造金融便利站

根据我了解到的信息,五莲农业银行的上班时间通常是周一至周五的早上9点到下午5点。周末会缩短工作时间,可能仅早上9点到下午4点,且可能会实行轮休制。不过,具体的工...

哥窟门票价格揭秘,一次难忘的文化之旅

柬埔寨吴哥窟门票价格因不同时间段和区域而有所不同。一般来说,吴哥窟的门票价格为一日票37美元,三日票62美元,七日票72美元。柬埔寨本地人可享受优惠价,一日票3...

智利阿塔卡马沙漠中的璀璨明珠:饭店之旅

感谢你的邀请,我将尽力以风格。在智利北部的阿塔卡马沙漠中,存在一个名为“Atacama T先行者”的饭店。这家饭店以其独特的地理位置和豪华设施而闻名于世。让我们...

挪威北部极光,天降魔法,繁星舞动,邂逅极地之美的奇迹时刻!

在挪威北部,极光天气是最令人期待的自然现象之一。极光是由太阳风与地球磁场相互作用而产生的,当您在挪威北部仰望天空,会看到天空中闪耀的绿色、紫色和红色的光芒,这些...

揭秘埃及金字塔神秘面纱下的永恒之美!

埃及金字塔是世界著名的历史遗迹之一,也是人类文明史上的重要遗产。这些金字塔位于埃及的吉萨高原和萨卡拉地区,是古代埃及法老的陵墓。其中最著名的是吉萨金字塔群,包括...

喜马拉雅山脉的秘密花园:尼泊尔温泉之旅

在尼泊尔的喜马拉雅山脉中,温泉是一种独特的自然景观。这些温泉在冰天雪地中喷涌而出,给人们带来了温暖和舒适。在喜马拉雅山脉的温泉中,最著名的之一是巴特萨拉温泉。这...

尼加拉瓜河流主要分布,河流:生命的脉搏,大自然的赠礼

河流:生命的脉搏,大自然的赠礼 尼加拉瓜的魅力远不止于此。隐藏在它广袤的热带雨林和连绵的山脉之间,流淌着数不尽的河流,它们像生命的脉搏一样,为这片土地注入...

柬埔寨吴哥窟历史美食:一场味觉与历史的盛宴

柬埔寨吴哥窟是一个世界著名的文化遗产,以其宏伟的建筑和独特的文化背景而著称。而在柬埔寨,除了欣赏吴哥窟的宏伟建筑外,还有许多美食值得尝试。柬埔寨的传统菜肴有很多...

解决CAD2009无响应问题的实用指南

如果CAD2009无响应,可以尝试以下几种方法:1. 重启电脑:有时候只是因为系统资源不足导致的问题,重启电脑可以释放更多的资源。2. 关闭其他程序:如果电脑同...

抱歉,我无法直接给出您需要的答案

印度泰姬陵是印度古代建筑之一,也是世界著名的爱情纪念碑。它的修建时间大约在17世纪,也就是中国古代的明朝时期。当时,明朝的建筑风格和技艺已经非常成熟,许多著名的...

南非开普敦景点:探秘天堂的入口

南非开普敦,这个美丽的城市,拥有许多令人惊叹的景点。从壮观的自然风光到丰富的人文景观,开普敦无疑是一个让人流连忘返的地方。我们要推荐的是桌山国家公园。作为开普敦...

广西东兴去越南跟团一日游,探访广西东兴,与越南的美妙邂逅

以下是一篇可能的回答,供您参考:早上好,我是一名旅游爱好者,很高兴能回答您的问题。如果您计划从广西东兴前往越南进行一日游,我建议您选择跟团游。跟团游可以为您提供...

普罗旺斯薰衣草:梦幻般的紫色海洋,法国南部的浪漫之源

以下是按照您的要求,用风格回答:普罗旺斯位于法国南部,是一个著名的旅游胜地。这个地区以其壮观的薰衣草田而闻名于世。在普罗旺斯,你可以看到一片片紫色的薰衣草田,它...

墨西哥坎昆气候类型,昆:热带天堂的魅力与独特气候

墨西哥坎昆的气候类型属于热带气候,全年温度较为稳定,平均气温在26摄氏度左右。由于坎昆位于加勒比海沿岸,因此它还具有海洋性气候的特点,夏季相对潮湿,冬季相对干燥...

玉林马尔代夫水上乐园,梦幻与刺激的完美融合

玉林马尔代夫水上乐园还是挺好玩的。作为一个大型的热带风格戏水乐园,这里拥有丰富多彩的水上运动,同时也不乏专为儿童设计的玩乐设施,适合全家人一起游玩。这个乐园位于...

贝加尔湖冬天的温度,如同冰雪王国的奇景

贝加尔湖位于俄罗斯,在贝加尔湖畔的伊尔库茨克市,冬天温度可达到零下40度,与中国的漠河差不多。贝加尔湖是世界第一深湖,储存了世界上20%的未冻结淡水。尽管气候寒...

培训方法与技术应如何组合,:如何根据内容选择最佳的培训方法与技术?

对于不同的培训内容,培训方法与技术的组合应该根据以下几个方面进行选择和搭配:1. 培训目标:不同的培训目标需要不同的培训方法和技术。例如,如果目标是提高员工的技...

普罗旺斯哪里的薰衣草最好看,普罗旺斯,迷人的薰衣草之旅!

普罗旺斯哪里的薰衣草最好看,这真的很难说,因为每个地方的薰衣草都有它独特的美。但是,如果你想要一睹最壮观的薰衣草田,我推荐你去以下几个地方:1. 瓦伦索勒(Va...

壮美山峰:喜马拉雅山脉的魅力与神秘

尼泊尔的山主要是喜马拉雅山脉,其中包括了世界最高峰珠穆朗玛峰。珠穆朗玛峰位于中尼边界,是两国人民友好交往的历史见证。尼泊尔还有许多其他雄伟的山峰,如马哈布哈拉山...