Automatización de pruebas funcionales

41
AUTOMATIZACIÓN DE PRUEBAS FUNCIONALES

description

Transparecencias de la charla sobre automatización de pruebas funcionales dada en Artalde.net el 30/10/2012

Transcript of Automatización de pruebas funcionales

Page 1: Automatización de pruebas funcionales

AUTOMATIZACIÓN DE PRUEBAS

FUNCIONALES

Page 2: Automatización de pruebas funcionales

• Development Advisor en PlainConcepts• Professional Scrum Developer y Certified Scrum Master• Microsoft Certified Professional

[email protected]

@vgaltes

www.plainconcepts.com

geeks.ms/blogs/devnettips

VICENÇ GARCÍA ALTÉS

Page 3: Automatización de pruebas funcionales

Definición:– Asegura que el software desarrollado está haciendo

para lo que fue concebido, que cumple los requerimientos.

No deben ser nuestros únicos tests.

TESTEO FUNCIONAL

Page 4: Automatización de pruebas funcionales

LA PIRÁMIDE INVERTIDA

Page 5: Automatización de pruebas funcionales

La base de la pirámide está construida por tests de interfaz de usuario– Frágiles– Complejos– Lentos

LA PIRÁMIDE INVERTIDA

Page 6: Automatización de pruebas funcionales

• Mantener muchos tests “end-to-end” es duro:– Tardan en ejecutarse– Pueden necesitar muchos recursos– Hay caminos difíciles de testear– Cuando fallan, no sabemos exactamente donde o

porqué lo han hecho– Están más acoplados con el entorno y tienen

dependencias externas– Desde un punto de vista de refactorización, no dan la

misma sensación de seguridad que los tests unitarios

LA PIRÁMIDE INVERTIDA

Page 7: Automatización de pruebas funcionales

INVIRTIENDO LA PIRÁMIDE

Page 8: Automatización de pruebas funcionales

• La repetición de los tests (de cualquier tipo) es necesaria ya que elimina regresiones.

• Con la automatización eliminamos el desperdicio asociado a la repetición.

AUTOMATIZACIÓN

Page 9: Automatización de pruebas funcionales

• La automatización es muy difícil– Requiere disciplina• Es muy tentador no escribir tests• Es muy tentador ver los tests como desperdicio• Les tests no son algo intuitivo

– Requiere vigilancia• Alguien tiene que observar los resultados en rojo• Alguien tiene que reparar los ‘cristales rotos’• Alguien tiene que evitar que la ‘tensión’ decline

AUTOMATIZACIÓN

Page 10: Automatización de pruebas funcionales

¿DÓNDE SON BUENOS LOS TESTS DE UI AUTOMATIZADOS?

Page 11: Automatización de pruebas funcionales

Suite de regresión automatizada

Page 12: Automatización de pruebas funcionales

• Automatizar pruebas manuales que hayan pasado con éxito

• Convertir una grabación de Test Manager en Coded UI y añadirle aserciones.

Suite de regresión automatizada

Page 13: Automatización de pruebas funcionales

• Cuidado!– No tomar como sustituto de otras pruebas– No invertir la pirámide

Suite de regresión automatizada

Page 14: Automatización de pruebas funcionales

Pruebas de regresión automatizadas de bugs

Page 15: Automatización de pruebas funcionales

• Al resolver un bug se crea una prueba automatizada que se lanza en una build para asegurarse que no vuelve a aparecer

• Sobretodo útil en entornos “brownfield”

Pruebas de regresión automatizadas de bugs

Page 16: Automatización de pruebas funcionales

Pruebas de la GUI

Page 17: Automatización de pruebas funcionales

Pruebas de humo automatizadas

Page 18: Automatización de pruebas funcionales

• Una prueba de humo comprueba que unas cuantas interacciones clave con el sistema se hacen bien justo después de un despliegue.

• Si se automatizan es mucho más rápido, cómodo y menos propenso a errores

Pruebas de humo automatizadas

Page 19: Automatización de pruebas funcionales

Refactorizando

Page 20: Automatización de pruebas funcionales

• Rescribiendo una parte del sistema que se tenga que seguir comportando externamente igual.

• Podemos cubrirlo de pruebas de GUI y ponerlas en una build para refactorizar con más seguridad.

• No es substituto de pruebas unitarias.• Útil en desarrollo brownfield.

Refactorizando

Page 21: Automatización de pruebas funcionales

¿CUANDO NO ES BUENO?

Page 22: Automatización de pruebas funcionales

• Para substituir otro tipo de pruebas que no se hacen por pereza o porque son complicadas.– Mejor pensar en como puedo poner pruebas unitarias

• Si la GUI está en continuo cambio– Prototipando– Metiendo mucha funcionalidad nueva que afecta a la

GUI

¿CUANDIO NO ES BUENO?

Page 23: Automatización de pruebas funcionales

PLANIFICAR LA AUTOMATIZACIÓN

Page 24: Automatización de pruebas funcionales

• Los identificaremos marcándo el Automation Status como planned en el MTM.

• Los escenarios comunes los pondremos como shared steps en el MTM.

• El orden lo marcamos con el campo order.

Identificación de casos

Page 25: Automatización de pruebas funcionales

• Hay que asegurarse que los tests seleccionados están soportados por Coded UI

• Pueden haber controles personalizados que no lo estén y que hacerlos automatizables sea muy costoso.

Prueba de concepto

Page 26: Automatización de pruebas funcionales

DEMO

Page 27: Automatización de pruebas funcionales

• Utilizar múltiples mapas de UI– Cada mapa se puede asociar con una parte lógica de la

aplicación– Cada tester puede trabajar en una sección de la

aplicación sin interferir en el trabajo de los demás.– Los añadidos a la UI se pueden escalar

incrementalmente con efectos mínimos en los otros tests.

Recomendaciones

Page 28: Automatización de pruebas funcionales

• Extraer las funcionalidades comunes de los mapas UI a librerías comunes.

Recomendaciones

Page 29: Automatización de pruebas funcionales

• Utilizar sincronización de objetos antes que wait/sleep estáticos– Asegurarse que tenemos puntos de sincronización que

esperan que el objeto exista/esté disponible/esté activado/etc antes de realizar una operación crítica• WaitForControlReady(),WaitForControlExist()

– Preferir la sincronización anterior antes que Playback.Wait() y antes que Thread.Sleep()

Recomendaciones

Page 30: Automatización de pruebas funcionales

• Tratamiento de errores– Asegurarse que utilizamos captura de excepciones en

todos los métodos de test

Recomendaciones

Page 31: Automatización de pruebas funcionales

• Logging– Asegurarse que logueamos mensajes importantes– Console.WriteLine y Console.Error.WriteLine• Se redirijen al StandardOutput y al StandardError.• Se recomienda no utilizarlos

Recomendaciones

Page 32: Automatización de pruebas funcionales

– Trace.WriteLine• Se muestra en la pantalla de Output de VS durante la fase de

depuración, con lo que se puede perder entre los otros mensajes que se muestran.• Se recomienda utilizarlo en código de producción, pero no de

test.

– Debug.WriteLine• Lo mismo que el anterior, pero solo en compilaciones Debug

Recomendaciones

Page 33: Automatización de pruebas funcionales

– TestContext.WriteLine• Se muestra en una sección a parte en el resultado de los

tests.• La desventaja es que tenemos que pasar el TestContext allí

donde queramos loguear.• Para los proyectos de test, es la solución preferida.

Recomendaciones

Page 34: Automatización de pruebas funcionales

• Utilizar scripts de inicio y fin– [TestInitialize] y [TestCleanup]– [ClassInitialize] y [ClassCleanup]– [AssemblyInitialize] y [AssemblyCleanup]

Recomendaciones

Page 35: Automatización de pruebas funcionales

DEMO

Page 36: Automatización de pruebas funcionales

• Do(s)– Cada método grabado tiene que actuar sobre una

página, formulario, dialog box, etc.– Utilizar el Coded UI Test Builder siempre que sea

posible.– Poner el foco explícitamente en la ventana donde el

test va a introducir datos.– Cuando sea posible, limitar cada método grabado a

pocas acciones, a poder ser a una.

Do’s and Don’ts of UI Automation

Page 37: Automatización de pruebas funcionales

– Crear un UIMap para cada modulo de nuestra aplicación e incluso para cada página.

– Si estamos creando aserciones crear un método por cada aserción en el fichero UIMap.cs

– Capturar screenshots en los fallos.– Dejar la UI en un estado conocido cuando un test ha

terminado.– Loguear antes de hacer algo, no después (o ambas)

Do’s and Don’ts of UI Automation

Page 38: Automatización de pruebas funcionales

– Loguear el origen del mensaje (framework, código de producción, test).

– Loguear cada operación válida realizada por el test– Utilizar tests dirigidos por datos siempre que se pueda– Refactorizar siempre que sea posible

Do’s and Don’ts of UI Automation

Page 39: Automatización de pruebas funcionales

• Don’t(s)– No modificar el fichero UIMap.designer.cs

directamente. Los cambios se perderían.– No hacer un sleep después de cada operación de UI– No lanzar la aplicación cada vez que se ejecuta un test

porque se gasta mucho tiempo.– No hardcodear strings en los tests. Esto incluye ID’s,

rutas, etc.

Do’s and Don’ts of UI Automation

Page 40: Automatización de pruebas funcionales

DEMO

Page 41: Automatización de pruebas funcionales

[email protected]

@vgaltes

www.plainconcepts.com

geeks.ms/blogs/devnettips

MUCHAS GRACIAS