PHPunit花费大量时间在Homestead上启动,因此导致测试缓慢

时间:2015-07-19 15:02:00

标签: performance laravel phpunit vagrant homestead

我创建了一个基本的Lumen应用程序,并尝试使用PHPUnit运行一些测试。

当我在本地终端中运行对phpunit的简单调用时,测试完成需要大约120ms。但是,当我在homestead machine(流浪汉)中运行相同的调用时,需要超过3秒(!)才能完成!那太疯狂了。

我已经做了一些测试,似乎他们自己的测试并不慢,只是phpunit在家园上启动速度超慢。我想宅基地执行phpunit可执行文件可能会很慢?对于作曲家而言,在宅基地上比在本地终端上跑得慢得多,但在百分比方面它并不像phpunit那么慢。

我知道如何解决这个问题"延迟"并且让phpunit测试在宅基地上快速运行?

2 个答案:

答案 0 :(得分:2)

是由于用于挂载Windows的文件系统而导致的。宅基地上的文件夹。

Homestead由Vagrant管理,使用VirtualBox启动虚拟机,Virtual Box使用vboxsf作为文件系统,我不知道为什么,但这对于运行PHPUnit来说太慢了。

我猜你的窗口上有你的代码'文件夹,并使用Vagrant / VirtualBox提供的标准共享文件夹从宅基地到达。(这是我的情况)

我使用CIFS作为文件系统挂载了一个Windows共享文件夹(我的代码在那里),并将测试的执行时间从58.46s减少到6.51s。

在这里你可以找到这样的指示: https://wiki.ubuntu.com/MountWindowsSharesPermanently

答案 1 :(得分:0)

听起来您没有为VM分配大量资源。我发现this回答有帮助。

  

资源较少的虚拟客户端运行缓慢。为了获得最佳性能,您实际上会为主机提供比访客更多的资源。此外,您将无法将两个cpu都提供给您的虚拟机,因为您的主机需要运行所有内容。这样想吧。您的主机必须运行其自己的系统以及来宾的容器。客人与主机进行资源争夺。尽量少给客人,看看它是如何运行的。

我使用Virtual Box和Vagrant,post解释了通过Virtual Box UI启动VM的最快方法。更好的方法是编辑你的VagrantFile,这样每当你弄清楚你的Laravel Homestead盒子时,它就按你想要的方式设置配置。

更新:嗯。我正在VM中运行PHPSpec来测试电子商务网站上的一些自定义结帐方法。在PHPSpec中,无论测试的是什么,我的第一次测试都是10000ms。我做的两件事就是启用缓存,这些缓存在开发和编辑Vagrant配置时通常已关闭,以便将盒子打开:

config.vm.define :web, primary: true do |web|
  web.vm.hostname = "web"
  web.vm.box = "trusty64" 
  web.vm.provider "virtualbox" do |v|
        v.memory = 2048
        v.cpus   = 4
  end
end

这使测试的总运行时间减少了约25%,并且第一次测试降至约1500ms