1
0
mirror of https://github.com/guzzle/guzzle.git synced 2025-02-11 19:14:38 +01:00

Adding perf test to makefile

This commit is contained in:
Michael Dowling 2014-03-23 10:53:34 -07:00
parent 955a47ef33
commit 92a11623af
3 changed files with 64 additions and 7 deletions

View File

@ -34,4 +34,8 @@ docs: .FORCE
view-docs:
open docs/_build/html/index.html
perf: start-server
php tests/perf.php
$(MAKE) stop-server
.FORCE:

View File

@ -125,6 +125,18 @@ class Server
self::$started = false;
}
public static function wait($maxTries = 3)
{
$tries = 0;
while (!self::isListening() && ++$tries < $maxTries) {
usleep(100000);
}
if (!self::isListening()) {
throw new \RuntimeException('Unable to contact node.js server');
}
}
private static function start()
{
if (self::$started){
@ -134,13 +146,7 @@ class Server
if (!self::isListening()) {
exec('node ' . __DIR__ . \DIRECTORY_SEPARATOR . 'server.js '
. self::$port . ' >> /tmp/server.log 2>&1 &');
$tries = 0;
while (!self::isListening() && ++$tries < 3) {
usleep(100000);
}
if (!self::isListening()) {
throw new \RuntimeException('Unable to contact node.js server');
}
self::wait();
}
self::$started = true;

47
tests/perf.php Normal file
View File

@ -0,0 +1,47 @@
<?php
/*
* Runs a performance test against the node.js server for both serial and
* parallel requests. Requires PHP 5.5 or greater.
*
* # Basic usage
* make perf
* # With custom options
* REQUESTS=100 PARALLEL=5000 make perf
*/
require __DIR__ . '/bootstrap.php';
use GuzzleHttp\Client;
use GuzzleHttp\Tests\Server;
// Wait until the server is responding
Server::wait();
// Get custom make variables
$total = isset($_SERVER['REQUESTS']) ? $_SERVER['REQUESTS'] : 1000;
$parallel = isset($_SERVER['PARALLEL']) ? $_SERVER['PARALLEL'] : 25;
$client = new Client(['base_url' => Server::$url]);
$t = microtime(true);
for ($i = 0; $i < $total; $i++) {
$client->get('/guzzle-server/perf');
}
$totalTime = microtime(true) - $t;
$perRequest = ($totalTime / $total) * 1000;
printf("Serial: %f (%f ms / request) %d total\n",
$totalTime, $perRequest, $total);
// Create a generator used to yield batches of requests to sendAll
$reqs = function () use ($client, $total) {
for ($i = 0; $i < $total; $i++) {
yield $client->createRequest('GET', '/guzzle-server/perf');
}
};
$t = microtime(true);
$client->sendAll($reqs(), ['parallel' => $parallel]);
$totalTime = microtime(true) - $t;
$perRequest = ($totalTime / $total) * 1000;
printf("Parallel: %f (%f ms / request) %d total with %d in parallel\n",
$totalTime, $perRequest, $total, $parallel);