Blog de Amazon Web Services (AWS)

Conoce el kit de prueba de aplicaciones integradas (IATK) de AWS

Esta publicacion fue escrita por Dan Fox, Principal Specialist Solutions, y Brian Krygsman, Senior Solutions Architect. Traducida al español por Christian Bolaños, arquitecto de soluciones en AWS Colombia.

En noviembre de 2023, AWS anunció el lanzamiento de una versión preliminar pública del kit de pruebas de aplicaciones integradas (IATK) de AWS. AWS IATK es una biblioteca de software que le ayuda a escribir pruebas automatizadas para aplicaciones basadas en la nube. Esta entrada de blog presenta varias características iniciales de AWS IATK y, a continuación, muestra ejemplos prácticos de aplicación de procesamiento de vídeo. Si está empezando con pruebas sin servidor, obtenga más información en serverlessland.com/testing.

Descripción general

Cuando crea aplicaciones compuestas por servicios sin servidor como AWS Lambda, Amazon EventBridge o AWS Step Functions, varios de los componentes de su arquitectura no se pueden desplegar en su escritorio, sino que solo existen en la nube de AWS. A diferencia de trabajar con aplicaciones implementadas localmente, estos tipos de aplicaciones se benefician de estrategias basadas en la nube para realizar pruebas automatizadas. Para su lanzamiento en versión preliminar pública, AWS IATK te ayuda a implementar algunas de estas estrategias para las aplicaciones de Python. AWS IATK soportará otros lenguajes en futuros lanzamientos.

Localizar recursos para pruebas

Cuando escribes pruebas automatizadas para los recursos de la nube, necesita los ID físicos de sus recursos. El ID físico es el nombre que AWS asigna a un recurso tras su creación. Por ejemplo, para enviar solicitudes a Amazon API Gateway, necesita el ID físico, que constituye el punto de enlace de la API.

Si despliega los recursos de la nube en pilas de infraestructura como código separadas, es posible que tenga dificultades para localizar los ID físicos. En CloudFormation, usted crea los ID lógicos de los recursos de la plantilla, así como el nombre de la pila. Con IATK, puede obtener el ID físico de un recurso si proporciona el ID lógico y el nombre de la pila. También puede obtener los valores de salida de la pila proporcionando el nombre de la pila. Estos métodos prácticos simplifican la localización de los recursos para las pruebas que escriba.

Creación de arneses de prueba para arquitecturas basadas en eventos

Para escribir pruebas de integración para arquitecturas basadas en eventos, establezca límites lógicos dividiendo la aplicación en subsistemas. Los subsistemas deben ser lo suficientemente simples como para poder analizarlos lógicamente, y contener entradas y salidas comprensibles. Una técnica útil para probar los subsistemas es crear arneses de prueba. Los arneses de prueba son recursos que se crean específicamente para probar subsistemas.

Por ejemplo, una prueba de integración puede iniciar un proceso del subsistema al transferirle un evento de prueba de entrada. IATK puede crear un arnés de prueba por usted que escucha Amazon EventBridge para eventos de salida. (A nivel interno, el arnés es compuesto por una regla de EventBridge que transfiere el evento de salida hacia Amazon Simple Queue Service). A continuación, la prueba de integración consulta el arnés de pruebas para examinar el resultado y determinar si la prueba se supera o no. Estos arneses le ayudan a crear pruebas de integración en la nube para arquitecturas basadas en eventos.

Establecer acuerdos de nivel de servicio para probar funciones asincrónicas

Si escribe un servicio sincrónico, sus pruebas automatizadas realizan solicitudes y esperan respuestas inmediatas. Cuando la arquitectura es asíncrona, el servicio acepta una solicitud y, posteriormente, realiza un conjunto de acciones. ¿Cómo se puede comprobar el éxito de una actividad si no tiene una duración específica?

Considere la posibilidad de crear tiempos de espera razonables para sus sistemas asíncronos. Documente los tiempos de espera como acuerdos de nivel de servicio (SLA). Puede decidir publicar sus SLA de forma externa o documentarlos como estándares internos. IATK contiene una función de sondeo que le permite establecer tiempos de espera. Esta función le ayuda a comprobar que sus sistemas asíncronos completan las tareas a tiempo.

Uso de AWS X-Ray para realizar pruebas detalladas

Si desea obtener más visibilidad de los detalles internos de su aplicación, utilice AWS X-Ray. Con AWS X-Ray, puede trazar la ruta de un evento a través de varios servicios. IATK ofrece facilidades que le ayudan a establecer la frecuencia de muestreo de AWS X-Ray, obtener árboles de rastros y determinar la duración de los rastros. Estas características le ayudan a observar y probar sus sistemas distribuidos con mayor detalle.

Obtenga más información sobre las pruebas de arquitecturas asíncronas en aws-samples/serverless-test-samples.

Descripción general de la aplicación con un ejemplo

Para demostrar las características de IATK, esta publicación utiliza como ejemplo una parte de una aplicación de vídeo sin servidor diseñada con una arquitectura de complementos. Un equipo de desarrollo central crea la aplicación principal. Los equipos de desarrollo distribuidos por toda la organización crean los complementos. Una pila de AWS CloudFormation despliega la aplicación principal. Cada complemento se implementa en pilas independientes.

Las comunicaciones entre la aplicación principal y los complementos se gestionan mediante un bus de EventBridge. Los complementos extraen del bus los eventos del ciclo de vida de las aplicaciones y deben volver a colocar los eventos de notificación de finalización en el bus en un plazo de 20 segundos. Para realizar las pruebas, el equipo central ha creado un flujo de trabajo de AWS Step Functions que imita el proceso de producción al emitir ejemplos de eventos del ciclo de vida con el formato adecuado. Los desarrolladores ejecutan este flujo de trabajo de prueba en entornos de desarrollo y prueba para comprobar que sus complementos se comunican correctamente con el bus de eventos.

La siguiente demostración enseña una prueba de integración para la aplicación de ejemplo que valida el comportamiento del complemento. En la prueba de integración, IATK localiza el flujo de trabajo de Step Functions. Crea un arnés de prueba para escuchar la notificación de finalización del evento que va a enviar el complemento. A continuación, la prueba ejecuta el flujo de trabajo para iniciar el proceso del ciclo de vida e iniciar las acciones del complemento. Luego, IATK utiliza un mecanismo de sondeo con un tiempo de espera para verificar que el complemento cumple con el acuerdo de nivel de servicio de 20 segundos. Esta es la secuencia de procesamiento:

ntegración de AWS Step Functions con EventBridge y un plugin externo, permitiendo flujos de trabajo basados en eventos.

  1. La prueba de integración inicia una ejecución del flujo de trabajo (Workflow) de la prueba.
  2. El flujo de trabajo coloca un evento del ciclo de vida en el bus.
  3. El complemento (Plugin) extrae el evento del ciclo de vida del bus.
  4. Cuando el complemento (Plugin) está completo, coloca un evento de finalización en el bus.
  5. La prueba de integración sondea el evento de finalización para determinar si la prueba se cumple dentro del SLA.

Despliegue y prueba de la aplicación del ejemplo

Siga estos pasos para revisar esta aplicación, crearla localmente, desplegarla en su cuenta de AWS y probarla.

Descargando la aplicación

1- Abre tu terminal y clona la aplicación de ejemplo desde GitHub con el siguiente comando o descarga el código. Este repositorio también incluye otros patrones de ejemplo para probar aplicaciones sin servidor.

git clone https://github.com/aws-samples/serverless-test-samples

2- La raíz de la aplicación de ejemplo de IATK está en python-test-samples/integrated-application-test-kit Cambie a este directorio:

cd serverless-test-samples/python-test-samples/integrated-application-test-kit

Revisión de la prueba de integración

Antes de desplegar la aplicación, revise cómo la prueba de integración utiliza la IATK; para ello, abra el archivo plugins/2-postvalidate-plugins/python-minimal-plugin/tests/integration/test_by_polling.py en su editor de texto. La clase de prueba crea una instancia del IATK en la parte superior del archivo.

iatk_client = aws_iatk.AwsIatk(region=aws_region)

En el método setUp (), la clase de prueba usa IATK para obtener las variables de salida de la pila de CloudFormation. Estas variables de salida son referencias a componentes de la nube desplegados, como el flujo de trabajo de AWS Step Functions para el probador de complementos:

stack_outputs = self.iatk_client.get_stack_outputs( 
                          stack_name=self.plugin_tester_stack_name, 
                          output_names= ["PluginLifecycleWorkflow", 
                         "PluginSuccessEventRuleName"], 
                           )  

La clase de prueba conecta un oyente al bus de eventos predeterminado mediante una regla de eventos que se proporciona en las variables de salida de la pila. La prueba utiliza este oyente más adelante para sondear los eventos.

add_listener_output = self.iatk_client.add_listener (event_bus_name="default", rule_name=self.existing_rule_name)

La clase de prueba limpia el oyente en el método tearDown ().

self.iatk_client.remove_listeners(ids= [self.listener_id])

Una vez completadas las configuraciones, el método test_minimal_plugin_event_published_polling() implementa la prueba actual.

La prueba primero inicializa el evento desencadenante.

trigger_event = {"eventHook": "postValidate", 
"pluginTitle": "PythonMinimalPlugin"}

A continuación, la prueba inicia una ejecución del flujo de trabajo Step Functions del probador de complementos. Utiliza el plugin_tester_arn que se obtuvo durante setUp.

self.step_functions_client.start_execution(stateMachineArn=self.plugin_tester_arn, 
input=json.dumps (trigger_event))

La prueba sondea al oyente y espera a que el complemento emita eventos. Deja de sondear cuando se agota el tiempo de espera del SLA o recibe el número máximo de mensajes.

poll_output = self.iatk_client.poll_events (listener_id=self.listener_id, 
wait_time_seconds=self.SLA_TIMEOUT_SECONDS, 
max_number_of_messages=1,
)

Por último, la prueba ratifica que recibe el número correcto de eventos y que están bien formados.

self.assertEqual (len (poll_output.events), 1) 
self.assertEqual(received_event["source"], "video.plugin.PythonMinimalPlugin") 
self.assertEqual (received_event ["detail-type"], "plugin-complete")

Requisitos previos de instalación

Necesita los siguientes requisitos previos para crear este ejemplo:

Cree y despliegue los componentes de la aplicación de ejemplo

1- Utilice AWS SAM para crear y desplegar el probador de complementos en su cuenta de AWS. El probador de complementos es el flujo de trabajo de Step Functions que se muestra en el diagrama anterior. Durante el proceso de compilación, puede añadir la marca –use-container al comando build para indicar a AWS SAM que cree la aplicación en un contenedor proporcionado. Puede aceptar o anular los valores predeterminados durante el proceso de despliegue. Utilizará “Stack Name” y “AWS Region” más adelante para ejecutar la prueba de integración.

cd plugins/plugin_tester # Ir al directorio  del probador de complementos  
sam build --use-container # Crea el probador de complementos

2- Despliegue el probador:

sam deploy --guided # Despliega el probador de complementos

3- Una vez desplegado el probador de complementos, utilice AWS SAM para desplegar el complemento.

cd ../2-postvalidate-plugins/python-minimal-plugin # Ir al directorio de complementos
sam build --use-container # Cree el complemento

4- Despliegue el complemento:

sam deploy --guided # Despliega el complemento

Ejecutando la prueba

Puede ejecutar pruebas escritas con IATK utilizando ejecutores de pruebas estándar de Python, como unittest y pytest. La prueba de aplicación de ejemplo usa unittest.

1- Utilice un entorno virtual para organizar sus dependencias. Desde la raíz de la aplicación de ejemplo, ejecute:

python3 -m venv .venv # Cree el entorno virtual .venv/bin/activate # Active el entorno virtual

2- Instale las dependencias, incluida la IATK:

cd tests pip3 install -r requirements.txt

3- Ejecute la prueba y proporcione las variables de entorno necesarias de las implementaciones anteriores. Puedes encontrar los valores correctos en el archivo samconfig.toml del directorio plugin_tester.

cd integration  
PLUGIN_TESTER_STACK_NAME=video-plugin-tester \
AWS_REGION=us-west-2 \
python3 -m unittest ./test_by_polling.py

Debería ver el resultado cuando como unittest ejecute la prueba.

Abra la consola de Step Functions en su cuenta de AWS y, a continuación, elija el flujo de trabajo PluginLifecycleWorkflow-<valor-aleatorio> para comprobar que el probador de complementos se ha ejecutado correctamente. Una ejecución reciente muestra el estado satisfactorio “Succeeded”:

Revise otras funciones de IATK

La aplicación de ejemplo incluye ejemplos de otras funciones de la IATK, como la generación de eventos simulados y la recuperación de trazas de rayos X de AWS.

Limpieza

Utilice AWS SAM para limpiar los recursos del complemento y del probador de complementos de su cuenta de AWS.

1- Elimine los recursos del complemento:

cd../.. # Ir al directorio de complementos sam delete # Eliminar el complemento

2- Elimine los recursos del probador de complementos:

cd../.. /plugin_tester # Ir al directorio del probador de complementos sam delete # Eliminar el probador de complementos

Los recursos del arnés de prueba temporal que IATK creó durante la prueba se limpian cuando se ejecuta el método TearDown. Si se producen problemas durante el desmontaje, es posible que algunos recursos no se eliminen. IATK añade etiquetas a todos los recursos que crea. Puede utilizar estas etiquetas para localizar los recursos y luego eliminarlos manualmente. También puedes añadir sus propias etiquetas.

Conclusión

El kit de pruebas de aplicaciones integradas de AWS es una biblioteca de software que ofrece la comodidad de ayudarle a escribir pruebas automatizadas para sus aplicaciones en la nube. Esta entrada de blog muestra algunas de las características de la versión inicial de Python de la IATK.

Para obtener más información sobre las pruebas automatizadas para aplicaciones sin servidor, visita serverlessland.com/testing. También puede ver ejemplos de código en serverlessland.com/testing/patterns o en el repositorio de AWS serverless-test-samples en GitHub.

Para obtener más recursos de aprendizaje sin servidor, visite Serverless Land.

Blog original: https://aws.amazon.com/es/blogs/compute/aws-integrated-application-test-kit/