2012-08-30 18 views
14

Me encuentro ante una situación en la que quiero asegurarme de que si se modifica un método no se necesita más de X ms para ejecutarse (esencialmente si esa función es más lenta, se ralentizará los resultados de búsqueda en nuestra página web, y que tienen un mal impacto en las ventas).Tiempo de uso transcurrido como afirmación en pruebas unitarias

Tenemos pruebas unitarias (en particular, el código se realiza en python y usamos py.test), la primera idea es afirmar que si la función no se ejecutó en menos de X ms, marque la prueba como fallida (o levantar una advertencia).

Sin embargo, esto parece peligroso (no todas las computadoras tienen la misma velocidad, por ejemplo), y tampoco estoy muy seguro de que ese sea el trabajo de una prueba unitaria.

¿Alguien ha enfrentado una situación similar? Para mí, la velocidad es una característica, y quiero asegurarme de que dicha característica no se pierda en el futuro a medida que evoluciona el código.

Si las pruebas unitarias no son la respuesta, ¿qué otras alternativas recomendaría?

Gracias

Respuesta

4

Puede empezar por usar el pytest-timeout plugin. Actualmente solo permite especificar segundos (como flotantes). Pero podría ampliarse para trabajar con tiempos más adaptables, como los números Pystone, de modo que habría una medida de la velocidad con la que su computadora realiza el benchmark pystone que podría almacenarse en caché y luego especificaría cuántas "pystones" su (s) prueba (s) está permitido tomar.

2

Si tiene un servidor de compilación/prueba dedicada, o hardware más o menos equivalente entre los desarrolladores, está bien tener un límite de tiempo en ms. La repetibilidad es la clave: es posible que pueda escribir algo que permita a los desarrolladores hacer una prueba de "línea base" en sus máquinas para comparar luego los resultados.

Hay un módulo pyunitperf disponible que incluye límites de tiempo y pruebas de carga. No se ha actualizado durante mucho tiempo (2009) pero sería un buen lugar para comenzar si vas a hacer tu propio.

Y recuerde que un tiempo de prueba en ms en sí mismo no le dirá nada, pero siempre que solo esté usando esto para comparar el rendimiento entre revisiones, debería estar bien.

+0

Sí, hacemos un servidor de prueba dedicado, sin embargo, también alentamos a los desarrolladores a ejecutar pruebas en sus máquinas, y no quiero que crean que rompieron el lanzamiento solo porque tal vez sus máquinas están un poco cargadas. Aunque como dijiste, la repetibilidad parece una gran idea. Gracias. –