En este blog queremos mostrar cómo Pruebas unitarias ABAP se puede ejecutar desde un Canalización de CI/CD. Esto es relevante para todos los casos en los que se deba lograr un despliegue automático. Ejecutamos las pruebas unitarias ABAP respectivas a través de canalizaciones de Azure DevOps activadas automáticamente. Gráficamente resultados de prueba mostrados también se desea obtener. A continuación, comenzaré explicando el procedimiento aproximado y la arquitectura. Se puede ver una delineación gráfica en Figura 1.
Las pruebas unitarias ABAP que pertenecen a una clase ABAP son llamadas por una solicitud HTTP POST en una aplicación Node.js, que ejecuta código JavaScript. El paquete ABAP respectivo, que contiene las clases ABAP probadas, se inserta en un repositorio de GitHub, en el que colocamos una canalización de Azure DevOps. En consecuencia, nuestra canalización de Azure DevOps puede activarse mediante confirmaciones de su repositorio GitHub subyacente, respectivamente, mediante cambios en nuestros objetos de paquete ABAP a los que pertenecen las clases ABAP probadas.
Mientras tanto, la aplicación Node.js respectiva se inserta en otro repositorio de GitHub. Por lo tanto, usamos un repositorio diferente al que almacenamos el paquete ABAP. De lo contrario, sería necesario que todos los repositorios de GitHub de todos los paquetes ABAP que se probarán, y sobre los que colocamos las canalizaciones de Azure DevOps, contengan nuestra aplicación Node.js. Esto sería inconveniente y eventualmente podría causar esfuerzos de mantenimiento adicionales. Al clonar un repositorio particular de Node.js-App, evitamos estos problemas y posibles complicaciones de referencia. Luego, el repositorio de Node.js-App se clona en nuestra canalización, de modo que podamos ejecutar Node.js-App mediante la ejecución de nuestra canalización de Azure DevOps desencadenada.
En total, si una clase ABAP que se va a probar se cambia y se confirma en el repositorio de GitHub de su paquete ABAP, se activará la ejecución de una canalización de Azure DevOps conectada, que inicia una aplicación Node.js que llama a Unit-Tests en la clase ABAP y entrega Resultados de la prueba con formato JUnit.
Finalmente, una tarea lista para usar en nuestra canalización nos permite mostrar los resultados de las pruebas en un formato JUnit como gráficos expresivos en Azure DevOps.
Inicialmente, tratamos de aprovechar la abap_test_runner_cli, que prometía ejecutar Unit-Tests a través de entradas de línea de comando. Sin embargo, esto no se integró en nuestra canalización de Azure DevOps. Para obtener más información sobre abap_test_runner_cli, consulte Artículo del blog de Jakob Marius Kjær.
Luego cambiamos a la de Mattias Johansson. Aplicación Node.jsa lo que nos alineamos al implementar nuestro Unit-Test-running Aplicación Node.js. Las explicaciones detalladas del código y de la funcionalidad de la aplicación Node.js se pueden encontrar en Artículo de blog respectivo de Mattias Johansson.
Básicamente, nuestra aplicación Node.js primero llama a una solicitud HTTP GET para obtener un token CSRF necesario para ejecutar pruebas unitarias ABAP. Este token CSRF se incluye luego en la solicitud HTTP POST para ejecutar las pruebas unitarias ABAP. Por lo tanto, se utiliza como cuerpo un archivo XML, que incluye una llamada para ejecutar pruebas unitarias ABAP. Los resultados de las pruebas unitarias ABAP se transforman luego del formato AUnit a JUnit mediante el uso de un archivo XSL.
Al iniciar la aplicación Node.js, el nombre de usuario de SAP, la contraseña de SAP, el paquete ABAP que contiene las clases ABAP que se probarán y la ruta del archivo para los resultados de la prueba deben ser especificados por el usuario, por ejemplo como sigue:
npm start — –username=
El archivo de destino es, por lo tanto, opcional. Si no se especifica, se elegirá un archivo predeterminado. Este archivo de destino contiene los resultados de las pruebas en formato XML de nuestras pruebas unitarias ABAP.
Ahora, el paquete ABAP que contiene las clases ABAP que se probarán y la aplicación Unit-Testing Node.js deben integrarse en una canalización de Azure DevOps. Por lo tanto, primero insertamos el paquete ABAP respectivo en un repositorio de GitHub. Este repositorio de GitHub se usa luego para crear una canalización de Azure DevOps, de modo que una confirmación en este repositorio de paquetes ABAP se pueda usar como desencadenante de la canalización.
Figura 2 espectáculos en línea 6 que nuestra canalización se activa mediante confirmaciones de la rama principal del repositorio de GitHub subyacente. Más adelante hay que instalar Node.js.
Como se vio en figura 3luego clonamos un segundo repositorio de GitHub, que consiste en nuestra aplicación Node.js.
El repositorio de GitHub clonado se almacena en un diccionario de trabajo que tiene el mismo nombre que el repositorio de GitHub. En este directorio de trabajo, ejecutamos el instalar npm comando, y más tarde en el inicio de npm comando con variables especificadas, como se muestra en Figura 4.
Como se explicó anteriormente, nuestra aplicación Node.js almacena un archivo con resultados de prueba con formato JUnit en un diccionario que se puede especificar. Figura 5 muestra que se puede incluir una tarea DevOps lista para usar en la canalización que publica los resultados de las pruebas con formato JUnit como gráficos.
En figura 6 y figura 7 puede ver ejemplos de estos expresivos gráficos de resultados de pruebas.
En resumen, podemos concluir que la automatización de pruebas unitarias ABAP funciona con éxito aplicando la aplicación Node.js mencionada e integrando la aplicación en una compilación de canalización en el paquete ABAP que contiene las clases ABAP que se van a probar.
La integración continua de pruebas unitarias ABAP ofrece la ventaja de activar automáticamente pruebas unitarias mientras se trabaja en paquetes ABAP. esto definitivamente ahorra tiempo y esfuerzo.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073