Arkitektur
Mappar
| Mapp | Innehåll |
|---|---|
tests/ |
Ett modul per test, plus gemensamma hjälpfunktioner i utils.py |
helpers/ |
Testregister, inställningshantering och datamodeller |
engines/ |
Utdataformat: JSON, CSV, SQL, SQLite och Markdown |
locales/ |
Översättningar, en katalog per språk |
defaults/ |
Projektets standardinställningar |
data/ |
Referensdata, bland annat IP2Location |
docker/ |
Skript för att bygga och köra imagen |
Startpunkten är default.py i roten.
En körning, steg för steg
default.pytolkar kommandoraden iCommandLineOptionsoch läser in inställningarna.helpers/test_helper.pyöversätter testnumren till funktioner. Registret är tre uppslagstabeller:TEST_ALL_FUNCS(vad som finns),TEST_FUNCS(vad som körs fristående) ochTEST_USE_SITESPEED(vad som körs som insticksmodul i Sitespeed.io).- Testet körs och returnerar ett
Rating-objekt tillsammans med rådata. engines/skriver resultatet till valt format om-oangetts.
Testnumren
Numren definieras i helpers/test_helper.py som en tupel som packas upp mot range(33):
TEST_ALL = (TEST_UNKNOWN_00,
TEST_DEPRECATED, TEST_PAGE_NOT_FOUND,
...
TEST_PRIVACY,
TEST_DNS
) = range(33)
Positionen i tupeln är testnumret. Därför får ett pensionerat test aldrig tas bort ur listan. Då förskjuts alla nummer efter det, och historiska resultat på Webperf.se byter betydelse. Pensionerade platser fylls i stället med TEST_DEPRECATED.
Två sorters tester
Fristående tester gör sina egna anrop. Hit hör HTTP, e-post, DNS och Webbkoll.
Sitespeed-baserade tester körs som insticksmoduler i en gemensam körning av Sitespeed.io. Hit hör 404-sidan, standardfiler, tillgänglighetsredogörelsen, de tre valideringstesterna och Lighthouse. Var och en har en egen npm-modul, till exempel plugin-standard-files och plugin-css.
Det är därför en samlad körning är snabbare än summan av de enskilda: webbplatsen behöver bara laddas en gång.
Betyg
helpers/models.py innehåller Rating, som håller ett samlat betyg plus delbetyg för integritet och säkerhet, prestanda, tillgänglighet och standardefterlevnad. Varje test fyller i de delar det har något att säga om, och calculate_rating i tests/utils.py väger ihop dem.
Inställningen general.review.improve-only styr om granskningen tar med det som redan fungerar eller bara det som kan bli bättre.
Att läsa vidare i koden
Vill du förstå hur ett test ser ut inifrån är tests/energy_efficiency.py en bra början: det är kort, har inga externa beroenden och visar hela kedjan från mätvärde till betyg.