GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Detectar que una aplicación .NET Core se está ejecutando en un Docker Container y SkippableFacts en XUnit

He movido mi sitio de podcasts a ASP.NET Core 2.1 y lo tengo funcionando en Docker envase. Tómese un momento para ver algunas de las publicaciones del blog, ya que he estado escribiendo mientras aprendo.

He agregado pruebas de unidad, así como pruebas de selenio que también se ejecutan con XUnit Unit Test Runner. Sin embargo, no quiero que esas pruebas de Selenium que automatizan Google Chrome se ejecuten en el contexto de Docker.

Traté de agregar una variable de entorno dentro de mi Dockerfile así:

ENV INDOCKER=1

Pensé que verificaría esa variable y omitiría las pruebas condicionalmente. Sencillo, ¿verdad? Bueno, decidí leer de verdad los Dockerfiles que usa mi aplicación ASP.NET Core 2.1. Recuerde, los Dockerfiles (y las imágenes resultantes) están en capas y, con todo lo relacionado con .NET, son de código abierto.

Mirando mis propias capas y explorando la fuente en Github, veo que estoy usando:

  • microsoft/dotnet:2.1-aspnetcore-runtime en Alpine - .NET Core y ASP.NET Core
    • Dentro, veo que están configurando "ASPNETCORE_VERSION" como una variable de entorno, lo cual es útil saber.
      ENV ASPNETCORE_VERSIÓN 2.1.1
  • microsoft/dotnet:2.1-runtime-deps-alpine3.7 - Dependencias necesarias para .NET Core
    • Puedo ver que está escuchando en el puerto 80, ¡pero también establece una variable de entorno útil!
      ENV DOTNET_RUNNING_IN_CONTAINER=verdadero

¡Bien, así que no necesito configurar nada para saber que estoy ejecutando .NET en un contenedor! No habría sabido nada de esto si no me hubiera tomado 15 minutos y explorado/afirmado/confirmado mi pila. ¡El hecho de que esté ejecutando contenedores Docker no significa que no sea útil tomarse el tiempo para SABER lo que estoy ejecutando! Afirma tus suposiciones y todo eso, ¿verdad?

Agregué un pequeño ayudante en mis Pruebas:

private bool InDocker { get { return Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER") == "true";} }

Como estoy usando XUnit, decidí incorporar el ayudante muy útil Xunit.SkippableFact!

Por ejemplo:

[SkippableFact]
public void LoadTheMainPageAndCheckTitle()
{
    Skip.If(InDocker, "We are in Docker, y'all!");
    Browser.Navigate().GoToUrl(Server.RootUri);
    Assert.StartsWith("Hanselminutes Technology Podcast - Fresh Air and Fresh Perspectives for Developers", Browser.Title);
}

SkippableFact me permite omitir pruebas básicamente por cualquier motivo. Podría ayudar si estoy en Docker, como lo estoy haciendo aquí. O, dado que las pruebas de Selenium arrojarán una "OpenQA.Selenium.WebDriverException" cuando no pueda encontrar el controlador web de Selenium, también podría hacer esto, omitiendo porque se completó una excepción específica. Tenga en cuenta que esto significa que es un SALTO, no un FALLO.

[SkippableFact(typeof(OpenQA.Selenium.WebDriverException))]
public void KevinScottTestThenGoHome()
{
   Browser.Navigate().GoToUrl(Server.RootUri + "/631/how-do-you-become-a-cto-with-microsofts-cto-kevin-scott");

   var headerSelector = By.TagName("h1");
   var link = Browser.FindElement(headerSelector);
   link.Click();
}

Los resultados se ven así:

Total tests: 22. Passed: 18. Failed: 0. Skipped: 4.
Test Run Successful.
Test execution time: 8.7878 Seconds

Puede optar por omitir las pruebas si un backend, una API de terceros o una base de datos no funcionan, pero aún así desea probar tanto como sea posible. ¡Estoy bastante contenta con los resultados!

¡Nuevo patrocinador! ¡Nunca vuelva a escribir una factura! Con DocSight OCR de ActivePDF, extraerá datos de recibos, facturas, órdenes de compra y otros documentos mediante la tecnología de captura de datos zonales. ¡Logra la Transformación Digital hoy!

Docker
  1. Ejecución de PostgreSQL en Docker, una guía rápida y práctica

  2. diferencia entre podman y docker.

  3. Cómo ejecutar un comando en un contenedor Docker en ejecución

  4. Instalar Docker y WordPress en Ubuntu

  5. Optimización de los tamaños de imagen de ASP.NET Core Docker

Primeros pasos con .NET Core y Docker y Microsoft Container Registry

.NET Core y Docker

Creación, ejecución y prueba de .NET Core y ASP.NET Core 2.1 en Docker en una Raspberry Pi (ARM32)

.NET y Docker

Exploración de ASP.NET Core con Docker en contenedores de Linux y Windows

Mover un ASP.NET Core de Azure App Service en Windows a Linux probando primero en WSL y Docker