2017-10-06 9 views
-1

J'ai une application Rails 5.0.5 avec des tests de fonctionnalités écrits en utilisant Capybara et Selenium (chromedriver). J'utilise aussi le printemps. Lorsque j'exécute mes tests de fonctionnalité, la première demande à mon application prend environ 45 secondes, après quoi les temps de requête sont normaux.Pourquoi mes tests de fonctionnalités démarrent-ils lentement avec Rails, Selenium et Spring?

Je voudrais comprendre pourquoi cette première requête est lente et la rend plus rapide - c'est un problème important.

Je me suis fixé le niveau de journal sur le sélénium pour debug: Selenium::WebDriver.logger.level = :debug

puis je vois ceci:

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) 

À ce stade, sa frappe la première URL dans mon test (/ fermeture de session) et le navigateur lancé (mais accroché). Le processus de rails est en cours d'exécution et quand il se termine, cela apparaît dans les journaux du serveur:

[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) 

Je suis sur l'osx.

Si je regrouper une console de rails (en court-circuitant le ressort), charger mon application avec impatience et quitter, cela prend 22 secondes.

Comment puis-je savoir pourquoi mon premier test de fonctionnalité prend 45 secondes? Je pensais que le but du printemps était de rendre les heures de début et de première demande rapides, mais cela ne semble pas être le cas.

+2

Personne ne vous doit un commentaire avec un downvote, ils sont de conception anonyme. N'appelez pas encore les downvoters "lâches", ceci est [complètement indésirable ici] (https://stackoverflow.com/help/be-nice). – meagar

+0

Il serait beaucoup plus utile d'indiquer ce qui n'allait pas avec la question - cela semblait être une question raisonnable. Si j'avais pu fournir plus de détails, ou si je l'avais demandé d'une meilleure façon, j'aimerais savoir. –

+0

la downvote est injustifiée, c'est un vrai problème pratique qui mérite une réponse et une discussion. @meager - votre commentaire est techniquement correct mais complètement inutile. lâche. – Rob

Répondre

1

Capybara doit démarrer sa propre copie de votre application dans un fil séparé à des fins de test. Ce temps de démarrage, combiné à la première demande qui déclenche probablement la compilation d'actifs (les ressources sont compilées en mode test et non en mode dev) est ce que vous voyez.

+0

Merci pour la clarification. Y a-t-il un moyen d'accélérer cela? –

+0

Outre les éléments qui accélèrent normalement le démarrage de l'application (supprimer les gemmes non utilisées, etc.), vous pouvez précompiler les actifs dans le test env, mais cela signifie que vous devez toujours vous en souvenir chaque fois que vous les modifiez. De plus, si vous n'utilisez pas déjà puma en tant que serveur de test, essayez d'y accéder 'Capybara.server =: puma' –