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!