El místico arte de las pruebas automatizadas

Sin experiencia en codificación y escribiendo casos de pruebas para una aplicación móvil en un lenguaje natural.

El místico arte de las pruebas automatizadas

Acto I. La Filosofía

Haces unos años atrás, tuve la oportunidad de explorar lo que en su momento, sin mucha experiencia en pruebas automatizadas de software, consideré: "una tecnología revolucionaria" así fue como percibí SpecFlow de primera mano.

De esta forma, poco a poco, me fui introduciendo en el místico arte de las pruebas automatizadas, para ir descubriendo los diferentes componentes que entrelazados, hicieron que probar un software de manera automatizada fuera lo más escalable y amigable no solo para mí como desarrollador sino para el personal de QA.

Comienza la lluvia de términos y conceptos, que si TDD, BDD, Gherkin, XUnit, NUnit, UI Testing, Unit Testing, Bla Bla Bla, Cucu Cu, Cucumber, BitBar, Appium, Selenium, Chillenium, etc. y la lista parecía nunca terminar, era abrumador cuantas cosas existían allí afuera para automatizar pruebas. No paso mucho tiempo cuando comencé a atar los cabos, y poco a poco entender como toda esta parafernalia se conectaba entre sí y de pronto comenzaba a tener sentido en mi cabeza. De los cuales inicialmente destaco:

  • Gherkin es lenguaje de dominio utilizado por los frameworks BDD para escribir casos de pruebas de forma que una persona pueda leerlo y sin mucho rodeo entender cuál es la intención de prueba.
  • ¿BDD?, sí, "Behavior-Driven Development" o desarrollo guiado por comportamiento, consiste en una metodología de desarrollo de software centrada en el comportamiento que los usuarios al interactuar con el mismo, es decir, como percibe el usuario final el software.
  • ¿Cucú? ¿Qué? Cucumber!, pues es nada más y nada menos que leer Gherkin, es una forma de intérprete, una herramienta para poder escribir pruebas y que puedan ser utilizables.

Por ejemplo:

Cucumber
Cucumber is a tool for running automated acceptance tests, written in plain language. Because they’re written in plain language, they can be read by anyone on your team, improving communication, collaboration and trust.

Ya con estos 3 conceptos, claros, comenzaba a entender hacia donde iban apuntando los requerimientos.

Se requería que personas sin experiencia en codificación pudieran escribir casos de pruebas para aplicaciones moviles en un lenguaje natural paso a paso, facil de entender y que además fuera capaz de ejecutar estos pasos sin necesidad de tener que hacer una codificación específica para cada uno.

Y fue en ese momento que entendí la magnitud del monstruo que se estaba creando.

Acto II. El trecho

Ya había internalizado la mitad del requerimiento, todo el tema filosófico de que personas sin experiencia en codificación puedan escribir pruebas, y pues evidentemente sonaba muy bonito y parecía algo que se podía hacer sin mucho lío, pero había un hueco, algo faltaba, ¿cómo podía hacer que esta serie de pasos, o pseudo lenguaje, pudiera ejecutar instrucciones en código dinámicamente? Así fue como conocí SpecFlow.

¿Open Source? Y ¿ejecuta BDD? ¿Además, utiliza Regex para mapear pasos? ¿Tiene hooks para ejecutar código durante las etapas de la prueba? ¿Cuenta con contextos de automatización y pruebas? ¡SEÑOR! ¡Que más se le puede pedir!!! Sí y bueno, tiene un montón más de características que lo hacían virtualmente perfecto para el trabajo. ¡Y lo fue!, por mucho tiempo, hasta qué...

... se acabó la magia.

Acto III. Let's Rock

Tras la caída de un grande, me quedo la inquietud de: "¿Y ahora que voy a usar?", allí fue que me encontré con:

Home • Reqnroll
Reqnroll is an open-source Cucumber-style BDD test automation framework for .NET. It has been created as a reboot of the SpecFlow project.

Básicamente, Reqnroll me ofrecía lo mismo que SpecFlow; es más, solo bastaba con cambiar la librería y una que otra palabra para hacerlo funcionar. Y bueno, funciona de maravilla, solo queda esperar que no lo discontinúen también o que cambien a un modelo propietario opresor, un clásico drama.

Acto IV. Un camino

Aún hay un camino más complicado en este viaje, en especial la integración con aplicaciones móviles, Android y iOS, ¿como poder hacer un script que funcione para ambas plataformas?, ¿dónde se ejecutan?

Pero me temo que no es el momento ni el lugar para entrar en detalles; solo puedo adelantar que fue una fumada hacer que todas las piezas funcionen, más adelante explicaré paso a paso como hacer este framework para pruebas automatizadas basadas en un BDD.