Patrones de automatización de UI y mejores prácticas para aplicaciones de escritorio

9

Antecedentes

Actualmente estoy automatizando algunas pruebas para un complemento para MS Office. Estamos creando pruebas de IU codificadas en VS 2010. Supongo que podría usar la herramienta " Generador de pruebas de IU codificadas ", pero en realidad no se ajusta a mi caso particular.

Debido a esto, creé mi propia clase de Mapa de UI y métodos de extensión para cada Control / Mapa de UI donde agrego una funcionalidad de acción diferente. Por ejemplo, presione los botones o afirme algunos valores de IU.

Los escenarios de los casos de prueba están en las clases de prueba.

Soy nuevo en esta área y también soy nuevo en el trabajo como probador de automatización.

La pregunta

¿Sería la gente lo suficientemente amable como para compartir su experiencia y consejos sobre algunas buenas prácticas para la automatización de pruebas en aplicaciones de escritorio desde un punto de vista de programación / diseño?

CoffeeCode
fuente
Una de mis funciones principales es la automatización de la interfaz de usuario ... y me perdí media docena de veces leyendo esta pregunta. No tengo idea de lo que significa la mitad de los términos técnicos que usaste. ¿Es esta pregunta específica de algún entorno o idioma? Eso probablemente debería ser una etiqueta.
Sparr
@Sparr Edité la pregunta para hacerla más accesible. Espero que aún se ajuste al requisito.
Gary Rowe

Respuestas:

6

La mejor práctica para las pruebas de automatización de la interfaz de usuario es hacer lo menos posible. Las interfaces de usuario cambian con frecuencia, lo que significa que constantemente tiene que actualizar su automatización. En general, es preferible estructurar el código del producto de una manera que permita realizar pruebas automatizadas sin automatización de la interfaz de usuario.

Dicho esto, no siempre puedes deshacerte de UI Automation. Menciona Office, así que supongo que está codificando para Windows y está usando .Net. Hago bastante en mi trabajo actual. Estas son algunas de las cosas que he aprendido.

1) Mire las bibliotecas de UIAutomation que se introdujeron en .Net 3.0. Proporcionan una biblioteca extensa y bastante simple de usar para la automatización. (http://msdn.microsoft.com/en-us/library/ms753107.aspx)

2) Descargue UISpy (http://msdn.microsoft.com/en-us/library/ms727247.aspx)

3) Haga que las IU de su producto sean automatizables.

3a) Si se trata de WPF, ponga AutomationIDs en todo.

3b) Intente crear un control distintivo y nombres de clase de ventana (nombres de clase de UI, no nombre de clase de código fuente). Si no sabe a qué me refiero, cargue UI Spy y comience a mirar las ventanas. Observe cuántas ventanas en diferentes aplicaciones tienen un nombre de clase de # 32770. Este es el nombre de la clase para un cuadro de diálogo de Windows. Cualquier ventana que extienda el diálogo y no establezca su propio nombre, por defecto es esto. Esto causa todo tipo de dolor desde el punto de vista de la automatización de la interfaz de usuario.

4) Evite las declaraciones Thread.Sleep (). Intente usar Waiters (consulte los documentos de UIAutomation) en su lugar.

5) NUNCA mezcle el código de prueba con el código de automatización de la interfaz de usuario. Cree bibliotecas separadas para realizar la automatización de la interfaz de usuario. Llame a estas bibliotecas desde sus pruebas. Cuando la interfaz de usuario cambia, esto hará que sea mucho más fácil actualizar la automatización.

6) Siempre registre un oyente para un evento de IU antes de realizar la acción que provocaría que el evento se disparara. En la práctica, esto significa que trabajará con hilos.

6a) Ejemplo: no empiece a esperar un evento de Ventana abierta después de hacer clic en un botón para abrir la ventana. La ventana puede abrirse antes de que el camarero se registre y nunca obtener el evento.

7) Nunca asumas que la ventana que acaba de abrir es la que deseas. Se pueden abrir inesperadamente todo tipo de ventanas en Windows.

Podría seguir más, pero esto se está haciendo un poco largo.

aef123
fuente
1) - 3) es para personas que escriben la solicitud bajo prueba. 6) fue un aprendizaje difícil para mí también. :)
Andreas Reiff
2

Cree pruebas funcionales a partir de casos de uso reutilizables

Cuando llega el momento de probar su aplicación de extremo a extremo in situ, está realizando pruebas funcionales. Por lo general, tendrá un conjunto de requisitos con los que está probando y podrá construir varios casos de uso que los representen.

Como ejemplo, considere el caso de uso "Iniciar sesión como usuario estándar". Su marco de prueba activa la aplicación, espera la pantalla de inicio de sesión, ingresa algunas credenciales, hace clic en el botón de inicio de sesión y verifica que la pantalla apropiada muestra que el inicio de sesión fue exitoso.

Después de haber realizado el caso de uso "Iniciar sesión como usuario estándar", querrá aprovecharlo para hacer otra cosa, tal vez el caso de uso "Editar mis datos de usuario". No querrá repetir todo el código del caso de uso "Iniciar sesión como usuario estándar", por lo que solo debe hacer una referencia al código de marco de prueba que hace ese bit.

Esto implica que tiene algún tipo de prueba funcional de sobrecarga que contiene una lista de casos de uso. Estos casos de uso contienen los métodos del marco de prueba para provocar el comportamiento de la aplicación (haga clic en el botón X) y verificar el comportamiento (la pantalla se vuelve azul).

En general, puede crear un conjunto de casos de uso reutilizables que apunten a secuencias específicas y probar respuestas específicas, y luego agregarlas en varias pruebas funcionales que se correlacionan estrechamente con los requisitos comerciales. Una vez que tenga eso en su lugar, estará en una excelente posición para automatizar completamente todo su proceso de construcción .

Si está interesado en leer más , he escrito sobre este enfoque en otro lugar, pero el artículo está dirigido a aplicaciones web en Java (usando Maven y SeleniumRC) en lugar de las aplicaciones de escritorio que ha solicitado.

Gary Rowe
fuente