Gå till innehållet

Utöka Webperf Core själv

De sexton testerna täcker det som är gemensamt för de flesta webbplatser. Men en del krav är dina egna: en intern kodstandard, en regel som bara gäller ert publiceringsverktyg, en policy som ska gälla alla kundwebbplatser. Sådant kan du lägga till själv.

Det här är den mest avancerade sidan i dokumentationen. De flesta behöver den aldrig. Men den som behöver den brukar behöva den på riktigt.

Behöver du verkligen ett eget test?

Fråga dig först om något av det här räcker:

  • Inställningar. Flera tester går att styra utan kod. Se konfiguration.
  • Ett urval av befintliga tester. Kör bara de som mäter det du bryr dig om: -t 22,9,18.
  • Granskningen i stället för betyget. Med -r får du en lista över konkreta problem, som du kan bearbeta med egna verktyg.
  • Rådata. --setting general.review.data=true ger dig bedömningen som JSON, och -o resultat.json sparar hela resultatet. Ofta är det enklare att analysera utdata än att bygga in en ny kontroll.

Återstår det något som ingen befintlig kontroll ser åt dig? Då är ett eget test rätt väg.

Två sätt att utöka

Fristående test

Gör sina egna anrop. Passar när du granskar DNS, e-post, svarsrubriker eller något annat som inte kräver att sidan renderas i en webbläsare. Skrivs i Python, i tests/.

Insticksmodul i Sitespeed.io

Körs som en del av den gemensamma Sitespeed-körningen och får tillgång till den renderade sidan. Passar när du behöver se det färdiga innehållet, och innebär att din kontroll inte kostar någon extra sidladdning. Skrivs i JavaScript och publiceras som ett npm-paket. Se plugin-standard-files och plugin-css för fungerande exempel.

Resten av sidan handlar om fristående tester, som är den vanligare vägen.

Behålla ändringen eller bidra med den?

Två helt olika ambitionsnivåer, och det lönar sig att välja tidigt.

Krav Eget bruk Bidra uppströms
Testnummer Vilket ledigt som helst Samordnas med projektet
Översättningar Bara ditt eget språk Alla språk som projektet stöder
Hjälptext Trevligt att ha Krävs
Regressionstest Valfritt Krävs
Underhåll Ditt, vid varje uppdatering Projektets

En egen fork kostar underhåll

Lägger du till ett test i din egen kopia får du slå ihop dina ändringar med varje ny version av Webperf Core. Är kontrollen användbar för fler än dig är det nästan alltid billigare att bidra med den och slippa underhållet.

Steg för steg

1. Ta ett testnummer

Lägg till en konstant sist i tupeln i helpers/test_helper.py och räkna upp range():

TEST_ALL = (...,
            TEST_PRIVACY,
            TEST_DNS,
            TEST_MITT_TEST
            ) = range(34)

Lägg aldrig in numret mitt i listan. Positionen är testnumret. Allt efter skulle förskjutas och byta betydelse i historiska resultat. Se arkitektur.

2. Registrera funktionen

Ditt test ska in i TEST_ALL_FUNCS och, om det körs fristående, i TEST_FUNCS:

from tests.mitt_test import run_test as run_test_mitt_test

TEST_ALL_FUNCS = {
    ...
    TEST_MITT_TEST: run_test_mitt_test
}

3. Skriv testet

Skapa tests/mitt_test.py med en run_test:

def run_test(global_translation, url):
    """
    Returnerar en tupel med Rating och rådata.
    """
    local_translation = get_translation(
        'mitt_test',
        get_config('general.language'))

    rating = Rating(
        global_translation,
        get_config('general.review.improve-only'))

    # ... gör din kontroll ...

    return (rating, result_dict)

Kan webbplatsen inte nås ska du returnera ett Rating med overall_review satt till TEXT_SITE_UNAVAILABLE i stället för att låta ett undantag bubbla upp. Ett test som kraschar stoppar hela körningen för den webbplatsen, även de tester som hade fungerat.

4. Sätt betyget

Använd Rating och fyll bara i de delbetyg ditt test faktiskt mäter: samlat betyg, integritet och säkerhet, prestanda, tillgänglighet eller standardefterlevnad. Ett test som inte säger något om prestanda ska inte sätta ett prestandabetyg. Annars drar det ned ett delbetyg det aldrig mätt.

5. Lägg till översättningar

Skapa locales/en/LC_MESSAGES/mitt_test.po och motsvarande för de språk du behöver. Alla strängar som visas för användaren ska gå via översättningen. Se översättningar.

Bygger du bara för egen del räcker ditt eget språk. Ska bidraget uppströms behöver samtliga språk fyllas i.

6. Lägg till inställningar

Standardvärden hör hemma i defaults/settings.json under tests.mitt-test., och läses med get_config('tests.mitt-test.nyckel'). Då kan testet styras med --setting och settings.json som alla andra.

7. Lägg till hjälptext

Testet ska synas när någon kör python default.py -t ?. Lägg till en TEXT_TEST_VALID_ARGUMENTS_MITT_TEST-sträng i språkfilerna och skriv ut den i show_test_help i default.py.

Locale-filerna är facit för testnamn

Den strängen är inte bara hjälptext. Den är testets kanoniska namn. Det är den andra system läser för att visa namnet. Bland dem /v1/tests på api.webperf.se och den här dokumentationen. Formulera den som du vill att testet ska heta.

8. Skriv ett regressionstest

Lägg ett arbetsflöde i .github/workflows/ efter mönstret från de befintliga. Det ska köra testet mot en känd webbplats och jämföra resultatet. Krävs för bidrag uppströms. Det är en god idé även för eget bruk. Så upptäcker du att en uppdatering av Webperf Core ändrat ditt tests utfall.

Se även