6

Nos gustaría realizar algunas pruebas de integración automática de un proceso que requiere enviar datos a una fuente externa y luego validar que los datos se han mostrado correctamente en su sitio web..NET Prueba automatizada para procesos de larga ejecución

Sin embargo, pueden transcurrir varias horas antes de que los datos aparezcan en el sitio web.

El problema con NUnit o MSTest tradicional es que la prueba se mantendrá durante horas esperando el resultado.

He visto PNUnit que podría utilizarse para ejecutar todas las pruebas en paralelo, pero no me parece una solución elegante. ¿Qué pasa si hay 1000 pruebas? ¿No creará esto una gran cantidad de procesos/hilos en el servidor? Y cómo mantener un registro de todos ellos.

¿Alguien ha resuelto este problema? ¿Creó una solución en su hogar, o hay una solución de código abierto para esto?

+0

Gracias por las respuestas chicos. Buenas ideas Esperaba obtener una respuesta de alguien que había implementado algo como esto. Estoy pensando que la mejor manera de abordar esto es preparar algo de C# y crear algo de los primeros principios. No estoy seguro de que NUnit/MSTest, etc. pueda hacer esto de una manera elegante. –

+1

Creo que su prueba es demasiado amplia en su alcance e incluye muchas condiciones que podrían salir mal y que no están dentro de su código. Así que ya no es una prueba de "unidad", sino más bien una prueba de "sistema", que es la razón por la que le resulta difícil encajar en el molde de prueba de la unidad.Se supone que las pruebas unitarias son pequeñas piezas aisladas de funcionalidad ("unidades"). A menudo se ejecuta como parte de un proceso de compilación, incluso. Creo que está buscando hacer más pruebas de sistema y buscar herramientas como probadores de carga o probadores de simulación de clientes, etc. Muchas de estas herramientas están diseñadas para procesos de larga ejecución. – BenSwayne

Respuesta

2

Este problema se puede resolver fácilmente separando la inserción y verificación de datos de prueba. Simplemente cargue todos los datos de prueba disponibles en el sistema, espere varias horas hasta que finalice el procesamiento y luego ejecute las pruebas de verificación.

+0

Buena idea. No creo que ninguno de los marcos de prueba se presten a esto sin embargo? Por ejemplo, Nunit ejecutas las pruebas y pasan o fallan. ¿Sugiere ejecutar continuamente las pruebas de algún otro proceso y luego usar NUnit para validar los datos en el DB recopilados durante el último día? –

+0

"Todos" los marcos se prestan a esta técnica! Solo tiene que cargar algunos datos de prueba predeterminados que busca más adelante, o guardar sus datos de prueba en su prueba de "inserción/carga" en el sistema de archivos, luego lea ese archivo en su prueba de "verificación" más adelante para verificar. El truco es el momento, por lo que no creo que esta sea una prueba unitaria apropiada en primer lugar, sino más bien una "prueba del sistema". – BenSwayne

+0

Los marcos de pruebas unitarias generalmente tienen la función "Configurar", que generalmente se usa para preparar el entorno para las pruebas. Puede usarlo para insertar datos de prueba en su sistema. http://www.nunit.org/index.php?p=setupFixture&r=2.4 –

1

Parece que PNUnit sería una buena solución. Si le preocupan los "demasiados procesos/subprocesos" en el servidor, simplemente reduzca la cantidad de pruebas que PNUnit puede ejecutar a la vez (por ejemplo, N máx.); cuando se complete una prueba, programe la próxima prueba. No estoy afirmando que PNUnit sepa cómo hacer esto; puede que tenga que implementar esta costumbre.

0

Martin, antes de llegar a mi solución, para la unidad de probarlo Me parece que querrías probar solo lo que puedes controlar. Lo anterior se parece más a lo que llamo prueba de regresión. Supongo que "su" sitio web es el sitio web de otra persona. ¿Puedo preguntar qué pasa si sigues las reglas de la interfaz/integración pero nunca aparece nada en su pantalla, mientras que puede ser un problema qué podrías hacer al respecto? Además, ¿qué sucede cuando cambian su sitio web o algoritmos? Terminará necesitando escribir código basado en lo que hacen, lo que apesta.

Dicho esto, como se mencionó anteriormente, puede separar las pruebas de carga y las pruebas de verificación de datos. Confieso que no sé nada de PNunit, pero el solo hecho de tirar hilos no va a resolver la latencia de 3 horas para cada prueba de ida y vuelta.

si necesita ejecutar de forma síncrona, puede cargar todos los datos en ClassInitialize() y luego dormir hasta que sea el momento de verificar y ejecutar las pruebas reales.

Si fuera yo, solo tendría un proyecto de prueba para las pruebas de carga y luego un proyecto para verificar los resultados unas horas más tarde. Tenerlo sincrónico no parece que le compre mucho más que asegurarse de que la precondición pase antes de probar los resultados, lo que también se puede manejar de otras maneras.

+0

gracias por la sugerencia. parece que la carga ahora, luego verificar más tarde es popular. El problema es que los marcos parecen no ser compatibles con esto, por lo que las opciones son solo "hacer suyas" o iniciar una iniciativa de código abierto. –

+0

intenté abordar por qué pensé que ningún marco haría esto y es probable que el otro sitio web sea una caja negra y las pruebas que verifiquen que esa caja negra debería estar en esa solución y no en la aplicación consumidora, pero eso es solo mi opinión. en la línea de separación de preocupaciones –

Cuestiones relacionadas