Esta página proporciona un compendio de opciones para pruebas automatizadas disponibles para los desarrolladores de Mozilla.
La mayoría de las pruebas automatizadas deberían ejecutarse sobre make check
. Cómo añadir una prueba en el momento de compilar describe los pasos requeridos para añadir un programa de pruebas arbitrario al conjunto de tests. Dependiendo de lo que se necesite probar, puede usarse uno de los siguientes frameworks disponibles:
Pruebas unitarias
xpcshell: make check
Con las ayudas para pruebas de xpcshell escribes pruebas unitarias en JavaScript. El código se ejecutará más tarde en xpcshell, que es una consola JS con capacidad para XPConnect. Esto significa que tu código puede acceder a componentes XPCOM, pero no puede (fácilmente) abrir ventanas, probar el chrome de la aplicación, trabajar con el analizador HTML o usar DOM.
Hay disponible un servidor HTTP sencillo para su uso desde los tests xpcshell.
Pruebas mediante código compilado
Las funcionalidades no susceptibles de ser usadas en scripts y otras similares requieren que se escriban pruebas en C++ para ejecutar la funcionalidad. A pesar de las apariencias, existen muy pocas pruebas de esta naturaleza en el repositorio en este momento. Aunque en realidad hay muchas pruebas así (mira los contenidos de xpcom/tests
para ver muchos ejemplos), muchas de ellas sólo pueden ejecutarse manualmente, la mayoría devuelven fallos usando mensajes personalizados directamente a la consola (y, por tanto, no se puede revisar automáticamente si se han ejecutado correctamente), y muchas no se compilan correctamente o contienen numerosos errores.
A pesar de todo ello, se han escrito algunas pruebas en C++ que pueden ser ejecutadas automáticamente detectando los fallos. El mejor ejemplo actual en términos de facilidad de autoría es xpcom/tests/TestPipe.cpp
, que usa una cabecera especial de apoyo a pruebas dirigida a facilitar la escritura de tales pruebas. Mira Compiled-code automated tests para obtener detalles.
Escribir una prueba en C++ es más difícil que escribir una prueba en xpcshell, y el código es más difícil de mantener y modificar. ¡No escribas pruebas en código compilado si no es necesario! Deberías usar estas pruebas únicamente cuando la funcionalidad a probar depende de interfaces, métodos o propiedades que no se pueden llamar desde scripts.
Pruebas gráficas y/o interactivas
Mochitest
Mochitest es un framework basado en Mochikit para escribir pruebas. Las pruebas se ejecutan en el navegador, desde un servidor web local (proporcionado por Mochitest). Los scripts de inicio que lo acompañan conceden diversos privilegios a localhost (crea un nuevo perfil en cada ejecución). Como resultado, las pruebas unitarias son libres de solicitar privilegios UniversalXPConnect (acceso a componentes XPCOM), abrir ventanas emergentes, etc. Mochitest es una buena solución si realmente necesitas un navegador completo para probar un problema. Por ejemplo, un test reciente verifica que el envío de formularios funciona en iframes fijados a display:none
. Hay una FAQ de Mochitest.
Pruebas chrome del navegador
Las pruebas chrome del navegador están pensadas para usarse probando el código "chrome" de la interfaz, y otras características susceptibles de ser probadas desde el código JavaScript de chrome. Consisten en pequeños bloques de código JavaScript que se ejecutan en el ámbito de la ventana del navegador.
Reftest
Tests visuales del motor de dibujado (reftest). Cada test consiste normalmente en dos archivos - uno de ellos contiene un conjunto de etiquetas de prueba y el otro normalmente contiene un conjunto de etiquetas de referencia (aunque también es posible usar un PNG estático si se desea). El sistema trabaja comparando el renderizado de los dos archivos.
reftest se compila e instala ahora automáticamente cuando ENABLE_TESTS
está activado (valor predeterminado) y hay pruebas de ejemplo en layout/reftests
.
Para ejecutar todos estos tests, escribe:
obj-debug/dist/MinefieldDebug.app/Contents/MacOS/firefox -reftest layout/reftests/reftest.list
(Se supone que "make lcheck" debe hacer esto por ti, pero actualmente no funciona).
Puedes buscar entre los resultados (usando "grep") la cadena "UNEXPECTED" o ejecutar una de las herramientas de procesado de salida de reftest listadas en el README.
Puede que quieras usar un perfil separado para ejecutar los tests (creando un perfil llamado "reftests" y añadiendo -P reftests
a la línea que invoca la aplicación).
Para más información, acude a layout/tools/reftest/README.txt
y el tutorial sobre cómo crear un test basado en reftest.
Crash tests
El framework para pruebas de fallos está basado en el framework reftest, por lo que escribir y ejecutar pruebas es muy parecido. Cada test es un solo archivo y la prueba funciona cargando el archivo y ejecutándolo sin detener el programa ni lanzar aserciones (el framework no vigila explícitamente las aserciones en este momento, necesitarás hacer grep para localizarlas en la salida).
Para ejecutar todas las pruebas de fallos, escribe
obj-debug/dist/MinefieldDebug.app/Contents/MacOS/firefox -reftest testing/crashtest/crashtests.list
Otra documentación de referencia
Por favor, ignora la página wikimo:SoftwareTesting:Scratchpad, y mira únicamente wikimo:SoftwareTesting. La pizarra (Scratchpad) es para trabajos en curso, y casi con toda seguridad estará obsoleta o tendrá documentación errónea.
También está wikimo:SoftwareTesting y Consejos y trucos para pruebas automatizadas si estás buscando algo que leer.
Estos otros esfuerzos están en curso:
- Puedes escribir programas de prueba independientes en C/C++. Esta opción puede usarse para probar funcionalidades no expuestas a través de XPCOM.
- bug 343673 registra el trabajo de una persona, y parece que ha habido ciertos progresos.
- bug 346703 contiene un ejemplo de cómo puede hacerse esto.
- JSUnit puede usarse para escribir pruebas que se ejecutan como contenido en el navegador. Es especialmente útil para tests DOM y del analizador sintáctico, pero no puede hacer nada que requiera privilegios chrome.
- JsUnit probablemente no pueda usarse como un objetivo de compilación para make check de momento, ya que necesita una instancia completa de un navegador.
- wikimo:SoftwareTesting#Ideas_to_Collect lista algunos ejemplos de jsunit.
- Remítete a la documentación en wikimo:SoftwareTesting:Tools:jsUnit para más información.
- Algunos tests de XForms usan JsUnit, a modo de ejemplo.
Utilidades y frameworks existentes para pruebas
(originalmente de wikimo:SoftwareTesting:Catalog_of_Automated_Tests)
- Pruebas de rendimiento de Tinderbox
- Scripts de pruebas de Places
- Pruebas unitarias de Netwerk
- Pruebas de javascript
- Pruebas de nss
- Pruebas de nspr
- Pruebas de posicionamiento (layout) - diferencias entre la salida de una versión de prueba y otra de referencia considerada correcta (golden master)
- copia en bz de los tests de netwerk para xmlserializer
- Los tests de W3C DOM usan jsunit
- Tests de XSLT
- https://hixie.ch/tests/MANIFEST todos los tests de hixie
- https://hixie.ch/tests/MANIFEST-visual subconjunto de tests de hixie que no es interactivo
- FoxUnit - utilidad al estilo jUnit para firefox, por la gente de AllPeers