Pruebas en el software (testing)

Enviar contenido de archivo a programa y automatizar pruebas

En este post de programación te enseñaré a automatizar pruebas cuando solicitamos datos por teclado, sin importar el lenguaje de programación.

Cuando escribimos programas en donde se solicitan datos al usuario a través del teclado y probamos esos programas, debemos escribir los valores manualmente.

Si modificamos el programa o hay un error, lo volvemos a ejecutar y a llenar esos valores. Esto se hace tedioso cada vez, pues invertimos más tiempo probando que arreglando los errores o agregando mejoras.

Obviamente me estoy refiriendo a los programas por consola y en cuanto a “automatizar” me refiero a usar un archivo de texto con valores para pasarlos al programa en lugar de escribirlos manualmente.

Veamos entonces cómo automatizar la entrada de datos en programas. Te enseñaré un ejemplo con C y otro con Python, aunque este paradigma funcionará para cualquier otro lenguaje.

Lo que pasa cuando solicitamos un dato por teclado

Cuando leemos datos del teclado ya sea con scanf, input, etcétera en realidad el programa espera un salto de línea, mismo que ingresamos con la tecla Enter. Cuando ingresamos ese valor, el programa sabe que hemos terminado de ingresar los datos.

Siguiendo esta lógica, podemos crear un archivo separado por saltos de línea, escribir los valores en el orden que se solicitan y después pasarlo como stdin al programa.

Ejemplo del programa

Antes de pasar a la automatización te quiero mostrar a lo que me refiero. Esto es lo tedioso, rellenar los valores una y otra vez:

Solicitando datos por teclado

Ahora imagina hacer esto por cada prueba o cada nueva característica que agregas.

Automatizando entrada

Podemos usar los operadores de redireccionamiento para mandar el flujo del archivo hacia el programa. Primero veamos el archivo de texto que vamos a enviar:

Luis Cabrera Benito
23
1.6252

Los valores son los mismos que el programa anterior. Solo que ahora están en un archivo separado por saltos de línea. Y la magia viene a continuación. La sintaxis es:

programa < archivo

Así que para este caso que es un ejecutable, lo hago así:

main.exe < entrada.txt

Y realmente funciona:

Automatizar entrada de datos por teclado usando archivo

No hay una separación de líneas al solicitar los datos, pero eso no es problema. Si te fijas en el mensaje del final, los datos han sido introducidos correctamente.

Esto también funciona con Python. Tenemos el siguiente código:

# https://parzibyte.me/blog
nombre = input("Ingresa nombre: ")
edad = int(input("Ingresa edad: "))
altura = float(input("Ingresa altura: "))
print(f"Hola {nombre}. Tu edad es {edad} y tu altura es {altura}")

Y también podemos redireccionar el archivo:

Automatizando entrada de datos a Python

Como lo dije, debería funcionar para cualquier lenguaje de programación. Así es como podemos automatizar la entrada de datos por teclado gracias a los flujos.

Bonus: redireccionar salida

Así como el operador < permite la entrada, podemos usar > para redireccionar la salida. Esto abre muchas posibilidades, pues podemos comparar la salida del programa con una salida esperada que nosotros hayamos definido para realizar tests automáticos, pero eso es otro tema.

Veamos el ejemplo para redireccionar el archivo al programa, y luego redireccionar la salida de este a otro archivo:

Redireccionar salida a archivo

Yo sé que los flujos y redirecciones han existido desde siempre, pero hasta ahora se me vino a la mente la idea de que de este modo podemos probar aplicaciones que se ejecutan en la consola.

La salida en este caso es:

Ingresa nombre: Ingresa edad: Ingresa altura: Hola Luis Cabrera Benito. Tu edad es 23 y tu altura es 1.6252

La misma también se puede ver en la consola dentro de la imagen anterior. Y así es como podemos automatizar un poco este tedioso proceso.

Te dejo el código completo junto con los datos de entrada en mi Github.

 

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

4 días hace

Esta web usa cookies.