Cómo probar el código web?

votos
11

¿Alguien tiene algunas buenas pistas para escribir código de prueba para el desarrollo de base de datos de back-end donde hay una gran dependencia del estado?

Específicamente, deseo escribir pruebas para el código que recupera registros de la base de datos, pero las respuestas dependerán de los datos en la base de datos (que pueden cambiar con el tiempo).

¿La gente suele hacer un sistema de desarrollo separado con una base de datos congelada para que cualquier función dada siempre devuelva exactamente el mismo conjunto de resultados?

Estoy bastante seguro de que este no es un problema nuevo, por lo que estaría muy interesado en aprender de la experiencia de otras personas.

¿Hay buenos artículos que discutan este tema del desarrollo basado en la web en general?

Normalmente escribo código PHP, pero supongo que todos estos problemas son en gran medida independientes del lenguaje y del marco.

Publicado el 05/08/2008 a las 22:58
fuente por usuario
En otros idiomas...                            


10 respuestas

votos
5

Debería buscar en DBUnit, o tratar de encontrar un equivalente de PHP (debe haber uno por ahí). Puede usarlo para preparar la base de datos con un conjunto específico de datos que represente los datos de prueba y, por lo tanto, cada prueba ya no dependerá de la base de datos y de algún estado existente. De esta forma, cada prueba es independiente y no se interrumpirá durante el uso de la base de datos.

Actualización: una búsqueda rápida en Google mostró una extensión de unidad de base de datos para PHPUnit.

Respondida el 05/08/2008 a las 23:03
fuente por usuario

votos
1

Tengo exactamente el mismo problema con mi trabajo y me parece que la mejor idea es tener un script PHP para volver a crear la base de datos y luego un script separado donde arrojo datos descabellados para ver si lo rompe.

Nunca he usado ninguna prueba de Unidad o similar, así que no puedo decir si funciona o no.

Respondida el 05/08/2008 a las 23:03
fuente por usuario

votos
1

Si puede configurar la base de datos con una cantidad conocida antes de ejecutar las pruebas y eliminarlas al final, sabrá con qué datos está trabajando.

Luego puede usar algo como Selenium para probar fácilmente desde su UI (suponiendo que se base en la web aquí, pero hay muchas herramientas de prueba de UI para otros sabores de UI) y detectar la presencia de ciertos registros retirados de la base de datos.

Definitivamente vale la pena configurar una versión de prueba de la base de datos, o hacer que los scripts de prueba rellenen la base de datos con datos conocidos como parte de las pruebas.

Respondida el 05/08/2008 a las 23:08
fuente por usuario

votos
3

Si lo que más le preocupa es la prueba de la capa de datos, le recomendamos que consulte este libro: xUnit Test Patterns: Refactoring Test Code . Siempre estuve inseguro al respecto, pero este libro hace un gran trabajo para ayudar a enumerar las inquietudes, como el rendimiento, la reproducibilidad, etc.

Respondida el 06/08/2008 a las 05:14
fuente por usuario

votos
1

Puedes probar http://selenium.openqa.org/ , es más para realizar pruebas GUI en lugar de una aplicación de prueba de capa de datos, pero registra tus acciones, que luego se pueden reproducir para automatizar las pruebas en diferentes plataformas.

Respondida el 06/08/2008 a las 13:06
fuente por usuario

votos
2

Supongo que depende de qué base de datos esté utilizando, pero Red Gate (www.red-gate.com) crea una herramienta llamada SQL Data Generator. Esto se puede configurar para llenar su base de datos con datos de prueba de aspecto sensato. También puede decirle que use siempre la misma semilla en su generador de números aleatorios para que sus datos "aleatorios" sean los mismos siempre.

Luego puede escribir sus pruebas unitarias para hacer uso de estos datos confiables y repetibles.

En cuanto a probar el lado web de las cosas, actualmente estoy investigando Selenium (selenium.openqa.org). Esto parece ser un conjunto de pruebas con múltiples navegadores que lo ayudarán a probar la funcionalidad. Sin embargo, al igual que con todas estas herramientas de prueba del sitio web, ¡no existe una manera real de comprobar qué tan bien se ven estas cosas en todos los navegadores sin tener un ojo humano sobre ellos!

Respondida el 06/08/2008 a las 14:44
fuente por usuario

votos
1

Aquí está mi estrategia (uso JUnit, pero estoy seguro de que hay una manera de hacer el equivalente en PHP):

Tengo un método que se ejecuta antes de todas las pruebas unitarias para una clase DAO específica. Pone la base de datos de desarrollo en un estado conocido (agrega todos los datos de prueba, etc.). Mientras realizo las pruebas, hago un seguimiento de los datos agregados al estado conocido. Esta información se limpia al final de cada prueba. Después de ejecutar todas las pruebas para la clase, otro método elimina todos los datos de prueba en la base de datos de desarrollo, dejándolo en el estado en que estaba antes de ejecutar las pruebas. Es un poco de trabajo hacer todo esto, pero normalmente escribo los métodos en una clase DBTestCommon donde todas mis clases DAO pueden acceder a ellos.

Respondida el 11/08/2008 a las 14:30
fuente por usuario

votos
1

Yo propondría usar tres bases de datos. Una base de datos de producción, una base de datos de desarrollo (llena de algunos datos significativos para cada desarrollador) y una base de datos de prueba (con tablas vacías y tal vez algunas filas que siempre se necesitan).

Una forma de probar el código de la base de datos es:

  1. Inserte algunas filas (usando SQL) para inicializar el estado
  2. Ejecute la función que desea probar
  3. Compare lo esperado con los resultados reales. Aquí podría usar su marco de prueba de unidad normal
  4. Limpie las filas que se cambiaron (para que la siguiente ejecución no vea la ejecución anterior)

La limpieza se puede hacer de forma estándar (por supuesto, solo en la base de datos de prueba) con DELETE * FROM table.

Respondida el 19/08/2008 a las 19:40
fuente por usuario

votos
1

En general, estoy de acuerdo con Peter, pero para crear y eliminar datos de prueba no usaría SQL directamente. Prefiero usar alguna API CRUD que se utiliza en el producto para crear datos lo más similares posible a la producción ...

Respondida el 10/09/2008 a las 12:31
fuente por usuario

votos
2

Usamos una base de datos en memoria (hsql: http://hsqldb.org/ ). Hibernate ( http://www.hibernate.org/ ) nos facilita apuntar nuestras pruebas unitarias en la prueba db, con la ventaja añadida de que funcionan tan rápido como un rayo.

Respondida el 10/09/2008 a las 13:02
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more