2010-11-28 12 views
6

Estoy creando una serie de pruebas de automatización web que requieren que los datos de prueba estén en una base de datos (SQL Server 2008). Para generar los datos requeridos para cada prueba, debo llamar a un código C# que insertará los datos correctos en la base de datos (es decir, no puedo simplemente escribir scripts SQL para insertar los datos). Mi problema es que no quiero contaminar mi prueba db con muchos datos de prueba de estas pruebas automatizadas. Por lo tanto, me gustaría deshacer todos los cambios realizados en el DB durante la prueba.Creando y retrocediendo datos de prueba con el servidor SQL

¿Alguien puede sugerir una forma sensata de lograr esto?

Respuesta

5

Manera simple sería crear una copia de seguridad de la base de datos antes de ejecutar las pruebas, y luego simplemente restaurar de nuevo al final.

+0

O incluso realice la restauración al final de las pruebas, de modo que la próxima vez que se ejecuten las pruebas, la base de datos limpia ya esté en su lugar. Hola Tim, hola James! – mcintyre321

+0

Jamie, esta sería la forma en que iría también. Establezca la base de datos en el modelo de recuperación "completa". Realice una copia de seguridad completa de una sola vez y luego, al comienzo de cada ejecución de prueba realice una ejecución de copia de seguridad diferencial, esto debería ser muy rápido. Al final de las pruebas, haga una 'Recuperación para apuntar en el tiempo' http://msdn.microsoft.com/en-us/library/ms190982.aspx: use el estudio de administración para mostrarle los scripts necesarios para automatizarlo. –

4

Dos formas de hacerlo.

Una es para adjuntar su prueba dentro de una transacción y deshacerla. Otra es utilizar una secuencia de comandos de limpieza como parte de su código de finalización de la prueba (lo hacemos para algunas de nuestras pruebas de integración cuando una transacción no funciona).

+0

En una nota al margen: generalmente trabajamos con una base de datos de referencia específica para nuestras pruebas de integración, por lo que el sistema siempre se encuentra en buen estado antes de que se ejecuten nuestras pruebas de integración (incluso con datos de reversión). Hace las cosas mucho más fáciles. –

2

Cuando no tengo control sobre los ámbitos de transacción de mis pruebas, suelo soltar y volver a crear la base de datos desde cero cada vez.

Obviamente, esto solo es posible si las pruebas se pueden ejecutar contra el esquema simple (o con los valores de búsqueda codificados insertados en los scripts de creación).

Cuando pruebo contra una base de datos de instantánea pre-poblada con muchos datos, antes he usado scripts de limpieza, digamos que eliminé todos los registros de cada tabla sobre el ID máximo de mi instantánea de línea de base. No intenté automatizar la copia de seguridad/reversión como lo sugiere AdaTheDev, pero probablemente sea su mejor opción si no desea mantener scripts de limpieza potencialmente complicados (y con errores) (depende de la complejidad de los datos de su captura de pantalla)./con qué frecuencia puede cambiar su instantánea y tiene que modificar sus limpiezas en consecuencia).

¿Ha considerado burlarse del acceso a los datos, para que sus pruebas web se ejecuten en un almacén de datos en memoria? Luego, prueba los procedimientos de acceso a datos internamente donde aún puedes revertir los ámbitos de transacción.

1

Parece que sería difícil usar transacciones, ya que va a realizar varias solicitudes web en una sola prueba, pero esa sería mi primera preferencia porque es más rápido que restaurar una base de datos desde la copia de seguridad.

Si usted tiene la versión correcta de SQL Server, puede utilizar instantáneas de bases de datos en lugar de copias de seguridad: http://msdn.microsoft.com/en-us/library/ms175876.aspx, simplemente porque son SQL más rápido :)

2

Los asistentes más en Puerta Roja acaban de publicar Restaurar virtual , que realmente montará un archivo de respaldo como base de datos en vivo, legible y escribible, para que pueda tener un archivo de respaldo que represente el estado de línea base de su sistema antes de las pruebas, tome una copia de esta copia de seguridad, monte la copia como su base de datos de prueba, ejecute las pruebas, y luego desmontar y borrar la copia.

Virtual Restore está en http://www.red-gate.com/products/sql_virtual_restore/index.htm y hay 14 días de prueba si quiere probarlo.

No tengo ninguna afiliación con Red Gate, por cierto, solo soy un entusiasta usuario de sus herramientas.

+0

No está claro para mí, ¿cuál es el valor agregado en comparación con la restauración de una copia de seguridad de MyTestDb? No se requieren herramientas ... –

0

Obviamente, todo depende de cómo llame a las pruebas, pero ¿funcionaría el atributo "Revertir" que está en MbUnit?

Cuestiones relacionadas