2009-03-19 18 views
5

Estoy configurando algunas pruebas de Selenium para una aplicación web interna y estoy buscando asesoramiento sobre una 'mejor práctica' de prueba. Una de las pruebas agregará algunos datos a través de la IU que no se pueden eliminar a través de la IU (por ejemplo, puede agregar un registro a través de la aplicación web, pero eliminarlo requiere contactar a alguien internamente para eliminarlo a nivel de la base de datos). ¿Cómo se suele considerar la limpieza de los datos después de ejecutar la prueba de Selenium?Limpiar datos después de una prueba de selenio

La aplicación en cuestión está escrita en PHP y estoy usando PHP para probar (con Selenium RC y SimpleTest), pero estoy abierto a otras herramientas, etc. ya que esta es solo una pregunta general sobre las mejores prácticas. La aplicación que se está probando se encuentra en nuestro entorno de desarrollo, por lo que no estoy particularmente preocupado por la transferencia de datos de las pruebas.

Algunas ideas:

  1. conectarse manualmente a la base de datos en la prueba de selenio para limpiar los datos
  2. usar algo como DBUnit para gestionar esto?
  3. Sólo tiene que añadir los datos y no se preocupe por la limpieza para arriba (alias, el enfoque perezoso)

Gracias!

Editar: Parece que la mayoría de las ideas se centraron en la misma conclusión: trabajar con un conjunto conocido de datos y restaurar cuando las pruebas hayan finalizado. El mecanismo para esto probablemente variará según el idioma, la cantidad de datos, etc. pero parece que debería funcionar para mis necesidades.

Respuesta

4

Uso Selenium con una aplicación Rails, y uso el mecanismo de fijación para cargar y descargar datos de la base de datos de prueba. Es similar al enfoque DbUnit, aunque no descargo y recargo entre pruebas debido al volumen de datos. (Esto es something I'm working on, sin embargo.)

2

Tenemos un front-end web para una rutina de restauración de la base de datos. Lo primero que hacen nuestras pruebas es restaurar un punto de partida "bien conocido".

0

punto de la aplicación web a una instancia de base de datos diferente que puede limpie cuando haya terminado con las pruebas. Luego tendrá la base de datos para inspeccionar después de que se hayan ejecutado las pruebas si necesita depurar, y puede deshacerse de todas las tablas cuando haya terminado. Puede obtener una exportación de la base de datos actual y restaurarla en su nueva instancia antes de las pruebas si necesita datos de inicialización.

0

Estoy de acuerdo con las otras respuestas aquí. He conectado pruebas de Selenium y DBUnit a los últimos 3 proyectos en los que he trabajado. En el primer proyecto, probamos el enfoque perezoso, pero, como era previsible, cayó en un montón, así que utilizamos DBUnit y no he mirado hacia atrás.

Me doy cuenta de que está utilizando PHP, por lo tanto, traduzca DBUnit/JUnit a sus equivalentes de PHP.

Un par de puntos:

  • usar la menor cantidad posible de datos. Con muchas pruebas de selenio ejecutándose, usted quiere que la carga DBUnit sea tan rápida como posible. Intente minimizar la cantidad de datos que está cargando.
  • Cargue solo los datos que cambian. A menudo, puede omitir tablas que nunca son modificadas por la aplicación web. Ref datos tablas y más. Sin embargo, es posible que desee crear una copia de seguridad de archivo/db DBUnit xml para cargar estos datos en el caso si accidentalmente lo pierde.
  • Deje que las pruebas de selenio JUnit elijan si necesitan una recarga. Algunas pruebas de Selenium no cambiarán ningún dato de , por lo que no tiene sentido recargar la base de datos después de que se ejecuten. En cada una de mis pruebas de selenio, I anula/implementa un método para devolver el comportamiento DBUnit deseado.

    @ Override protegida DBUnitRunConfig getDBUnitRunConfig() {

    return DBUnitRunConfig.RUN_ONCE_FOR_THIS_TEST_CASE; 
    

    }

(No se pudo conseguir que el fragmento de formatear correctamente.) Cuando DBUnitRunConfig es:

public enum DBUnitRunConfig { 
    NONE, 
    RUN_IF_NOT_YET_RUN_IN_ANY_TEST_CASE, 
    RUN_ONCE_FOR_THIS_TEST_CASE, 
    RUN_FOR_EACH_TEST_IN_TEST_CASE 
}; 

Esto reduce el tiempo requerido para pasar las pruebas. La superclase habilitada para Selenium (o clase auxiliar) puede ejecutar, o no ejecutar, DBUnit para las pruebas dadas.

Cuestiones relacionadas