Gå till innehållet

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

  1. default.py tolkar kommandoraden i CommandLineOptions och läser in inställningarna.
  2. 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) och TEST_USE_SITESPEED (vad som körs som insticksmodul i Sitespeed.io).
  3. Testet körs och returnerar ett Rating-objekt tillsammans med rådata.
  4. engines/ skriver resultatet till valt format om -o angetts.

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.

Se även