Testovanie cez curl testuje nesprávnu vec
V tomto článku
Požiadavka na počítadlo prichádzajúca bez identity prehliadača zapisuje do dvoch z dvanástich miest, ktorých sa započítaná návšteva bežne dotýka. Odpovedá stavom 200. Vracia platný obrázok počítadla. Nič nikde nehovorí, že desať z dvanástich sa vynechalo.
Na čo je filter a čo stojí
Tunajšie počítadlá oddeľujú roboty od ľudí a oddelenie sa robí podľa identity, ktorú klient sám uvádza. Zoznam rozpoznávacích reťazcov je krátky a zámerne jednoznačný a curl/ je v ňom. Rovnako aj prázdna identita s odôvodnením, že požiadavka úplne bez user agenta nie je prehliadač.
Oboje je správne. Služba sa nemýli, keď považuje obyčajný curl za robota; tým aj je. Problémom je, že človek ovládajúci curl zvyčajne netestuje funkčnosť rozpoznávania robotov. Testuje funkčnosť počítania a potichu si vyžiadal vetvu pre roboty.
Čo dostane: celkový počet zobrazení dňa stúpne o jedno, stĺpec botov stúpne o jedno a to je všetko. Žiadny riadok jedinečného návštevníka, teda nič o návštevníkoch. Žiadny záznam v zozname online. Žiadna stránka, krajina, prehliadač, operačný systém, zariadenie ani hodina. Práve tie časti systému, ktoré by chcel niekto naozaj overiť, sa nespustili.
Zlyhanie nemá príznak
Nad týmto sa oplatí zastaviť. Test, ktorý nič nemeria, sa zvyčajne oznámi: chyba, prázdny výsledok, nula namiesto čísla. Tu je odpoveď 200. Telo je skutočný obrázok počítadla, má 3 361 bajtov. Číslo na obrázku sa dokonca zvýšilo, pretože celkový počet zobrazení je jednou z dvoch vecí, ktoré sa naozaj stali.
Skúška preto vyzerá úspešne. Všetko po nej — „mechanizmus počítania funguje“, „nový stĺpec sa zapisuje“, „zmena nič nepokazila“ — je záverom z behu, ktorý vynechal väčšinu kódu, ktorý mal preveriť.
Stalo sa to pri písaní tohto textu
Prvá verzia merania pre tento príspevok vyžiadala /c/<number>. To nie je adresa obrázka počítadla; skutočná obsahuje dizajn a príponu, /c/<number>-<design>.png. Požiadavka vrátila 404.
Skript trikrát vypísal: zapisuje do 0 z 12 miest. Čo je pravda a zároveň presne to, ako by na prvý pohľad vyzeral funkčný filter botov. Kód 404 bol vo výstupe v tej istej tabuľke o riadok nad nulami. Minútu zostal neprečítaný, pretože nuly boli zaujímavé a zodpovedali očakávaniu.
Je to tá istá chyba, o ktorej je tento príspevok, o úroveň vyššie: meranie, ktoré vytvorilo vierohodnú odpoveď z dôvodu, ktorý nikto neoveril. Odhalilo sa to iba preto, že skript počítal riadky v dvanástich tabuľkách namiesto dôvery v požiadavku — zlyhaná a filtrovaná požiadavka vyzerajú zvonka rovnako.
Čo urobiť namiesto toho
Odošlite identitu prehliadača. Jeden príznak, -A so skutočným reťazcom user agent, a tá istá požiadavka zapisuje do desiatich z dvanástich miest namiesto dvoch.
A na druhej strane niečo spočítajte. Kód odpovede hovorí, že požiadavka dorazila; nič nehovorí o tom, čo urobila. Pri čomkoľvek, kde je zmyslom vedľajší účinok — počítadlo, front, riadok protokolu, riadok niekde — musí skúška sledovať tento účinok. Počty pred a po vo všetkých dotknutých tabuľkách tu zabrali dvadsať riadkov a dvakrát zmenili nejednoznačný výsledok na jednoznačný: raz pre filter, raz pre 404.
Dve z dvanástich miest zostali prázdne aj s identitou prehliadača: správne stĺpec botov a zoznam odkazujúcich stránok, ktorý nezaznamenal odoslanú hodnotu odkazujúcej stránky. Druhý prípad sa tu nevysvetľuje, pretože ešte nebol preskúmaný. Uvádza sa, pretože alternatívou je zverejniť tabuľku s jedenástimi riadkami a tvrdiť, že ich má dvanásť.