在 laravel 中测试查询执行时间
Posted
技术标签:
【中文标题】在 laravel 中测试查询执行时间【英文标题】:Test query execution time in laravel 【发布时间】:2017-06-04 08:40:37 【问题描述】:如何在 laravel/phpunit 中测试查询需要多长时间执行?
有没有可能让它不依赖于其他东西?
【问题讨论】:
在您的数据库配置文件中启用数据库日志记录,它会在日志中告诉您执行的每个单独查询 【参考方案1】:最古老的方法是最好的:
$start = microtime(true);
// Execute the query
$time = microtime(true) - $start;
【讨论】:
作为旁注,在传统的单元测试中,你永远不应该接触你的数据库。单元测试用于测试小的、无状态的功能。数据库就是保存状态,所以在集成测试中测试你的数据库。【参考方案2】:您可以listen
执行这样的查询并将结果记录到storage/logs/laravel.log
。
\DB::listen(function ($sql, $bindings, $time)
\Log::info($sql, $bindings, $time);
);
您可以只使用$time
,但我记录了$sql, $bindings, $time
以完成。
你可以把它放在你的AppServiceProvider
中。
更新:
在 Laravel 版本 > 5.5 中,此方法在文档中记录为 listening for query events ;)
【讨论】:
有人知道 Laravel 查询日志中$time
变量的单位吗?
源码中的注释表示是毫秒。从我的测试来看,似乎就是这种情况。 github.com/illuminate/database/blob/…【参考方案3】:
由于 Laravel 5.2 listen
已更改为只有一个参数:
\DB::listen(function ($query)
// $query->sql
// $query->bindings
// $query->time
);
文档:https://laravel.com/docs/5.2/database
【讨论】:
【参考方案4】:您可以从 Laravel 6.x 开始使用 ddd($someVar)
助手。
Queries
选项卡描述了在ddd()
之前执行的每个查询
【讨论】:
以上是关于在 laravel 中测试查询执行时间的主要内容,如果未能解决你的问题,请参考以下文章
如何使用查询构建在 Laravel 中执行 WHERE NOT