我有一个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秒?我认为春天的目的是让开始时间和第一次请求时间快,但事实似乎并非如此。
答案 0 :(得分:1)
Capybara需要在单独的线程中启动自己的应用程序副本以进行测试。那个启动时间,加上可能触发资产编译的第一个请求(资产是以测试模式编译而不是以开发模式编译)就是你所看到的。