Testarea cu curl testează lucrul greșit
O cerere de contor care sosește fără identitate de browser scrie în două dintre cele douăsprezece locuri pe care le atinge în mod normal o vizită numărată. Răspunde cu 200. Returnează o imagine de contor validă. Nicăieri nu scrie că zece din cele douăsprezece au fost sărite.
La ce folosește filtrul și ce costă
Contoarele de aici separă boții de oameni, iar separarea se face după identitatea pe care clientul și-o declară. Lista de marcaje este scurtă și intenționat lipsită de ambiguitate, iar curl/ se află pe ea. La fel și o identitate goală, pe motiv că o cerere fără niciun user agent nu este un browser.
Ambele sunt corecte. Serviciul nu greșește când tratează un curl simplu ca pe un bot; exact asta și este. Problema este că persoana care rulează curl de obicei nu testează dacă funcționează detectarea boților. Testează dacă funcționează numărarea și, fără să-și dea seama, a cerut calea pentru boți.
Ce obține: totalul de accesări al zilei crește cu unu, coloana de boți crește cu unu, și atât. Niciun rând de vizitator unic, deci nimic despre vizitatori. Nicio intrare în lista celor online. Nicio pagină, nicio țară, niciun browser, niciun sistem de operare, niciun dispozitiv, nicio oră. Părțile sistemului pe care cineva ar vrea de fapt să le verifice sunt exact părțile care nu au rulat.
Eșecul nu are niciun simptom
Aceasta este partea asupra căreia merită să zăbovim. Un test care nu măsoară nimic se dă de obicei singur de gol: o eroare, un rezultat gol, un zero acolo unde ar trebui să fie un număr. Aici răspunsul este 200. Corpul este o imagine de contor reală, de 3.361 de octeți. Numărul din imagine chiar a crescut, pentru că totalul de accesări este unul dintre cele două lucruri care s-au întâmplat.
Așa că proba arată ca o reușită. Tot ce se sprijină pe ea — „calea de numărare funcționează”, „noua coloană se scrie”, „modificarea nu a stricat nimic” — este o concluzie trasă dintr-o rulare care a sărit peste cea mai mare parte a codului pe care trebuia să-l pună la lucru.
S-a întâmplat chiar în timp ce scriam asta
Prima versiune a măsurătorii din spatele acestui articol a cerut /c/<number>. Aceasta nu este adresa unei imagini de contor; cea reală conține designul și o extensie, /c/<number>-<design>.png. Cererea a returnat 404.
Scriptul a afișat, de trei ori: scrie în 0 din 12 locuri. Ceea ce este adevărat și arată la prima vedere exact ca un filtru de boți funcțional. Codul 404 era în ieșire, în același tabel, cu un rând deasupra zerourilor. A rămas necitit un minut, pentru că zerourile erau partea interesantă și corespundeau așteptărilor.
Este aceeași greșeală ca cea despre care vorbește acest articol, cu un nivel mai sus: o măsurătoare care a dat un răspuns plauzibil dintr-un motiv pe care nu l-a verificat nimeni. A fost prinsă doar pentru că scriptul a numărat rânduri în douăsprezece tabele în loc să aibă încredere în cerere — o cerere care eșuează și o cerere filtrată arată identic din exterior.
Ce trebuie făcut în schimb
Trimiteți o identitate de browser. Un singur flag, -A cu un șir user agent real, și aceeași cerere scrie în zece dintre cele douăsprezece locuri în loc de două.
Și numărați ceva de partea cealaltă. Codul de răspuns spune că cererea a ajuns; nu spune nimic despre ce a făcut cererea. Pentru orice caz în care rostul este efectul secundar — un contor, o coadă, o linie de jurnal, un rând undeva — proba trebuie să se uite la efectul secundar. Numărătorile dinainte și de după, în fiecare tabel implicat, au cerut aici douăzeci de linii și au transformat de două ori un rezultat ambiguu într-unul lipsit de ambiguitate: o dată pentru filtru, o dată pentru 404.
Două dintre cele douăsprezece locuri au rămas goale chiar și cu identitate de browser: coloana de boți, pe bună dreptate, și lista surselor de trimitere, care nu a înregistrat sursa de trimitere transmisă. Al doilea caz nu este explicat aici, pentru că nu a fost încă urmărit până la capăt. Îl raportăm pentru că alternativa ar fi să publicăm un tabel cu unsprezece rânduri și să spunem că are douăsprezece.