GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Zjištění, že aplikace .NET Core běží v kontejneru Docker a SkippableFacts v XUnit

Přesunul jsem svůj podcastový web na ASP.NET Core 2.1 a běží mi v Dockeru kontejner. Udělejte si chvilku a podívejte se na některé z blogových příspěvků, protože jsem blogoval, jak jsem se učil.

Přidal jsem testy jednotek a také testy selenu, které se také spouštějí pomocí XUnit Unit Test Runner. Nechci však, aby ty testy selenu, které automatizují Google Chrome, běžely v kontextu Dockeru.

Pokusil jsem se přidat proměnnou prostředí do mého Dockerfile takto:

ENV INDOCKER=1

Myslel jsem, že zkontroluji tuto proměnnou a podmíněně vynechám testy. Jednoduché, že? No, rozhodl jsem se vlastně ČÍST Dockerfiles, které používá moje aplikace ASP.NET Core 2.1. Pamatujte, že soubory Dockerfiles (a výsledné obrázky) jsou vrstvené a se všemi věcmi .NET jsou Open Source.

Když se podívám na své vlastní vrstvy a prozkoumám zdroj na Github, vidím, že používám:

  • microsoft/dotnet:2.1-aspnetcore-runtime na Alpine – .NET Core a ASP.NET Core
    • Vidím, že nastavují "ASPNETCORE_VERSION" jako proměnnou prostředí, což je užitečné vědět.
      ENV ASPNETCORE_VERSION 2.1.1
  • microsoft/dotnet:2.1-runtime-deps-alpine3.7 – Nezbytné závislosti pro .NET Core
    • Vidím, že poslouchá na portu 80, ale také nastavuje užitečnou proměnnou prostředí!
      ENV DOTNET_RUNNING_IN_CONTAINER=true

Pěkné, takže nemusím nic nastavovat, abych věděl, že běžím .NET v kontejneru! Nic z toho bych nevěděl, kdybych si nevěnoval 15 minut a neprozkoumal/neutvrdil/nepotvrdil svůj stack. To, že spouštím kontejnery Docker, neznamená, že není užitečné věnovat čas VĚDĚT, co spouštím! Tvrdte své domněnky a tak dále, ne?

Přidal jsem malého pomocníka do mých testů:

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

Protože používám XUnit, rozhodl jsem se přinést velmi užitečného pomocníka Xunit.SkippableFact!

Například:

[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 umožňuje přeskočit testy v podstatě z jakéhokoli důvodu. Mohl bych vám pomoci, když jsem v Dockeru, jako to dělám tady. Nebo, vzhledem k tomu, že Selenium Tests vyvolá „OpenQA.Selenium.WebDriverException“, když nemůže najít Selenium Web Driver, mohl bych to také udělat, přeskočit, protože byla přeskočena konkrétní výjimka. Všimněte si, že to znamená, že se jedná o SKIP, nikoli 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();
}

Výsledky vypadají takto:

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

Pokud nefunguje backend, rozhraní API třetí strany nebo DB, můžete se rozhodnout přeskočit testy, ale přesto jste chtěli otestovat co nejvíce. S výsledky jsem docela spokojený!

Nový sponzor! Již nikdy nepište fakturu! S DocSight OCR od ActivePDF budete extrahovat data z účtů, faktur, objednávek a dalších dokumentů pomocí technologie zonálního sběru dat. Dosáhněte digitální transformace ještě dnes!

Docker
  1. Spuštění PostgreSQL v Dockeru, Rychlý a praktický průvodce

  2. rozdíl mezi podmanem a dockerem.

  3. Jak spustit příkaz na spuštěném kontejneru Docker

  1. Nainstalujte Docker a WordPress na Ubuntu

  2. Optimalizace velikostí obrazu ASP.NET Core Docker

  3. Jak zálohovat a obnovovat kontejnery Docker

  1. Jak vložit SSH do běžícího kontejneru Docker a spustit příkazy

  2. Jak SSH do kontejneru Docker a spouštění příkazů

  3. Jak pozastavit a obnovit kontejnery Docker