Guzzle nodrošina vairākus rīkus, kas ļauj viegli izspēlēt HTTP slāni bez nepieciešamības sūtīt pieprasījumus internetā.
Testējot HTTP klientus, bieži ir nepieciešams simulēt īpašus scenārijus, piemēram. sekmīgas atbildes atgriešana, kļūdas atgriešana vai konkrētu atbildes signālu atgriešana. atbildes noteiktā secībā. Tā kā vienības testiem ir jābūt paredzamiem, viegli un ātra palaišana, testēšana ar faktisko attālo API ir testēšanas smārds.
Guzzle nodrošina izspēles apstrādātāju, ko var izmantot, lai izpildītu HTTP pieprasījumus ar atbildi vai izņēmumu, pārvietojot atgrieztās vērtības no rindas.
use GuzzleHttp\Client;
use GuzzleHttp\Handler\MockHandler;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Psr7\Response;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Exception\RequestException;
// Create a mock and queue two responses.
$mock = new MockHandler([
new Response(200, ['X-Foo' => 'Bar'], 'Hello, World'),
new Response(202, ['Content-Length' => 0]),
new RequestException('Error Communicating with Server', new Request('GET', 'test'))
]);
$handlerStack = HandlerStack::create($mock);
$client = new Client(['handler' => $handlerStack]);
// The first request is intercepted with the first response.
$response = $client->request('GET', '/');
echo $response->getStatusCode();
//> 200
echo $response->getBody();
//> Hello, World
// The second request is intercepted with the second response.
echo $client->request('GET', '/')->getStatusCode();
//> 202
// Reset the queue and queue up a new response
$mock->reset();
$mock->append(new Response(201));
// As the mock was reset, the new response is the 201 CREATED,
// instead of the previously queued RequestException
echo $client->request('GET', '/')->getStatusCode();
//> 201
Ja rindā vairs nav atbilžu un tiek nosūtīts pieprasījums, tiek izmests OutOfBoundsException
.
Lietojot, piemēram, Mock
apstrādātāju, bieži vien ir nepieciešams zināt, vai.
vai pieprasījumi, kurus bija paredzēts nosūtīt, tika nosūtīti tieši tā, kā bijāt iecerējis. Lai gan mock
apstrādātājs atbild ar izspēlētu atbildi, vēstures starpprogrammatūra saglabā
klienta nosūtīto pieprasījumu vēsturi.
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Middleware;
$container = [];
$history = Middleware::history($container);
$handlerStack = HandlerStack::create();
// or $handlerStack = HandlerStack::create($mock); if using the Mock handler.
// Add the history middleware to the handler stack.
$handlerStack->push($history);
$client = new Client(['handler' => $handlerStack]);
$client->request('GET', 'http://httpbin.org/get');
$client->request('HEAD', 'http://httpbin.org/get');
// Count the number of transactions
echo count($container);
//> 2
// Iterate over the requests and responses
foreach ($container as $transaction) {
echo $transaction['request']->getMethod();
//> GET, HEAD
if ($transaction['response']) {
echo $transaction['response']->getStatusCode();
//> 200, 200
} elseif ($transaction['error']) {
echo $transaction['error'];
//> exception
}
var_dump($transaction['options']);
//> dumps the request options of the sent request.
}
Testējot tīmekļa pakalpojuma klientu, gandrīz vienmēr ir pietiekami izmantot izspēles atbildes. Īstenojot pielāgotus HTTP apstrādātājus, jūs būs nepieciešams sūtīt faktiskus HTTP pieprasījumus, lai apstrādātāju varētu pietiekami pārbaudīt. Tomēr labākā prakse ir sazināties ar vietējo tīmekļa serveri, nevis serveri. izmantojot internetu.
Brīdinājums
Guzzle izstrādātājiem tiek nodrošināta šāda funkcionalitāte.
izstrādāt HTTP apstrādātājus. Nav solīta atpakaļejošā savietojamība.
kad runa ir par node.js testu serveri vai GuzzleHttp\Tests\Server
.
klase. Ja izmantojat testa serveri vai Server
klasi ārpus
guzzlehttp/guzzle, tad jums būs jākonfigurē automātiskā ielādēšana un
jānodrošina, ka tīmekļa serveris tiek palaists manuāli.
Padoms
Šis testa tīmekļa serveris gandrīz nekad nav jāizmanto. Jums vienmēr vajadzētu tikai apsvērt tā izmantošanu, izstrādājot HTTP apstrādātājus. Testa tīmekļa serveris nav nepieciešams, lai izspēlētu pieprasījumus. Šim nolūkam izmantojiet Mock handler un vēstures starpprogrammatūru.
Guzzle tiek piegādāts ar mezgla.js testa serveri, kas saņem pieprasījumus un atgriež atbildes no rindas. Testa serveris piedāvā vienkāršu API, ko izmanto, lai atbildēm un pārbaudītu saņemtos pieprasījumus.
Jebkura darbība ar Serveris
objektu nodrošinās, ka.
serveris darbojas, un nogaidīs, kamēr tas varēs saņemt pieprasījumus, un tad
atgriežot.
GuzzleHttp\Tests\Server
nodrošina statisku saskarni ar testa serveri. Jūs
var izveidot rindā HTTP atbildi vai atbilžu masīvu, izsaucot
Server::enqueue()
. Šī metode pieņem masīvu
Psr\Http\Message\ResponseInterface
un Exception
objektu.
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Response;
use GuzzleHttp\Tests\Server;
// Start the server and queue a response
Server::enqueue([
new Response(200, ['Content-Length' => 0])
]);
$client = new Client(['base_uri' => Server::$url]);
echo $client->request('GET', '/foo')->getStatusCode();
// 200
Kad testa serverī atbilde ir gaidīšanas rindā, testa serveris noņem visus iepriekš rindā atstātās atbildes. Kad serveris saņem pieprasījumus, rindā atstātās atbildes tiek noņemtas no rindas un atdotas atpakaļ pieprasījumam. Kad rinda ir tukša, serveris tiks atgriezta atbilde 500.
Jūs varat pārbaudīt servera saņemtos pieprasījumus, izsaucot Server::received()
.
foreach (Server::received() as $response) {
echo $response->getStatusCode();
}
No tīmekļa servera saņemto pieprasījumu sarakstu var izdzēst, izmantojot Server::flush()
metodi.
Server::flush();
echo count(Server::received());
// 0