Nette Tester: HTTP testování ještě nikdy nebylo tak jednoduché
Kdy jste naposledy změnili konfiguraci serveru, upravili
.htaccess
nebo přepsali nginx pravidla? A zkontrolovali jste,
jestli se tím náhodou nerozbila přesměrování, nepřestal být dostupný
robots.txt nebo se zpřístupnil skrytý adresář pro nepovolané?
A kontrolujete to automatizovaně, nebo jen web ručně proklikáte a doufáte,
že je vše v pořádku?

S novou třídou HttpAssert
v Nette Tester 2.5.6 můžete
všechny tyto kritické kontroly automatizovat a už nikdy se nemusíte bát,
že vám nějaká změna konfigurace rozbije web.
Představte si, že po každé změně nginx konfigurace automaticky ověříte:
// Kritické cesty jsou stále přístupné
HttpAssert::fetch('https://example.com/robots.txt')
->expectCode(200)
->expectHeader('Content-Type', contains: 'text/plain');
// Admin sekce je správně chráněna
HttpAssert::fetch('https://example.com/admin')
->expectCode(403);
// API endpoint funguje
HttpAssert::fetch('https://example.com/api/health')
->expectCode(200)
->expectBody(contains: '"status":"ok"');
Všechny způsoby validace na jednom místě
HttpAssert
umožňuje jednoduše provádět HTTP požadavky a
ověřovat jejich stavové kódy, hlavičky i obsah odpovědi. Metoda
fetch()
vrátí instanci HttpAssert
pro následné
ověřování pomocí fluent interface. Můžete používat matches, které
znáte z Assert::match().
HttpAssert::fetch('https://api.example.com/data')
// Stavové kódy
->expectCode(200) // přesný kód
// Hlavičky všemi způsoby
->expectHeader('Content-Type') // hlavička musí existovat
->expectHeader('Content-Type', 'application/json') // přesná hodnota
->expectHeader('Content-Type', contains: 'json') // obsahuje text
->expectHeader('Server', matches: 'nginx %a%') // pattern matching
// Tělo odpovědi
->expectBody('OK') // přesná hodnota
->expectBody(contains: '"success": true') // obsahuje text
->expectBody(matches: '%A%"users":[%a%]%A%'); // odpovídá vzoru
K dispozici jsou i deny* metody podporují stejné možnosti jako jejich expect* protějšky:
HttpAssert::fetch('https://api.example.com/data')
->denyCode(200) // nesmí být 200
->denyHeader('Content-Type') // hlavička nesmí existovat
->denyHeader('Content-Type', contains: 'json') // neobsahuje text
->denyHeader('Server', matches: 'nginx %a%') // neodpovídá vzoru
->denyBody('OK') // tělo nesmí mít hodnotu
->denyBody(contains: '"success": true') // neobsahuje text
->denyBody(matches: '~exception|fatal~i'); // neodpovídá vzoru
Callback funkce pro pokročilé
Někdy potřebujete víc než jen jednoduchá porovnání. Proto HttpAssert podporuje callback funkce u všech ověřovacích metod. Můžete si napsat vlastní validační logiku a stále využívat elegantní API:
HttpAssert::fetch('https://api.example.com/data')
->expectCode(fn($code) => $code === 200 || $code === 201)
->expectHeader('Content-Length', fn($length) => $length > 1000)
->expectBody(fn($body) => json_decode($body) !== null);
Inteligentní práce s přesměrováními
Máte plnou kontrolu nad redirecty – můžete je sledovat nebo testovat samostatně:
// Testovat redirect bez následování
HttpAssert::fetch('https://example.com/old-blog', follow: false)
->expectCode(301)
->expectHeader('Location', 'https://example.com/blog');
// Sledovat redirecty až do konce
HttpAssert::fetch('https://example.com/old-blog', follow: true)
->expectCode(200)
->expectBody(contains: 'Welcome to our new blog');
Flexibilní konfigurace požadavků
Ať už testujete GET, POST, PUT, DELETE nebo jakoukoliv jinou HTTP metodu, HttpAssert si s tím poradí. A samozřejmě můžete posílat i tělo požadavku, hlavičky nebo cookies:
HttpAssert::fetch(
'https://api.example.com/protected',
method: 'POST',
headers: [
'Authorization' => 'Bearer ' . $token, // asociativní pole
'Accept: application/json', // nebo jako string
],
cookies: ['session' => $sessionId],
body: json_encode($data)
)
->expectCode(201)
->expectBody(contains: 'created');
Srozumitelné chybové zprávy
Když test selže, HttpAssert
vám řekne přesně, co se
pokazilo:
Expected HTTP status code 200 but got 404
Header 'Content-Type' should contain 'json' but was 'text/html'
Body should contain 'success'
Co ještě nového v Tester 2.5.6?
Kromě HttpAssert
přináší verze 2.5.6 také podporu pro
nadcházející PHP 8.5, které vyjde na konci roku. Nette Tester tak zůstává
vždy o krok napřed a připravený na nejnovější verze PHP.
Vyzkoušejte si HttpAssert
a dejte nám vědět, jak se
vám líbí!
Chcete-li odeslat komentář, přihlaste se