Сервіс Lighthouse
Сервіс WebdriverIO, який дозволяє вам запускати тести доступності та продуктивності за допомогою Google Lighthouse.
Примітка: цей сервіс наразі підтримує лише тести, що виконуються на Google Chrome або Chromium! Зважаючи на те, що більшість хмарних постачальників не надають доступ до Chrome DevTools Protocol, цей сервіс зазвичай працює лише при локальному запуску тестів або через Selenium Grid версії 4 або вище.
Встановлення
Найпростіший спосіб — тримати @wdio/lighthouse-service як dev-залежність у вашому package.json, через:
npm install @wdio/lighthouse-service --save-dev
Інструкції щодо встановлення WebdriverIO можна знайти тут.
Конфігурація
Щоб використовувати сервіс, вам просто потрібно додати сервіс до списку сервісів у вашому wdio.conf.js, наприклад:
// wdio.conf.js
export const config = {
// ...
services: ['lighthouse'],
// ...
};
Використання
@wdio/lighthouse-service дозволяє запускати тести доступності та продуктивності Google Lighthouse через WebdriverIO.
Тестування продуктивності
Сервіс Lighthouse дозволяє збирати дані про продуктивність кожного завантаження сторінки або переходу на сторінку, викликаного кліком. Щоб увімкнути його, викличте browser.enablePerformanceAudits(<options>). Після завершення збору всіх необхідних даних про продуктивність вимкніть його, щоб повернути налаштування обмеження, наприклад:
import assert from 'node:assert'
describe('JSON.org page', () => {
before(async () => {
await browser.enablePerformanceAudits()
})
it('should load within performance budget', async () => {
/**
* this page load will take a bit longer as the DevTools service will
* capture all metrics in the background
*/
await browser.url('http://json.org')
let metrics = await browser.getMetrics()
assert.ok(metrics.speedIndex < 1500) // check that speedIndex is below 1.5ms
let score = await browser.getPerformanceScore() // get Lighthouse Performance score
assert.ok(score >= .99) // Lighthouse Performance score is at 99% or higher
$('=Esperanto').click()
metrics = await browser.getMetrics()
assert.ok(metrics.speedIndex < 1500)
score = await browser.getPerformanceScore()
assert.ok(score >= .99)
})
after(async () => {
await browser.disablePerformanceAudits()
})
})
Доступні наступні команди з їхніми результатами:
getMetrics
Отримує найчастіше використовувані показники продуктивності, наприклад:
console.log(await browser.getMetrics())
/**
* { timeToFirstByte: 566,
* serverResponseTime: 566,
* domContentLoaded: 3397,
* firstVisualChange: 2610,
* firstPaint: 2822,
* firstContentfulPaint: 2822,
* firstMeaningfulPaint: 2822,
* largestContentfulPaint: 2822,
* lastVisualChange: 15572,
* interactive: 6135,
* load: 8429,
* speedIndex: 3259,
* totalBlockingTime: 31,
* maxPotentialFID: 161,
* cumulativeLayoutShift: 2822 }
*/
getDiagnostics
Отримує корисну діагностику про завантаження сторінки.
console.log(await browser.getDiagnostics())
/**
* { numRequests: 8,
* numScripts: 0,
* numStylesheets: 0,
* numFonts: 0,
* numTasks: 237,
* numTasksOver10ms: 5,
* numTasksOver25ms: 2,
* numTasksOver50ms: 2,
* numTasksOver100ms: 0,
* numTasksOver500ms: 0,
* rtt: 147.20600000000002,
* throughput: 47729.68474448835,
* maxRtt: 176.085,
* maxServerLatency: 1016.813,
* totalByteWeight: 62929,
* totalTaskTime: 254.07899999999978,
* mainDocumentTransferSize: 8023 }
*/
getMainThreadWorkBreakdown
Повертає список з розбивкою всіх завдань головного потоку та їх загальною тривалістю.
console.log(await browser.getMainThreadWorkBreakdown())
/**
* [ { group: 'styleLayout', duration: 130.59099999999998 },
* { group: 'other', duration: 44.819 },
* { group: 'paintCompositeRender', duration: 13.732000000000005 },
* { group: 'parseHTML', duration: 3.9080000000000004 },
* { group: 'scriptEvaluation', duration: 2.437999999999999 },
* { group: 'scriptParseCompile', duration: 0.20800000000000002 } ]
*/
getPerformanceScore
Повертає оцінку продуктивності Lighthouse, яка є зваженим середнім наступних метрик: firstContentfulPaint, speedIndex, largestContentfulPaint, cumulativeLayoutShift, totalBlockingTime, interactive, maxPotentialFID або cumulativeLayoutShift.
console.log(await browser.getPerformanceScore())
/**
* 0.897826278457836
*/