$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}


{$data}
序号 -c -n 成功率 秒并发数 平均毫秒数 99%的请求完成毫秒数
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(); }