$value) {
$data .= "
".(++$key)." |
{$value['c']} |
{$value['n']} |
".ceil(100-$value['failedRequests']/$value['completeRequests']*100)."% |
{$value['requestsPerSecond']} |
{$value['timePerRequest']} |
{$value['percentage']} |
";
}
$tmp = parse_url($url);
$name = isset($tmp['host']) ? $tmp['host'] : date('Y-m-d-H-i-s');
$html = <<
{$url}
{$url}
序号 |
-c |
-n |
成功率 |
秒并发数 |
平均毫秒数 |
99%的请求完成毫秒数 |
{$data}
EOF;
file_put_contents($name.'.html', $html);
}
/**
* 压测
*/
function ab($url,$cn) {
$result = array();
$counter = count($cn);
foreach ($cn as $key => $value) {
$ab = "ab -c {$value['c']} -n {$value['n']} {$url}";
echo 'total ',$counter,' current ',$key+1," last ",$counter - ($key+1),"\r\n";
echo $ab,"\r\n";
exec($ab,$output,$code);
echo "\r\n";
if($code != 0) {
help();
break;
}
$data = array('c'=>$value['c'],'n'=>$value['n']);
foreach ($output as $key2 => $value2) {
if(stripos($value2, 'Complete') === 0) {
$tmp = explode(':', $value2);
$data['completeRequests'] = intval(array_pop($tmp));
}
if(stripos($value2, 'Failed') === 0) {
$tmp = explode(':', $value2);
$data['failedRequests'] = intval(array_pop($tmp));
}
if(stripos($value2, 'Requests') === 0) {
$tmp = explode(':', $value2);
$data['requestsPerSecond'] = intval(array_pop($tmp));
}
if(stripos($value2, 'Time per request') === 0) {
$tmp = explode(':', $value2);
if(!isset($data['timePerRequest'])) $data['timePerRequest'] = intval(array_pop($tmp));
}
if(stripos($value2, '99%') !== false) {
$data['percentage'] = intval(str_replace('99%','',$value2));
}
}
$result[] = $data;
sleep(3); //等待3秒,进入下一个压测
}
echo 'complete ',++$key,"\r\n";
return $result;
}
/**
* 生成压测url
* @param [type] $url [url]
* @param integer $floorNum [起始人数]
* @param integer $stepNum [每阶段增加人数]
* @param integer $ceilNum [最大人数]
* @return [type] [返回ab命令的 -c -n ]
*/
function cn($floorNum,$stepNum,$ceilNum) {
$result = array();
$step = 1;
for($i=$floorNum;$i<=$ceilNum;$i+=$stepNum) {
$n = $step*$i+$i;
$result[] = array('c'=>$i,'n'=>$n);
$step+=3;
}
return $result;
}
/**
* 打印帮助信息
*/
function help() {
echo "\r\nExample: php bench http://www.test.com/ 5 10 100\r\n";
echo "Parameter 1 is a url\r\n";
echo "Parameter 2 is the number of start\r\n";
echo "Parameter 3 is increasing number\r\n";
echo "Parameter 4 is the total number of\r\n";
die();
}