2012-08-05 15 views
11

Después de ejecutar algunas pruebas, estoy convencido de que tiene que haber algo mal con mi configuración (windows, rubymine y las últimas versiones de ruby). Mis tiempos en este momento son:Rake tests running very slow

Finished tests in 14.289817s, 0.0700 tests/s, 0.3499 assertions/s. 

1 tests, 5 assertions, 0 failures, 0 errors, 0 skips 

Process finished with exit code 0 

Con 5 pruebas MUY fáciles (simplemente verificando si la validación en los campos vacíos funciona). El tiempo total para estas 5 pruebas unitarias es 160 segundos, más de 2 minutos.

¿Qué podría hacer para mejorar esta velocidad?

Aquí están las pruebas:

require 'test_helper' 

class ItemTest < ActiveSupport::TestCase 
    test 'item attributes must not be empty' do 
    item = Item.new 
    assert item.invalid? 
    assert item.errors[:name].any? 
    assert item.errors[:description].any? 
    assert item.errors[:image_url].any? 
    assert item.errors[:rating].any? 
    end 
end 
+0

¿Está comprando una máquina más rápida? Honestamente, sin un conocimiento más profundo de tus pruebas es difícil de decir. – iltempo

+0

Agregué las pruebas – Organiccat

+1

Ahora estoy impresionado por la lentitud. Ni siquiera estás golpeando la base de datos. Podría ser que cargar el entorno Rails lleva mucho tiempo. ¿Cuánto tiempo está funcionando un 'rake -vT'? – iltempo

Respuesta

6

Su problema es Windows. Usamos JRuby en Windows y en realidad se ejecuta más rápido que RubyInstaller (mingw) ruby ​​en Windows, pero vemos resultados muy lentos cuando ejecutamos suites de prueba o iniciamos un servidor de rieles. Aproximadamente 1 minuto para una única ejecución de prueba debido a la carga del entorno Rails. Usted tiene algunas opciones:

  1. cambiar a Linux/OSX
  2. Uso spork para mantener un par carriles entornos pre-cargados para sus pruebas. Tenga en cuenta que esto no es perfecto, pero reducirá sustancialmente sus tiempos. Con esta opción, probablemente quieras usar minitest o rspec, tuve problemas para hacer que spork funcione en Windows con testunit. Con spork deberías poder hacer que tu tiempo de ejecución de prueba sea de unos 10 segundos.
  3. Escriba tantas de sus pruebas para ejecutar fuera de Rails, en otras palabras, para no requerir la pila de Rails. Esto será muy rápido, deberías poder realizar una prueba en solo unos segundos, pero como pudiste adivinar, es difícil probar muchas cosas (controladores, vistas) fuera de los rieles. Funciona perfectamente para las funciones que has dividido en módulos que ya no requieren nada de los rieles.

¡Buena suerte!

+0

Gracias por el comentario. No me di cuenta cuando me metí por primera vez que los rieles funcionaban tan mal en Windows. Me imagino que el entorno Mac basado en Unix le permite correr más rápido? He decidido posponer RoR hasta que tenga acceso a una máquina que me permita utilizar los rieles correctamente. Supongo que esta sería la razón principal por la cual Rails no es más popular (en mi opinión personal). – Organiccat

+0

Sí, los rieles y muchos lenguajes tipo scripting están escritos para entornos * nix, así que sí, los Mac funcionarán bien. Windows es como una ocurrencia tardía y especialmente con Rails es drásticamente más lento. Se ahorrará mucho tiempo si comienza y se queda con el entorno en el que trabaja la mayoría de los Rails. –

+0

He creado una máquina virtual (virtualbox) e instalado linux en ella. El tiempo de prueba se ha reducido a (aún no es terriblemente bueno) 11 segundos a partir de 32 segundos. Sin embargo, puedo ver que casi todo ruby ​​se ejecuta más rápido en Linux incluso cuando se hace desde la emulación de software. – Pynner

2

¿Cuál es el resto de tu pila de gemas? A veces, las gemas de terceros se inicializan con raíles e intentan telefonear a casa (New Relic, Airbrake), lo que puede inflar los tiempos de prueba (aunque probablemente no tanto). Si hay algo que no es estrictamente necesario para su banco de pruebas, usted debe tratar de llevarlo a cabo en el grupo env adecuado, o conjunto require :false través bundler:

 
group :production do 
    gem 'newrelic_rpm' 
end 
0

Tiempo de inicio parece estar matando a ti, así que usted y yo somos Probablemente en el mismo bote. Entre Jodell y Dark Castle, esto ya está cubierto, pero esta es mi lista casi completa de cosas que me ayudaron, en orden decreciente de eficacia.

  1. Obtenga un parche 1.9.3 con las mejoras del sistema de archivos 2.0 backported.El primero obtiene 2x números mejor, pero estoy usando el segundo porque sentí la primera fue inestable
  2. Establecer las opciones de GC
  3. Desactivar la recopilación de datos de cobertura (Mi IDE mantuvo como voluntario esto)
  4. Run Spork, y set SPEC_OPTS=--drb
  5. Apague escáner de virus (en realidad no hacer esto, es sólo un valor de un 10% menos para mí)
  6. doble chequeo de las gemas, lo que retrasa la carga de gemas con requerirá: falsa

6 en realidad no me compraron mucho. Lo más grande que tuvimos mal fue cargar Thin incondicionalmente (que tira de Eventmachine, que tiene 21 megabytes instalados), pero los siguientes 3 en la pila fueron utilizados por RSpec. No he analizado el tráfico de la red, pero es probable que Jodell esté trabajando en algo allí.