En este capítulo, vamos a explorar distintas formas de probar Azure Functions con mayor detalle con las siguientes recetas:
- Probar Azure Functions:
° Probar los desencadenadores de HTTP mediante Postman
° Probar el desencadenador de blob mediante el explorador de Microsoft Storage
° Probar el desencadenador de cola mediante el portal de administración de Azure
- Probar una función de Azure en un entorno preconfigurado mediante ranuras de implementación
- Realizar pruebas de carga de Azure Functions mediante Azure DevOps
- Crear y probar la función de Azure a nivel local mediante herramientas de CLI de Azure
- Probar y validar la capacidad de respuesta de la función de Azure mediante Application Insights
- Desarrollar pruebas unitarias para Azure Functions con desencadenadores de HTTP
Introducción
En los capítulos anteriores, has descubierto cómo desarrollar Azure Functions y cuándo pueden resultar útiles. Además, has aprendido a validar la funcionalidad de dichas funciones.
En este capítulo, vamos a echar un vistazo a las formas de probar distintas Azure Functions. Esto incluye, por ejemplo, realizar pruebas de funciones del desencadenador de HTTP mediante Postman y utilizar el explorador de Microsoft Storage para probar desencadenadores de blob de Azure, desencadenadores de cola y otros desencadenadores relacionados con los servicios de almacenamiento. También vas a aprender a realizar una prueba de carga sencilla en un desencadenador de HTTP para ayudarte a comprender cómo funciona la arquitectura sin servidor mediante al aprovisionamiento de las instancias del backend sin que los desarrolladores tengan que preocuparse de los ajustes de escalado con distintos factores. El runtime de Azure Function escalará automáticamente las instancias.
También descubrirás cómo configurar una prueba que verifique la disponibilidad de nuestras funciones haciendo ping continuamente a los puntos de conexión de la aplicación en una frecuencia predefinida desde distintas ubicaciones.
Probar Azure Functions
El runtime de Azure Function nos permite crear e integrar muchos servicios de
Azure. A fecha de redacción del presente documento, existen más de 20 tipos de Azure Functions que puedes crear. En esta receta, aprenderás a probar las Azure Functions más comunes, tal como se indica a continuación:
- Probar los desencadenadores de HTTP mediante Postman
- Probar el desencadenador de blob mediante el explorador de Microsoft Storage
- Probar el desencadenador de cola mediante el portal de administración de Azure
Preparación
Si no lo has hecho previamente, instala las siguientes herramientas:
- Postman: puedes descargarla en https://www.getpostman.com/
- Explorador de Microsoft Azure Storage: puedes descargarlo en http://storageexplorer.com/
Puedes usar el explorador de Storage para conectarte a las cuentas de almacenamiento y ver todos los datos disponibles de distintos servicios de almacenamiento, como blobs, colas, tablas y archivos. También los puedes crear, actualizar y eliminar desde el explorador de Storage.
Cómo hacerlo…
En esta sección, vamos a crear tres Azure Functions con las plantillas predeterminadas disponibles en el portal de administración de Azure y, a continuación, las probaremos con diferentes herramientas.
Probar los desencadenadores de HTTP mediante Postman
Sigue estos pasos:
- Crea una función de desencadenador de HTTP que acepte los parámetros Firstname y Lastname y los envíe como respuesta. Cuando se haya creado, establece el Nivel de autorización como Anónimo.
- Reemplaza el código predeterminado por el siguiente. Ten en cuenta que he eliminado las validaciones para facilitar la tarea. En las aplicaciones en tiempo real, deberás validar todos los parámetros de entrada:
#r «Newtonsoft.Json»
using System.Net; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static async Task<IActionResult> Run(HttpRequest req,
ILogger log) {
log.LogInformation(«C# HTTP trigger function processed
a request.»);
string firstname=req.Query[«firstname»]; string lastname=req.Query[«lastname»];
string requestBody = await new StreamReader(req.Body). ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
firstname = firstname ?? data?.firstname; lastname = lastname ?? data?.lastname;
return (ActionResult)new OkObjectResult($»Hello,
{firstname + » » + lastname}»);
}
- Abre la herramienta Postman y sigue estos pasos:
- E n primer lugar, elige el tipo de método HTTP con el que quieras realizar la solicitud HTTP. De forma predeterminada, nuestra función acepta la mayoría de los métodos. Elige el método GET, tal como se muestra a continuación:

- E l siguiente paso es proporcionar la URL del desencadenador de HTTP. Ten en cuenta que deberás sustituir
<HttpTriggerTestUsingPostman> por el nombre de tu función HttpTrigger, tal como se muestra a continuación:

- Haz clic en el botón Enviar para realizar la solicitud. Si has proporcionado todos los detalles que espera la API, verás Estado: 200 OK, junto con la respuesta, tal como se muestra continuación:

Probar un desencadenador de blob mediante el explorador de Microsoft Storage
Sigue estos pasos:
- Para crear un nuevo desencadenador de blob, elige la plantilla de desencadenador de Azure Blob Storage, tal como se indica a continuación:

- Cuando hagas clic en la plantilla de la captura de pantalla anterior, se te pedirá que proporciones una cuenta de almacenamiento y un contenedor en el que almacenarás el blob, tal como se muestra a continuación:

- Vamos a realizar una conexión con la cuenta de almacenamiento que utilizaremos en esta receta. Abre el explorador de Microsoft Azure Storage y haz clic en el botón que se destaca en la siguiente captura de pantalla para conectarte a Azure Storage:

- Se te pedirá que introduzcas detalles, incluida la cadena de conexión de almacenamiento, la firma de acceso compartido (SAS) y la clave de la cuenta. Para esta receta vamos a usar la cadena de conexión de almacenamiento. Dirígete a Cuenta de almacenamiento, copia la cadena de conexión de la hoja Claves de acceso y pégala en la ventana emergente Explorador de Microsoft Azure Storage – Conectar, tal como se indica a continuación:

- Al hacer clic en el botón Siguiente de la captura de pantalla anterior, accederás a la ventana Resumen de la conexión, que muestra el nombre de la cuenta y otra información relacionada para su confirmación. Haz clic en el botón Conectar para conectarte a la cuenta de Azure Storage que decidas.
- Como se muestra en la siguiente captura de pantalla, ya estás conectado a la cuenta de Azure Storage, desde la que podrás gestionar todos los servicios de Azure Storage:

- Vamos a crear un contenedor de almacenamiento denominado samplesworkitems. Haz clic con el botón derecho en la carpeta Contenedores de blobs y, a continuación, en Crear contenedor de blobs para crear un nuevo contenedor de blobs denominado samples-workitems. Haz clic en el botón Cargar archivos, tal como se muestra en la siguiente captura de pantalla:

- En la ventana Cargar archivos, selecciona el archivo que quieras subir y haz clic en el botón Cargar.
- Inmediatamente después, ve al editor de código de la función de Azure y echa un vistazo a la ventana Registros, tal como se muestra en la siguiente captura de pantalla. El registro indica que la función de Azure se desencadena correctamente:

Probar el desencadenador de cola mediante el portal de administración de Azure
Sigue estos pasos:
- Crea un nuevo desencadenador de cola de Azure Storage denominado QueueTriggerTestusingPortal, tal como se muestra en la siguiente captura de pantalla. Anota el nombre de la cola, myqueue-items, ya que posteriormente deberemos crear un servicio de cola con el mismo nombre mediante el portal de administración de Azure:

- Dirígete a la hoja Información general de la cuenta de almacenamiento y haz clic en Colas, tal como se muestra en la siguiente captura de pantalla:

- En la hoja Servicio de cola, haz clic en Cola para añadir una cola nueva:

- Escribe myqueue-items en el Nombre de cola en la ventana emergente Agregar a la cola, tal como se muestra en la siguiente captura de pantalla. Se trata del mismo nombre que usamos al crear el desencadenador de cola. Haz clic en Aceptar para crear el servicio de cola:

- Ahora vamos a crear un mensaje de cola. En el portal de administración de Azure, haz clic en el servicio de cola myqueue-items para acceder a la hoja Mensajes. Haz clic en el botón Agregar mensaje, tal como se indica en la siguiente captura de pantalla. Escribe el texto para el mensaje de cola. Por último, haz clic en Aceptar para crear el mensaje de cola:

- Inmediatamente después, dirígete al desencadenador de cola
QueueTriggerTestusingPortal y revisa la hoja Registros. En ella podrás descubrir cómo se ha desencadenado la función de cola, tal como se muestra en la siguiente captura de pantalla:

Y eso no es todo…
Para todos los desencadenadores de HTTP, si quieres que los clientes de la API solo utilicen el método POST, restríngelo. Para ello, elige Métodos seleccionados y solo POST en Métodos HTTP seleccionados, tal como se muestra en la siguiente captura de pantalla:

Probar una función de Azure en un entorno preconfigurado mediante ranuras de implementación
En general, todas las aplicaciones necesitan entornos de preproducción, como ensayos, betas, etc., para revisar las funcionalidades antes de publicarlas para los usuarios finales.
Aunque los entornos de preproducción son fantásticos y ayudan a las partes interesadas a validar la funcionalidad de la aplicación en relación con los requisitos empresariales, también pueden ser difíciles de gestionar y mantener. A continuación, se muestran algunos de estos puntos débiles:
- Tendríamos que crear y utilizar un entorno independiente para nuestros entornos de preproducción.
- Cuando todo se hubiese revisado en preproducción y el equipo de operaciones de TI recibiese la aprobación, habría un tiempo de inactividad en el entorno de producción al implementar el código base de nuevas funcionalidades.
Las limitaciones anteriores se pueden cubrir en Azure Functions mediante una función denominada ranuras (se denominan ranuras de implementación en los entornos de App Service). Con las ranuras puedes configurar un entorno de preproducción en el que puedes revisar las nuevas funcionalidades y promover su paso (mediante el intercambio, que comentaremos en un momento) al entorno de producción sin problemas y cuando lo necesites.
Cómo hacerlo…
Sigue estos pasos:
- Crea una nueva aplicación de función denominada MyProductionApp.
- Crea un nuevo desencadenador de HTTP y llámalo MyProd-HttpTrigger1. Sustituye la última línea por lo siguiente:
return name != null
? (ActionResult)new OkObjectResult(«Welcome to MyProd-
HttpTrigger1 of Production App»)
: new BadRequestObjectResult(«Please pass a name on the query string or in the request body»);
- Crea otro desencadenador de HTTP y llámalo MyProd-HttpTrigger2. Usa el mismo código que para MyProd-HttpTrigger1 y sustituye la última línea por lo siguiente:
return name != null
? (ActionResult)new OkObjectResult(«Welcome to MyProd-
HttpTrigger2 of Production App»)
: new BadRequestObjectResult(«Please pass a name on the query string or in the request body»);
- Supongamos que ambas funciones de la aplicación de función están activas en el entorno de producción con la URL https://<<functionappname. azurewebsites.net>>.
- El cliente nos ha pedido que modifiquemos ambas funciones. En lugar de aplicar directamente los cambios a las funciones de la aplicación de función de producción, es posible que debas crear una ranura.
- ¡Cuidado! Antes de crear una ranura, deberás activar la función. Para ello, dirígete a Configuración de la aplicación de función en Configuración general de la pestaña Características de la plataforma de la aplicación de función. Cuando hagas clic en la configuración de la aplicación de función, se abrirá una nueva pestaña en la que podrás activar Ranuras (Preview), tal como se muestra en la siguiente captura de pantalla:

- Haz clic en el botón de activación en la sección Ranuras (Preview) que se destaca en la captura de pantalla previa. Cuando pulses este botón, la sección de ranuras se ocultará, ya que se trata de una configuración puntual. Una vez activada, no podrás desactivarla.
- Vamos a crear una nueva ranura con todas las funciones que tenemos en nuestra aplicación de función, denominada MyProductionApp.
- Haz clic en el icono +, disponible cerca de la sección Ranuras (Preview), tal como se muestra en la siguiente captura de pantalla:

- Se te pedirá que introduzcas un nombre para la nueva ranura. Proporciona un nombre descriptivo, como Ensayo, tal como se muestra en la siguiente captura de pantalla:

- Cuando hagas clic en Crear, se creará una nueva ranura, tal como se indica en la siguiente captura de pantalla. En este caso, si Functions es de solo lectura, puedes cambiar a lectura y escritura en la configuración de la aplicación de función.

La URL de la ranura será https://<<functionappname>>- <<Slotname>>.azurewebsites.net>>. Cada ranura de la aplicación de función tendrá una URL diferente.
- Para que un entorno preconfigurado esté completo, deberás copiar todas las Azure Functions desde el entorno de producción (en este caso, la aplicación MyProductionApp) en la nueva ranura preconfigurada denominada Ensayo.
Crea dos desencadenadores de HTTP y copia el código de ambas funciones (MyProd-HttpTrigger1 y MyProd-HttpTrigger2) de MyProductionApp a la nueva ranura Ensayo. Básicamente, deberás copiar manualmente todas las funciones en la nueva ranura.
- Cambia la cadena producción por ensayo en la última línea de ambas funciones de la ranura Ensayo. Esto resultará útil para probar el resultado de la operación de intercambio:

- Haz clic en el botón Intercambiar, disponible en la hoja Ranuras de implementación, tal como se muestra en la siguiente captura de pantalla:

- En la hoja Intercambiar, deberás elegir lo siguiente:
° Tipo de intercambio: selecciona la opción Intercambiar.
° Origen: selecciona la ranura que quieras trasladar a producción. En este caso vamos a intercambiar Ensayo en general, pero se puede realizar el intercambio incluso entre ranuras que no sean de producción.
° Destino: selecciona la opción producción, tal como se muestra en la siguiente captura de pantalla:

- Cuando revises la configuración, haz clic en el botón Aceptar del paso anterior. Se tardará unos minutos en intercambiar las funciones. Aparecerá una barra de progreso, tal como se muestra en la siguiente captura de pantalla:

- Transcurrido un minuto o dos, las ranuras de ensayo y producción se intercambiarán. Vamos a revisar los archivos de script run.csx de la producción:

- Si no ves ningún cambio, haz clic en el botón de actualización de la aplicación de función, tal como se muestra en la siguiente captura de pantalla:

- Asegúrate de que Configuración de la aplicación y Cadenas de conexión a base de datos se marcan como Configuración de ranuras (específico de ranura). De lo contrario, Configuración de la aplicación y Cadenas de conexión a base de datos también se intercambiarán, lo que podría provocar un comportamiento inesperado. Puedes marcar cualquiera de estos ajustes desde Características de la plataforma, tal como se muestra en la siguiente captura de pantalla:

- Al hacer clic en Configuración de la aplicación accederás a la siguiente hoja, en la que podrás marcar cualquier ajuste como CONFIGURACIÓN DE
RANURAS:

Y eso no es todo…
Si intentas crear una ranura sin habilitar la función Ranuras de implementación, verás algo similar a lo que se muestra en la siguiente captura de pantalla:

Debes tener todas las Azure Functions en todas las ranuras que quieras intercambiar con la aplicación de función de producción:
- Las ranuras son específicas de la aplicación de función, pero no de la función individual.
- Cuando hayas habilitado las ranuras, se regenerarán todas las claves, incluida la maestra. Ten cuidado si ya has compartido las claves de las funciones con terceros. Si ya las habías compartido y habilitado las ranuras, las integraciones existentes con las claves antiguas no funcionarán.
En general, si utilizas App Services y quieres crear ranuras de implementación, debes tener un plan de App Service en el nivel Estándar o Premium. Sin embargo, puedes crear ranuras para la aplicación de función incluso con los planes de consumo (o dinámicos).
Realizar pruebas de carga de Azure Functions mediante Azure DevOps
Todas las aplicaciones deben tener un rendimiento adecuado. Es responsabilidad de todos los miembros del equipo que la aplicación funcione correctamente. En esta receta, aprenderás a crear una carga en Azure Functions mediante la herramienta Prueba de carga de Azure DevOps (anteriormente conocido como VSTS). Esta receta también te ayudará a comprender cómo funciona el escalado automático de instancias en el entorno sin servidor, sin necesidad de que los desarrolladores o el arquitecto se preocupen por las instancias responsables de responder a las solicitudes.
Preparación
Crea una cuenta de Azure DevOps en https://visualstudio.microsoft.com/. Vamos a utilizar la herramienta Prueba de carga de Azure DevOps para crear pruebas de carga basadas en URL.
Cómo hacerlo…
Sigue estos pasos:
- Crea un nuevo desencadenador de HTTP denominado LoadTestHttpTrigger, cuyo Nivel de autorización sea Anónimo.
- Reemplaza el código predeterminado en run.csx por el siguiente:
using System.Net; using Microsoft.AspNetCore.Mvc;
public static async Task<IActionResult> Run(HttpRequest req,
ILogger log)
{
System.Threading.Thread.Sleep(2000);
return (ActionResult)new OkObjectResult($»Hello»); }
- El código anterior es evidente. Para que la prueba de carga resulte interesante, vamos a simular la carga de procesamiento. Para ello, añadiremos un tiempo de espera de dos segundos, mediante System. Threading.Thread.Sleep(2000);.
- Copia la URL de la función. Para ello, haz clic en el enlace </> Obtener la dirección URL de la función de la parte derecha del editor de código de run.csx.
- Dirígete a la pestaña Prueba de carga de la cuenta de Azure DevOps. La encontrarás en el menú de prueba tras iniciar sesión en Azure DevOps:

- Haz clic en el enlace Nuevo y selecciona Prueba basada en dirección URL, tal como se muestra en la siguiente captura de pantalla:

- En la pestaña Escenarios web, proporciona un nombre significativo para la prueba de carga, tal como se muestra en la siguiente captura de pantalla:

- Pega la URL del desencadenador de HTTP que has copiado en el paso 4 en el campo de entrada de la URL, tal como se muestra en la siguiente captura de pantalla:

- Haz clic en el botón Guardar para guardar la prueba de carga:

- El siguiente paso es proporcionar detalles sobre la carga que queremos crear en la función de Azure. Como se indica en la siguiente captura de pantalla, haz clic en Configuración y proporciona información sobre la prueba de carga que desees en función de tus requisitos:

- Cuando suministres toda la información de la prueba de carga, haz clic en Guardar. Al guardar la prueba, el botón Ejecutar prueba se activará, tal como se muestra en la siguiente captura de pantalla:

- Haz clic en Ejecutar prueba para iniciar la prueba de carga. Dado que la duración de la ejecución de nuestra prueba de carga es de 20 minutos, se tardará 20 minutos en completarla. Cuando la carga se haya completado, Azure DevOps proporcionará los informes de rendimiento, tal como se indica a continuación:
° Informe de resumen: esta opción proporciona el tiempo medio de respuesta del desencadenador de HTTP para una carga de 1000 usuarios.

Y eso no es todo…
También podemos consultar cómo Azure se amplía automáticamente en segundo plano en la pestaña Live Metrics Stream de Application Insights. La siguiente captura de pantalla muestra los identificadores de instancia y el estado de las máquinas virtuales que se asignan automáticamente, en función de la carga en la arquitectura sin servidor de Azure. Descubrirás cómo integrar Application Insights con Azure Functions en el capítulo 6, Supervisar y solucionar problemas de servicios de Azure sin servidor

La receta de supervisión de Azure Functions mediante Application Insights del capítulo 6, Supervisar y solucionar problemas de servicios de Azure sin servidor, contiene más información sobre este tema.
Crear y probar Azure Functions a nivel local mediante herramientas de CLI de Azure
La mayoría de las recetas que has aprendido se han creado mediante el navegador o el Entorno de desarrollo integrado (IDE de Visual Studio).
Azure también nos proporciona herramientas para los desarrolladores que disfrutan al trabajar con la línea de comandos. Estas herramientas nos permiten crear recursos de Azure con comandos sencillos directamente desde la línea de comandos. En esta receta, aprenderás a crear una nueva aplicación de función y comprenderás cómo crear una función e implementarla en el cloud de Azure desde la línea de comandos.
Preparación
Sigue estos pasos:
- Descarga e instala Node.js desde https://nodejs.org/en/download/.
- Descarga e instala las herramientas de Azure CLI desde https://docs. microsoft.com/cli/azure/install-azure-cli?view=azure-clilatest.
Cómo hacerlo…
Sigue estos pasos:
- Cuando las Azure Functions Core Tools estén preparadas, ejecuta el siguiente comando para crear una nueva aplicación de función:
func init
Tras ejecutar el comando anterior, obtendrás el siguiente resultado:

En la captura de pantalla anterior, dotnet está seleccionado de forma predeterminada. Si pulsas Intro, se crearán los archivos necesarios, tal como se muestra en la siguiente captura de pantalla:

- Ejecuta el siguiente comando para crear una nueva función de desencadenador de HTTP con la nueva aplicación de función que hemos creado: func new
Tras ejecutar el comando anterior, obtendrás el siguiente resultado:

- Tal como se indica en la captura de pantalla anterior, se te pedirá que elijas la plantilla de función. Para esta receta, he elegido HttpTrigger. Elige HttpTrigger mediante la flecha abajo. Puedes elegir el tipo de función de Azure en base a tus requisitos. Navega por las opciones con las flechas arriba/abajo del teclado.
- El siguiente paso es proporcionar un nombre a la función de Azure que vas a crear. Proporciona un nombre descriptivo y pulsa Intro, tal como se muestra en la siguiente captura de pantalla:

- Puedes utilizar tu IDE favorito para editar el código de función de Azure. En esta receta, voy a usar Visual Studio Code para abrir la función HttpTrigger, tal como se muestra en la siguiente captura de pantalla:

- Vamos a probar la función de Azure directamente desde el equipo local. Para ello, debemos iniciar el host de la función de Azure mediante la ejecución del siguiente comando:
func host start –build
- Cuando el host se haya iniciado, podrás copiar la URL y probarla en tu navegador, junto con un nombre de parámetro de cadena de consulta, tal como se muestra en la siguiente captura de pantalla:

Probar y validar la capacidad de respuesta de la función de Azure mediante Application Insights
Cualquier aplicación es útil para la empresa si funciona correctamente. Las aplicaciones pueden dejar de funcionar por muchas razones. A continuación, se muestran algunas:
- Aunque sería muy raro, podrían producirse errores de hardware, como bloqueos del servidor, errores del disco duro o cualquier otro problema, incluso el centro de datos podría dejar de funcionar.
- Puede haber errores de software debido a un código incorrecto o a un error de implementación.
- El sitio puede recibir un tráfico inesperado y es posible que los servidores no sean capaces de gestionarlo.
- Puede suceder que la aplicación sea accesible en un país y no en otros.
Nos resultaría muy útil recibir una notificación cuando el sitio no esté disponible o no responda a las solicitudes de los usuarios. Azure proporciona unas cuantas herramientas para alertarnos si el sitio web no responde o no está disponible. Una de ellas es Application Insights. Aprenderás a configurar Application Insights para hacer ping a nuestra aplicación de función de Azure cada minuto y ajustarla para que nos avise si la función no responde.
Preparación
Sigue estos pasos:
- Dirígete al portal de administración de Azure, busca Application Insights, haz clic en el botón Crear y proporciona la información necesaria, tal como se muestra en la siguiente captura de pantalla:

- Ve a la hoja Información general de la aplicación de función y echa un vistazo a la URL de la aplicación de función, tal como se muestra en la siguiente captura de pantalla:

Cómo hacerlo…
Sigue estos pasos:
- Dirígete a la hoja Disponibilidad y haz clic en el botón Agregar, tal como se muestra en la siguiente captura de pantalla:

- En la hoja Crear prueba, escribe un nombre descriptivo para el requisito y pega la URL de la aplicación de función, que anotaste en el paso 2 de la sección Preparación anterior, en el campo URL de la hoja Crear prueba. En la hoja Alertas, proporciona una dirección de correo electrónico en el campo Enviar alertas por correo electrónico a estas direcciones de correo electrónico: a las que se enviará una alerta si la función no está disponible o no responde.

- Haz clic en Aceptar en la hoja Alertas y, a continuación, haz clic en el botón Crear en la hoja Crear prueba para crear la prueba, tal como se muestra en la siguiente captura de pantalla, en la sección Todas las pruebas de disponibilidad:

- Para probar la funcionalidad de esta alerta, vamos a detener la aplicación de función. Para ello, haz clic en el botón Detener de la pestaña Información general de la aplicación de función.
- Cuando la aplicación de función se detenga, Application Insights intentará acceder a la URL de la función mediante la prueba de ping. El código de respuesta no será 200, ya que la aplicación se ha detenido, lo que significa que la prueba no se ha superado y que debería haberse enviado una notificación al correo electrónico configurado, tal como se muestra en la siguiente captura de pantalla:

Cómo funciona…
Hemos creado una prueba de Disponibilidad en la que se hará ping en nuestra aplicación de función cada cinco minutos desde un máximo de cinco ubicaciones diferentes de todo el mundo. Puedes configurarlas en la pestaña Ubicación de la prueba de la hoja Crear prueba al crear la prueba. El criterio predeterminado del ping es comprobar si el código de respuesta de la URL es 200. Si el código de respuesta no es 200, la prueba habrá fallado y se enviará una alerta a la dirección de correo electrónico configurable.
Y eso no es todo…
Puedes utilizar una prueba web de varios pasos (con la opción Tipo de prueba de la hoja Crear prueba) si quieres probar una página o funcionalidad que requiera la navegación por distintas páginas.
Desarrollar pruebas unitarias para Azure Functions con desencadenadores de HTTP
Hasta ahora, hemos creado varias Azure Functions y validado su funcionalidad con distintas herramientas. Las funcionalidades de las funciones que hemos desarrollado hasta ahora son bastante simples. Sin embargo, en las aplicaciones reales, no será tan sencillo, ya es probable que se tengan que aplicar muchos cambios al código que creamos inicialmente. Se recomienda escribir pruebas unitarias automatizadas que nos ayuden a probar la funcionalidad de nuestras Azure Functions. Cada vez que ejecutemos estas pruebas unitarias automatizadas, podremos probar las diferentes rutas dentro del código.
En esta receta, aprenderemos a utilizar el desencadenador de HTTP y descubriremos lo sencillo que es escribir casos de pruebas unitarias automatizadas con el Explorador de pruebas de Visual Studio y Moq (un marco de código abierto disponible como paquete NuGet).
Preparación
Vamos a utilizar el marco de simulación de Moq para realizar una prueba unitaria de nuestra función de Azure. Para esta receta, es necesario un conocimiento básico del funcionamiento de Moq. Si lo necesitas, puedes obtener más información sobre Moq en https://github.com/moq/moq4/wiki.
Para que el caso de prueba unitaria sea más sencillo, he comentado las líneas de código que leen los datos de los parámetros Post del método Run del desencadenador de HTTP HTTPTriggerCSharpFromVS, tal como se muestra a continuación destacado en negrita.
[FunctionName(«HTTPTriggerCSharpFromVS»)] public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, «get», «post»,
Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation(«C# HTTP trigger function processed
a request.»);
string name = req.Query[«name»];
//string requestBody = await new StreamReader(req.Body).
ReadToEndAsync();
//dynamic data = JsonConvert.
DeserializeObject(requestBody);
//name = name ?? data?.name;
return name != null
? (ActionResult)new OkObjectResult($»Hello, {name}») : new BadRequestObjectResult(«Please pass a name on
the query string or in the request body»);
}
Cómo hacerlo…
Sigue estos pasos:
- Crea un nuevo proyecto de pruebas unitarias. Para ello, haz clic con el botón derecho en la solución y, a continuación, haz clic en Agregar nuevo proyecto. En la ventana Agregar nuevo proyecto, selecciona Prueba en la lista de Tipo de proyecto y xUnit Test Project(.NET Core) en la lista de proyectos tal como se indica a continuación:

- Asegúrate de seleccionar xUnit Test Project(.NET Core) en la consola Administrador de paquetes y ejecuta los siguientes comandos:
° Instala el paquete Moq NuGet mediante el comando InstallPackage Moq.
° Instala el paquete ASP.NET Core mediante el comando InstallPackage Microsoft.AspNetCore.
- En el proyecto de pruebas unitarias, también necesitamos la referencia a la función de Azure para la que queremos ejecutar las pruebas unitarias. Añade una referencia a la aplicación FunctionAppInVisualStudio para poder llamar al método Run del desencadenador de HTTP desde nuestras pruebas unitarias.
- Añade los espacios de nombres necesarios a la clase Prueba unitaria como se muestra a continuación y sustituye el código predeterminado por el siguiente. El siguiente código simula las solicitudes, crea una colección de cadenas de consulta con una clave denominada name, asigna el valor Praveen Sreeram, ejecuta la función, obtiene la respuesta y compara el valor de respuesta con un valor esperado:
using FunctionAppInVisualStudio; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Http.Internal; using Microsoft.Extensions.Primitives;
using Moq; using System;
using System.Collections.Generic;
using Xunit;
using Microsoft.Extensions.Logging; using System.Threading.Tasks;
namespace AzureFunctions.Tests
{
public class ShouldExecuteAzureFunctions
{
[Fact]
public async Task WithAQueryString()
{
var httpRequestMock = new Mock<HttpRequest>(); var LogMock = new Mock<ILogger>(); var queryStringParams = new Dictionary<String, StringValues>();
httpRequestMock.Setup(req => req.Query).Returns(new Qu
eryCollection(queryStringParams));
queryStringParams.Add(«name», «Praveen Sreeram»); var result = await HTTPTriggerCSharpFromVS. Run(httpRequestMock.Object,LogMock.Object); var resultObject = (OkObjectResult)result; Assert.Equal(«Hello, Praveen Sreeram», resultObject.
Value);
}
}
}
5. Haz clic con el botón derecho en la prueba unitaria y haz clic en Ejecutar prueba, tal como se muestra en la siguiente captura de pantalla:

Si todo se ha configurado correctamente, las pruebas deberían superarse, tal como se muestra en la siguiente captura de pantalla:

Eso es todo. Hemos aprendido a escribir un caso de prueba unitaria básica para un desencadenador de HTTP.