如何使用NodeJS + Lighthouse + Gulp构建自动化网站性能测试工具
本文主要介绍如何使用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`, 摘要)
})最后执行:
吞下一切美好的开始。
附摘要界面模板源码:
身体{
字体系列:无衬线;
}
桌子{
边距:自动;
}
tr {
边框:1px纯灰色;
}
h1 {
文本对齐:居中;
边距:30px 自动 50px 自动
}
箱号 |
第一个有意义的绘画 |
详细链接 |
---|
让时间花费 = %%TIME_SPENT%%;
让时间戳 = %%TIMESTAMP%%;
let tableBody = document.getElementById("tableBody");
让内容 = "";
for(让 i=0; i < 花费的时间长度; i++) {
含量+=`
${i+1}
${timespent[i]}
}
让总计 = timespent.reduce((i, j) => {
返回 i + j;
})
let count = timespent.filter(function(i) { return i}).length
内容+=`
平均
${总计/计数}
tableBody.innerHTML = 内容;
桂林漓江:一条描绘山水之美的神奇江河
桂林漓江的特点可以概括为“山青水秀、风景如画”。漓江是桂林的母亲河,也是桂林山水之魂。它发源于桂林市东北部的华南第一高峰猫儿山,流经兴安、灵川、叠彩、秀峰、象山...
24小时贴心服务,打造金融便利站
根据我了解到的信息,五莲农业银行的上班时间通常是周一至周五的早上9点到下午5点。周末会缩短工作时间,可能仅早上9点到下午4点,且可能会实行轮休制。不过,具体的工...
哥窟门票价格揭秘,一次难忘的文化之旅
柬埔寨吴哥窟门票价格因不同时间段和区域而有所不同。一般来说,吴哥窟的门票价格为一日票37美元,三日票62美元,七日票72美元。柬埔寨本地人可享受优惠价,一日票3...
智利阿塔卡马沙漠中的璀璨明珠:饭店之旅
感谢你的邀请,我将尽力以风格。在智利北部的阿塔卡马沙漠中,存在一个名为“Atacama T先行者”的饭店。这家饭店以其独特的地理位置和豪华设施而闻名于世。让我们...
挪威北部极光,天降魔法,繁星舞动,邂逅极地之美的奇迹时刻!
在挪威北部,极光天气是最令人期待的自然现象之一。极光是由太阳风与地球磁场相互作用而产生的,当您在挪威北部仰望天空,会看到天空中闪耀的绿色、紫色和红色的光芒,这些...
揭秘埃及金字塔神秘面纱下的永恒之美!
埃及金字塔是世界著名的历史遗迹之一,也是人类文明史上的重要遗产。这些金字塔位于埃及的吉萨高原和萨卡拉地区,是古代埃及法老的陵墓。其中最著名的是吉萨金字塔群,包括...
喜马拉雅山脉的秘密花园:尼泊尔温泉之旅
在尼泊尔的喜马拉雅山脉中,温泉是一种独特的自然景观。这些温泉在冰天雪地中喷涌而出,给人们带来了温暖和舒适。在喜马拉雅山脉的温泉中,最著名的之一是巴特萨拉温泉。这...
尼加拉瓜河流主要分布,河流:生命的脉搏,大自然的赠礼
河流:生命的脉搏,大自然的赠礼 尼加拉瓜的魅力远不止于此。隐藏在它广袤的热带雨林和连绵的山脉之间,流淌着数不尽的河流,它们像生命的脉搏一样,为这片土地注入...
柬埔寨吴哥窟历史美食:一场味觉与历史的盛宴
柬埔寨吴哥窟是一个世界著名的文化遗产,以其宏伟的建筑和独特的文化背景而著称。而在柬埔寨,除了欣赏吴哥窟的宏伟建筑外,还有许多美食值得尝试。柬埔寨的传统菜肴有很多...
解决CAD2009无响应问题的实用指南
如果CAD2009无响应,可以尝试以下几种方法:1. 重启电脑:有时候只是因为系统资源不足导致的问题,重启电脑可以释放更多的资源。2. 关闭其他程序:如果电脑同...
抱歉,我无法直接给出您需要的答案
印度泰姬陵是印度古代建筑之一,也是世界著名的爱情纪念碑。它的修建时间大约在17世纪,也就是中国古代的明朝时期。当时,明朝的建筑风格和技艺已经非常成熟,许多著名的...
南非开普敦景点:探秘天堂的入口
南非开普敦,这个美丽的城市,拥有许多令人惊叹的景点。从壮观的自然风光到丰富的人文景观,开普敦无疑是一个让人流连忘返的地方。我们要推荐的是桌山国家公园。作为开普敦...
广西东兴去越南跟团一日游,探访广西东兴,与越南的美妙邂逅
以下是一篇可能的回答,供您参考:早上好,我是一名旅游爱好者,很高兴能回答您的问题。如果您计划从广西东兴前往越南进行一日游,我建议您选择跟团游。跟团游可以为您提供...
普罗旺斯薰衣草:梦幻般的紫色海洋,法国南部的浪漫之源
以下是按照您的要求,用风格回答:普罗旺斯位于法国南部,是一个著名的旅游胜地。这个地区以其壮观的薰衣草田而闻名于世。在普罗旺斯,你可以看到一片片紫色的薰衣草田,它...
墨西哥坎昆气候类型,昆:热带天堂的魅力与独特气候
墨西哥坎昆的气候类型属于热带气候,全年温度较为稳定,平均气温在26摄氏度左右。由于坎昆位于加勒比海沿岸,因此它还具有海洋性气候的特点,夏季相对潮湿,冬季相对干燥...
玉林马尔代夫水上乐园,梦幻与刺激的完美融合
玉林马尔代夫水上乐园还是挺好玩的。作为一个大型的热带风格戏水乐园,这里拥有丰富多彩的水上运动,同时也不乏专为儿童设计的玩乐设施,适合全家人一起游玩。这个乐园位于...
贝加尔湖冬天的温度,如同冰雪王国的奇景
贝加尔湖位于俄罗斯,在贝加尔湖畔的伊尔库茨克市,冬天温度可达到零下40度,与中国的漠河差不多。贝加尔湖是世界第一深湖,储存了世界上20%的未冻结淡水。尽管气候寒...
培训方法与技术应如何组合,:如何根据内容选择最佳的培训方法与技术?
对于不同的培训内容,培训方法与技术的组合应该根据以下几个方面进行选择和搭配:1. 培训目标:不同的培训目标需要不同的培训方法和技术。例如,如果目标是提高员工的技...
普罗旺斯哪里的薰衣草最好看,普罗旺斯,迷人的薰衣草之旅!
普罗旺斯哪里的薰衣草最好看,这真的很难说,因为每个地方的薰衣草都有它独特的美。但是,如果你想要一睹最壮观的薰衣草田,我推荐你去以下几个地方:1. 瓦伦索勒(Va...
壮美山峰:喜马拉雅山脉的魅力与神秘
尼泊尔的山主要是喜马拉雅山脉,其中包括了世界最高峰珠穆朗玛峰。珠穆朗玛峰位于中尼边界,是两国人民友好交往的历史见证。尼泊尔还有许多其他雄伟的山峰,如马哈布哈拉山...