Pruebas de utilidades de línea de comandos

Rate this content
Bookmark

¿Alguna vez te has preguntado cuál es la mejor manera de probar tus utilidades de línea de comandos personalizadas? En esta charla, Florian Rappl te dará algunas ideas sobre lo que puedes hacer para verificar automáticamente tus herramientas CLI y evitar regresiones.

- Introducción: ¿Por qué probar las herramientas CLI?

- Desafíos: Contaminación del sistema de archivos, problemas de red y base de datos, variables de entorno

- Demostración: Mostrar problemas con una herramienta CLI de demostración - Soluciones: Implementación del plan de pruebas, elección del nivel adecuado de contenerización

- Demostración: Mostrar la solución utilizando la herramienta CLI anterior

- Conclusión

FAQ

SMAPIOK es una empresa con sede en Munich, Alemania, que se especializa principalmente en IoT y computación integrada. Están enfocados en proyectos de transformación digital, especialmente en aplicaciones web distribuidas.

Florian es un arquitecto de soluciones que trabaja en SMAPIOK. Además, es entusiasta del código abierto y ha sido galardonado como Microsoft MVP en el área de herramientas de desarrollo durante la última década.

Las utilidades de línea de comandos pueden ser difíciles de probar debido a la necesidad de manejar entradas y salidas en un entorno de terminal, además de coordinar procesos asíncronos y recursos como la red. También es importante probar su integración y funcionamiento correcto dentro de las aplicaciones.

Una estrategia es usar directorios temporales para cada prueba, lo que permite ejecuciones más rápidas y controladas. Otra es crear un directorio de plantilla que contenga todos los pasos necesarios para las pruebas y luego copiar este directorio para cada nueva prueba, reduciendo la redundancia y el tiempo de configuración.

Utilizan Jest como ejecutor de pruebas y Playwright para verificar la salida en un navegador. Las pruebas están escritas en TypeScript y se ejecutan en Azure Pipelines para un monitoreo y verificación continua.

Utilizan un asignador de puertos para asegurar que cada prueba obtenga un puerto libre, evitando conflictos de recursos. Además, emplean un administrador de recursos para manejar y limpiar servicios de manera confiable después de cada prueba.

Florian Rappl
Florian Rappl
34 min
03 Nov, 2022

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Las utilidades de línea de comandos son importantes de probar porque actúan como un punto de intersección entre diferentes partes de una aplicación. El principal desafío en la prueba de utilidades de línea de comandos es el rendimiento, que se puede mejorar mediante el uso de directorios temporales. La gestión de puertos y recursos es crucial para evitar conflictos al ejecutar múltiples conjuntos de pruebas. El contexto de prueba garantiza que los procesos se ejecuten en el contexto correcto, incluido el uso de los directorios correctos. Ejecutar pruebas en diferentes configuraciones ayuda a identificar problemas de compatibilidad y proporciona una cobertura de prueba integral.

Available in English: Testing CLI Utilities

1. Introducción a la Prueba de Utilidades de Línea de Comandos

Short description:

Bienvenidos a la sesión, Prueba de Utilidades de Línea de Comandos. Las utilidades de línea de comandos son importantes de probar porque actúan como un punto de intersección entre diferentes partes de una aplicación. Pueden acceder a recursos de red e interactuar con el sistema localmente, lo que requiere una coordinación adecuada y un entorno controlado. Estos desafíos hacen que las utilidades de línea de comandos sean particularmente interesantes para la prueba. Por ejemplo, PyCLI es una utilidad que ayuda con tareas de desarrollo web como la creación de estructuras y la ejecución de procesos de depuración.

Bienvenidos a la sesión, Prueba de Utilidades de Línea de Comandos. Espero que estén tan motivados como yo para comenzar.

Antes de comenzar, echemos un vistazo a mi persona. Hola, soy Florian. Soy un arquitecto de soluciones en una empresa más pequeña con sede en Munich, Alemania, llamada SMAPIOK. Nos dedicamos principalmente a IoT y computación integrada y estamos especializados en proyectos de transformación digital, especialmente en aplicaciones web distribuidas. También soy un entusiasta del código abierto. ¿Qué significa eso? Bueno, he sido galardonado como Microsoft MVP en el área de herramientas de desarrollo durante la última década. Paso la mayor parte de mi tiempo trabajando en proyectos en el espacio de .NET, JavaScript, TypeScript y desarrollo web. Escribo muchos artículos y también he escrito un libro sobre micro frontends y actualmente estoy escribiendo otro libro sobre el desarrollo de aplicaciones frontend con NoJazz, así que asegúrense de conseguir una copia. Pero basta de hablar de mí, vamos directo al tema antes de que se nos acabe el tiempo.

Entonces, ¿qué hace que las utilidades de línea de comandos sean difíciles de probar? ¿Qué hace que también sean atractivas de probar? Bueno, en primer lugar, quiero decir, CLI implica que se ejecutan en la línea de comandos, lo cual es bueno por un lado porque iniciar un proceso de terminal siempre es bastante fácil y en cierto sentido también fácil de trabajar, mucho más fácil que trabajar, por ejemplo, con una interfaz gráfica de usuario. Por otro lado, por supuesto, debes lidiar con algunas cosas como, por ejemplo, recibir la salida estándar o también colocar algunas entradas en el flujo estándar de entrada. Y, por supuesto, necesitas coordinar eso y tener tus procesos asíncronos correctamente. Las utilidades de línea de comandos a menudo proporcionan, digamos, un punto de intersección entre dos partes de una aplicación por lo que son bastante importantes de probar para que funcionen correctamente. Y confiamos mucho en las utilidades de línea de comandos, por lo que tenerlas funcionando de manera confiable siempre es lo que buscamos. De todos modos, estas utilidades de línea de comandos, al igual que cualquier otra aplicación, también pueden acceder a algunos recursos. Por ejemplo, por supuesto, recursos de red. Y sí, quiero decir, es posible que desees simular estos, es posible que necesites ejecutar servicios locales y también puede que necesites coordinar estos recursos. Así que eso es algo que debes tener en cuenta. También, por supuesto, con cada paso que das en una dirección de simulación, por supuesto, eliminas una fuente potencial de error para una ejecución posterior y deberás tenerlo en cuenta. Sin embargo, el área más importante es, por supuesto, lo que sucede localmente en el sistema. Por ejemplo, en el sistema de archivos, las operaciones de lectura y escritura deben estar correctamente aisladas. Si ejecutas especialmente múltiples pruebas en paralelo, no puedes simplemente ir a ciegas y decir lo que hacen estas utilidades que estoy probando es correcto, solo confío en que siempre funcionan en, no sé, directorios dedicados y que no hay condiciones de carrera o lo que sea, realmente ejecutándolos en paralelo. Y eso, por supuesto, se aplica a cualquier tipo de recurso del sistema al que accedan. Ya tenemos un conjunto de desafíos pero también un conjunto de cosas que hacen que las utilidades de línea de comandos sean particularmente interesantes para la prueba.

Muy bien, yendo un poco más allá y pensando en algunos desafíos que surgen en eso, ya hemos hablado sobre la entrada y salida. Servir contenido ya se mencionó brevemente solo para recordarles. Por ejemplo, digamos que lo que vamos a probar es el llamado PyCLI. Es una pequeña utilidad que ayuda con algunas tareas relacionadas con el desarrollo web. Una de ellas es la creación de estructuras, pero otra que harías bastante después de la creación de estructuras es ejecutar, por ejemplo, un proceso de depuración con ella.

2. Verificación de Puerto y Contenido, Manejo de Fragmentación

Short description:

La utilidad de línea de comandos abre un puerto y sirve contenido en ese puerto. Para garantizar la corrección, podemos hacer ping al puerto y usar utilidades como BlayWrite para acceder y verificar el contenido. La fragmentación es un desafío común donde la utilidad coloca contenido en varios directorios. Esto se puede evitar limpiando después de cada prueba y asegurando el aislamiento de las pruebas.

Y este proceso de debug en realidad abre un servidor web en tu máquina local. Ahora queremos, por supuesto, verificar que esto se haya abierto correctamente. Y, por supuesto, esta parte de la CLI que abre algún puerto es algo que debemos tener en cuenta. Ahora, ¿cómo nos aseguramos de que se haya abierto el puerto correcto, pero también, por supuesto, de que el contenido servido en el puerto sea correcto? Necesitas, por supuesto, tener todas esas preguntas respondidas.

En nuestro caso, lo que hicimos, por supuesto, es asegurarnos de tener solo un ping en el puerto, que el puerto esté activo, pero luego, lo que podemos hacer es usar utilidades como BlayWrite para acceder realmente al contenido, leerlo y verificarlo con, digamos, una fuente de expectativa para asegurarnos de que los recursos reservados sean los mismos.

Ahora, la fragmentación es algo que aparecerá con bastante frecuencia, lo que significa que una utilidad de CLI puede, digamos, colocar contenido que, por ejemplo, crea en un par de directorios. Y no quieres que eso suceda tan a menudo, porque en primer lugar, necesitas limpiar después de cada prueba. Y en segundo lugar, necesitas asegurarte de que la prueba, por supuesto, se mantenga aislada, ¿verdad? Que puedas ejecutar, por ejemplo, múltiples casos de prueba en paralelo o múltiples suites de pruebas. Y si no tienes control sobre dónde la utilidad que deseas probar coloca los archivos, podrías encontrarte con estas condiciones de carrera que mencioné anteriormente.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Despliegue Atómico para Hipsters de JavaScript
DevOps.js Conf 2024DevOps.js Conf 2024
25 min
Despliegue Atómico para Hipsters de JavaScript
Desplegar una aplicación no es un proceso fácil. Te encontrarás con muchos problemas y puntos de dolor que resolver para que funcione correctamente. Lo peor es: ahora que puedes desplegar tu aplicación en producción, ¿cómo no vas a poder desplegar también todas las ramas del proyecto para tener acceso a vistas previas en vivo? ¿Y poder hacer un revert rápido a pedido?Afortunadamente, el clásico conjunto de herramientas de DevOps tiene todo lo que necesitas para lograrlo sin comprometer tu salud mental. Al mezclar expertamente Git, herramientas de Unix y llamadas a API, y orquestar todo ello con JavaScript, dominarás el secreto de los despliegues atómicos seguros.No necesitarás depender de servicios comerciales: ¡conviértete en el maestro perfecto de las herramientas y netlifica tu aplicación desde casa!
Pruebas de rendimiento efectivas para su servidor con Autocannon
TestJS Summit 2021TestJS Summit 2021
36 min
Pruebas de rendimiento efectivas para su servidor con Autocannon
Top Content
Experiencia en pruebas de rendimiento que se ha desarrollado durante mucho tiempo. Para medir el rendimiento de su servidor, necesita una herramienta que pueda simular eficientemente muchas habilidades y proporcionarle buenas mediciones según sus criterios de análisis.La biblioteca NPM de Autocannon me dio exactamente eso: esa biblioteca es muy fácil de instalar y tiene una API muy simple con la que trabajar. En un corto período de tiempo, puede comenzar a realizar pruebas de rendimiento en su aplicación y obtener buenas mediciones en el entorno de desarrollo y en sus laboratorios de rendimiento, y generar escenarios de prueba complicados.En esta charla presentaré Autocannon, explicaré cómo analizar eficientemente el rendimiento de su servidor con él y mostraré cómo me ayudó a entender problemas de rendimiento complicados en mis servidores Node.js. Al final de esta conferencia, los desarrolladores tendrán la capacidad de integrar una herramienta rápida y fácil para medir el rendimiento de su servidor.
Pruebas de integración encantadoras con Testcontainers
TestJS Summit 2022TestJS Summit 2022
21 min
Pruebas de integración encantadoras con Testcontainers
Top Content
Los servicios Dockerizados son una excelente herramienta para crear entornos aislados y repetibles ideales para pruebas de integración. En esta sesión, veremos las bibliotecas de Testcontainers que proporcionan una API flexible e intuitiva para controlar programáticamente el ciclo de vida de las dependencias de su servicio en contenedores Docker. Ejecutar bases de datos, Kafka, Elasticsearch e incluso tecnologías en la nube, directamente desde su código de prueba asegura que la configuración del entorno siempre esté actualizada y sea consistente durante el desarrollo local y en los pipelines de CI.Aprenderás todo lo necesario para comenzar a agregar pruebas de integración poderosas a tu base de código sin el dolor de cabeza de administrar dependencias de servicio externas manualmente!
Regresión Visual con Puppeteer, Playwright y Cypress
TestJS Summit 2021TestJS Summit 2021
9 min
Regresión Visual con Puppeteer, Playwright y Cypress
Top Content
Las pruebas de Regresión Visual se realizan a través de la coincidencia de capturas de pantalla. Mostraré cómo hacerlo en tres diferentes bibliotecas/marcos de trabajo. Además, utilizaré Storybook para extraer los componentes de tu elección de SPA.
¿Playwright puede hacer esto?
TestJS Summit 2022TestJS Summit 2022
23 min
¿Playwright puede hacer esto?
Garantizar que tu aplicación no se rompa mientras envías constantemente nuevas características es difícil. Obviamente, con una aplicación o sitio en constante crecimiento, no puedes probar todo manualmente todo el tiempo.La automatización de pruebas y el monitoreo son cruciales para evitar enviar aplicaciones y sitios rotos. Pero, ¿qué funcionalidad debes probar? ¿Cuándo debes ejecutar tus pruebas? ¿Y no son las suites de pruebas complejas muy lentas?En esta sesión, pondremos manos a la obra con Playwright, el marco de pruebas de extremo a extremo, y aprenderemos cómo automatizar navegadores sin cabeza para asegurarnos de enviar nuevas características con confianza.
La Guía del Desarrollador Perezoso: ¿Cómo Automatizar las Actualizaciones de Código?
DevOps.js Conf 2022DevOps.js Conf 2022
22 min
La Guía del Desarrollador Perezoso: ¿Cómo Automatizar las Actualizaciones de Código?
¿Cómo actualizar cientos de proyectos de una vez? Con el rápido crecimiento de las organizaciones, la demanda de escalabilidad de los equipos crece, lo que afecta directamente la estructura y propiedad de los proyectos. El dilema habitual es mono vs. multi-repos, pero... ¿Y si te digo que no importa mucho? Ambos enfoques pueden golpearte en algún momento, así que tal vez es mejor pensar de abajo hacia arriba.
Hoy te guiaré a través de algunos de los mayores desafíos que existen en ambos enfoques, como la gestión de dependencias en cientos de proyectos, las actualizaciones globales de código y muchas otras cosas. También te mostraré ejemplos de cómo resolvimos esto dentro de Infobip mediante la construcción de nuestras propias bibliotecas internas.

Workshops on related topic

Pruebas automatizadas de accesibilidad con jest-axe y Lighthouse CI
TestJS Summit 2021TestJS Summit 2021
85 min
Pruebas automatizadas de accesibilidad con jest-axe y Lighthouse CI
Workshop
Bonnie Schulkin
Bonnie Schulkin
¿Incluyen tus pruebas automatizadas verificaciones de accesibilidad? Este masterclass cubrirá cómo comenzar con jest-axe para detectar violaciones de accesibilidad basadas en código, y Lighthouse CI para validar la accesibilidad de las páginas completamente renderizadas. Ninguna cantidad de pruebas automatizadas puede reemplazar las pruebas manuales de accesibilidad, pero estas verificaciones se asegurarán de que tus probadores manuales no estén haciendo más trabajo del necesario.
Automatización de pruebas utilizando WebdriverIO
TestJS Summit 2022TestJS Summit 2022
163 min
Automatización de pruebas utilizando WebdriverIO
Workshop
Kevin Lamping
Kevin Lamping
En este masterclass, cubro no solo lo que WebdriverIO puede hacer, sino también cómo lo utilizarás día a día. He construido los ejercicios en torno a escenarios del mundo real que demuestran cómo realmente configurar las cosas. No es solo "qué hacer", sino específicamente "cómo llegar allí". Cubriremos los fundamentos de las pruebas automatizadas de UI para que puedas escribir pruebas mantenibles y útiles para tu sitio web y/o aplicación web.
JS Automatización de Pruebas de Seguridad para Desarrolladores en Cada Compilación
TestJS Summit 2021TestJS Summit 2021
111 min
JS Automatización de Pruebas de Seguridad para Desarrolladores en Cada Compilación
WorkshopFree
Oliver Moradov
Bar Hofesh
2 authors
Como desarrollador, necesitas entregar rápido y simplemente no tienes tiempo para pensar constantemente en seguridad. Aún así, si algo sale mal, es tu trabajo arreglarlo, pero las pruebas de seguridad bloquean tu automatización, crean cuellos de botella y solo retrasan las versiones... pero no tiene por qué ser así...

El escáner de seguridad de NeuraLegion, enfocado en los desarrolladores, Dynamic Application Security Testing (DAST), permite a los desarrolladores detectar, priorizar y remediar problemas de seguridad de manera TEMPRANA, en cada confirmación, sin falsos positivos/alertas, sin ralentizarte.

¡Únete a esta masterclass para aprender diferentes formas en que los desarrolladores pueden acceder a Nexploit y comenzar a escanear sin salir de la terminal!

Recorreremos la configuración de principio a fin, mientras configuramos un pipeline, ejecutamos pruebas de seguridad y analizamos los resultados.

Tabla de contenidos:
- Qué es realmente DAST (Dynamic Application Security Testing) enfocado en los desarrolladores y cómo funciona
- Ver dónde y cómo encaja un DAST moderno y preciso en el CI/CD
- Integrar el escáner Nexploit de NeuraLegion con GitHub Actions
- Comprender cómo se pueden probar las aplicaciones modernas, las API y los mecanismos de autenticación
- Hacer un fork de un repositorio, configurar un pipeline, ejecutar pruebas de seguridad y analizar los resultados
Automatización de pruebas de seguridad para desarrolladores en cada compilación
GraphQL Galaxy 2021GraphQL Galaxy 2021
82 min
Automatización de pruebas de seguridad para desarrolladores en cada compilación
WorkshopFree
Oliver Moradov
Bar Hofesh
2 authors
Como desarrollador, necesitas entregar rápido y simplemente no tienes tiempo para pensar constantemente en seguridad. Aún así, si algo sale mal, es tu trabajo arreglarlo, pero las pruebas de seguridad bloquean tu automatización, crean cuellos de botella y solo retrasan las versiones, especialmente con graphQL... pero no tiene por qué ser así...

El escáner de seguridad de NeuraLegion, enfocado en los desarrolladores, permite detectar, priorizar y remediar problemas de seguridad de manera temprana, en cada confirmación, sin falsos positivos o alertas, sin ralentizarte.

Únete a esta masterclass para aprender diferentes formas en las que los desarrolladores pueden acceder al escáner de seguridad de NeuraLegion y comenzar a escanear sin salir de la terminal!

Recorreremos la configuración de principio a fin, mientras configuramos un pipeline para un objetivo GraphQL vulnerable, ejecutamos pruebas de seguridad y analizamos los resultados.

Tabla de contenidos:
- Qué es realmente el escáner de seguridad de NeuraLegion enfocado en los desarrolladores (Dynamic Application Security Testing) y cómo funciona
- Ver dónde y cómo encaja un escáner moderno y preciso enfocado en los desarrolladores en el CI/CD
- Integrar el escáner de NeuraLegion con GitHub Actions
- Comprender cómo se pueden probar las aplicaciones modernas, GraphQL y otras API y mecanismos de autenticación
- Hacer un fork de un repositorio, configurar un pipeline, ejecutar pruebas de seguridad y analizar los resultados