雖然框架基本完成,但我們還沒有測試過。
我們使用postman作為介面測試工具(http://saif.com/test)。
// 自定義路由
return [
'debug' => false,
'route' => [
'' => 'demo/welcome',
'test' => 'demo/test',
],
];
class DemoController extends Controller
{
public function welcome($params)
{
return $this->response->json(['hello' => 'welcome']);
}
public function test($params)
{
return $this->response->json($params);
}
}
我們測試下:
我們發現能正常獲取獲取GET引數,但沒有獲取到POST引數。
debug:
我們發現Content-Type輸出是:
multipart/form-data; boundary=--------------------------498010462598077868347660
我們優化一下程式碼:
public function getBodyParams()
{
$contentType = strtolower($this->getHeader('Content-Type'));
// p($contentType);
if (strpos($contentType, 'multipart/form-data') === false) {
$this->_bodyParams = \json_decode(file_get_contents("php://input"), true);
} else {
$this->_bodyParams = $_POST;
}
return $this->_bodyParams?? [];
}
另外我們發現getHeader方法有點問題:
public function getHeader($name, $defaultValue = null)
{
$name = ucfirst($name);
if (function_exists('apache_request_headers')) {
$headers = apache_request_headers();
p($headers);
return $headers[$name]?? $defaultValue;
}
// $_SERVER使用下劃線
$name = strtoupper(str_replace('-', '_', $name));
// 部分自定義引數需要加上HTTP_
return $_SERVER[$name]?? ($_SERVER['HTTP_'.$name] ?? $defaultValue);
}
測試正常。
另外,做一下說明,我們可以使用public function test($params),是源於我們Request,將引數注入到方法裡。
public function runAction($route)
{
... 省略程式碼
return $controller->$action(array_merge($this->getQueryParams(), $this->getBodyParams()));
}
效能測試
我們使用的是wrk壓測
> git clone https://github.com/wg/wrk
> cd wrk
> make
> ln -s ./wrk /usr/bin/wrk
wrk引數:
-c, --connections(連線數): total number of HTTP connections to keep open with each thread handling N = connections/threads
-d, --duration(測試持續時間): duration of the test, e.g. 2s, 2m, 2h
-t, --threads(執行緒): total number of threads to use
-s, --script(指令碼): LuaJIT script, see SCRIPTING
-H, --header(頭資訊): HTTP header to add to request, e.g. "User-Agent: wrk"
--latency(響應資訊): print detailed latency statistics
--timeout(超時時間): record a timeout if a response is not received within this amount of time.
-v, --version(版本資訊) Print version details
我們僅僅在控制返回空資訊,然後對比yii2(返回字串“yii2”),laravel5.5(返回字串“laravel5.5”)。
因為我們的框架沒有中介軟體、元件之類的,所以效能對比yii2、laravel,QPS要高很多。
本作品採用《CC 協議》,轉載必須註明作者和本文連結