为什么我的功能测试从Rails,Selenium和Spring开始慢慢进行?

时间:2017-10-06 16:04:16

标签: ruby-on-rails spring selenium capybara

我有一个Rails 5.0.5应用程序,其功能测试使用Capybara和Selenium(chromedriver)编写。我也在用春天。当我运行我的功能测试时,第一次请求到我的应用程序大约需要45秒,然后请求时间正常。

我想理解为什么第一个请求很慢并且速度更快 - 这是一个重大问题。

我已将selenium上的日志级别设置为debug:Selenium::WebDriver.logger.level = :debug

然后我看到了:

017-10-06 10:40:53 INFO Selenium    >>> http://127.0.0.1:9516/session/d61353b6a9b514302b0146b398250ac6/url | {"url":"http://lvh.me:65483/logout"}
2017-10-06 10:40:53 DEBUG Selenium      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=utf-8", "Content-Length"=>"36"}
DEPRECATION WARNING: You didn't set `secret_key_base`. Read the upgrade documentation to learn more about this new config option. (called from env_config at /Users/johnnaegle/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.0.5/lib/rails/application.rb:246)

此时,它在我的测试(/ logout)中点击第一个URL并且浏览器已启动(但挂起)。 rails进程正在运行,当它完成时,它会显示在服务器日志中:

[e97dc298-2ac5-4f29-b07c-58b0cc4e8827] Started GET "/logout" for 127.0.0.1 at 2017-10-06 10:45:16 -0500
[e97dc298-2ac5-4f29-b07c-58b0cc4e8827] Processing by UserSessionsController#destroy as HTML
[e97dc298-2ac5-4f29-b07c-58b0cc4e8827] Redirected to http://lvh.me:53531/login
[e97dc298-2ac5-4f29-b07c-58b0cc4e8827] Completed 302 Found in 834ms (ActiveRecord: 0.0ms)
[9a296768-7b0a-41f0-9eea-a95414f8a81d] Started GET "/login" for 127.0.0.1 at 2017-10-06 10:45:17 -0500
...
[9a296768-7b0a-41f0-9eea-a95414f8a81d] Completed 200 OK in 43621ms (Views: 43571.7ms | ActiveRecord: 21.8ms)

我在osx上。

如果我捆绑exec一个rails控制台(绕过弹簧),急切加载我的应用程序并退出,这需要22秒。

如何弄清楚为什么我的第一次功能测试需要45秒?我认为春天的目的是让开始时间和第一次请求时间快,但事实似乎并非如此。

1 个答案:

答案 0 :(得分:1)

Capybara需要在单独的线程中启动自己的应用程序副本以进行测试。那个启动时间,加上可能触发资产编译的第一个请求(资产是以测试模式编译而不是以开发模式编译)就是你所看到的。