Redireccionar salida a archivo

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:

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
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:

Y también podemos redireccionar el archivo:

Automatizando entrada de datos a Python
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
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:

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.

 

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

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.

Dejar un comentario