GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Rilevamento che un'app .NET Core è in esecuzione in un contenitore Docker e SkippableFacts in XUnit

Ho spostato il mio sito di podcast su ASP.NET Core 2.1 e l'ho eseguito in un Docker contenitore. Prenditi un momento e dai un'occhiata ad alcuni dei post del blog, dato che sto bloggando mentre sto imparando.

Ho aggiunto Unit Test e Selenium Test che vengono eseguiti anche con XUnit Unit Test Runner. Tuttavia, non voglio che i test del selenio che automatizzano Google Chrome vengano eseguiti nel contesto di Docker.

Ho provato ad aggiungere una variabile di ambiente all'interno del mio Dockerfile in questo modo:

ENV INDOCKER=1

Ho pensato di controllare quella variabile e saltare i test in modo condizionale. Semplice, vero? Bene, ho deciso di LEGGERE davvero i Dockerfile utilizzati dalla mia app ASP.NET Core 2.1. Ricorda, i Dockerfile (e le immagini risultanti) sono a più livelli e, con tutte le cose .NET, sono Open Source.

Guardando i miei livelli ed esplorando la fonte su Github, vedo che sto usando:

  • microsoft/dotnet:2.1-aspnetcore-runtime su Alpine - .NET Core e ASP.NET Core
    • All'interno vedo che stanno impostando "ASPNETCORE_VERSION" come variabile d'ambiente, che è utile sapere.
      ENV ASPNETCORE_VERSION 2.1.1
  • microsoft/dotnet:2.1-runtime-deps-alpine3.7 - Dipendenze necessarie per .NET Core
    • Vedo che è in ascolto sulla porta 80, ma imposta anche un'utile variabile d'ambiente!
      ENV DOTNET_RUNNING_IN_CONTAINER=true

Bello, quindi non ho bisogno di impostare nulla per sapere che sto eseguendo .NET in un contenitore! Non avrei saputo nulla di tutto ciò se non avessi impiegato 15 minuti per esplorare/affermare/confermare il mio stack. Solo perché sto eseguendo contenitori Docker non significa che non sia utile prendersi il tempo per SAPERE cosa sto eseguendo! Afferma le tue ipotesi e tutto il resto, giusto?

Ho aggiunto un piccolo aiuto nei miei test:

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

Dato che sto usando XUnit, ho deciso di inserire l'utilissimo helper Xunit.SkippableFact!

Ad esempio:

[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 mi consente di saltare i test praticamente per qualsiasi motivo. Potrei aiutare se sono in Docker, come sto facendo qui. Oppure, dato che Selenium Tests genererà un "OpenQA.Selenium.WebDriverException" quando non riesce a trovare il Selenium Web Driver, potrei anche farlo, saltando perché è stata superata un'eccezione specifica. Nota che questo significa che è un SALTA non un FAIL.

[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();
}

I risultati si presentano così:

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

Potresti scegliere di saltare i test se un back-end, un'API di terze parti o un DB non erano attivi, ma volevi comunque testare il più possibile. Sono abbastanza contento dei risultati!

Nuovo sponsor! Non digitare mai più una fattura! Con DocSight OCR di ActivePDF, estrai i dati da fatture, fatture, ordini di acquisto e altri documenti utilizzando la tecnologia di acquisizione dati zonale. Realizza la Trasformazione Digitale oggi!

Docker
  1. Esecuzione di PostgreSQL in Docker, una guida rapida e pratica

  2. differenza tra podman e docker.

  3. Come eseguire un comando su un contenitore Docker in esecuzione

  4. Installa Docker e WordPress su Ubuntu

  5. Ottimizzazione delle dimensioni dell'immagine Docker ASP.NET Core

Introduzione a .NET Core e Docker e al registro dei contenitori Microsoft

.NET Core e Docker

Creazione, esecuzione e test di .NET Core e ASP.NET Core 2.1 in Docker su un Raspberry Pi (ARM32)

.NET e Docker

Esplorazione di ASP.NET Core con Docker in entrambi i contenitori Linux e Windows

Spostamento di un ASP.NET Core dal servizio app di Azure in Windows a Linux eseguendo prima il test in WSL e Docker