GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Mendeteksi bahwa aplikasi .NET Core berjalan di Docker Container dan SkippableFacts di XUnit

Saya telah memindahkan situs podcast saya ke ASP.NET Core 2.1 dan saya menjalankannya di Docker wadah. Luangkan waktu sejenak untuk melihat beberapa posting blog, karena saya telah menulis blog sambil belajar.

Saya telah menambahkan Tes Unit serta Tes Selenium yang juga dijalankan dengan Runner Tes Unit XUnit. Namun, saya tidak ingin Tes Selenium yang mengotomatiskan Google Chrome berjalan dalam konteks Docker.

Saya mencoba menambahkan Variabel Lingkungan di dalam Dockerfile saya seperti ini:

ENV INDOCKER=1

Saya pikir saya akan memeriksa variabel itu dan melewati tes secara kondisional. Sederhana, bukan? Yah, saya memutuskan untuk benar-benar MEMBACA Dockerfiles yang digunakan aplikasi ASP.NET Core 2.1 saya. Ingat, Dockerfiles (dan gambar yang dihasilkan) berlapis, dan dengan semua hal .NET, adalah Open Source.

Melihat lapisan saya sendiri dan menjelajahi sumbernya di Github, sepertinya saya menggunakan:

  • microsoft/dotnet:2.1-aspnetcore-runtime di Alpine - .NET Core dan ASP.NET Core
    • Di dalam sana saya melihat mereka mengatur "ASPNETCORE_VERSION" sebagai Variabel Lingkungan, yang berguna untuk diketahui.
      ENV ASPNETCORE_VERSION 2.1.1
  • microsoft/dotnet:2.1-runtime-deps-alpine3.7 - Dependensi yang diperlukan untuk .NET Core
    • Saya dapat melihatnya mendengarkan di Port 80, tetapi juga menetapkan Variabel Lingkungan yang berguna!
      ENV DOTNET_RUNNING_IN_CONTAINER=true

Bagus, jadi saya tidak perlu mengatur apa pun untuk mengetahui bahwa saya menjalankan .NET dalam sebuah Wadah! Saya tidak akan mengetahui semua ini jika saya tidak mengambil 15 menit dan menjelajahi/menegaskan/mengkonfirmasi tumpukan saya. Hanya karena saya menjalankan wadah Docker tidak berarti tidak berguna meluangkan waktu untuk TAHU apa yang saya jalankan! Tegaskan asumsi Anda dan semua itu, bukan?

Saya menambahkan sedikit pembantu dalam Pengujian saya:

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

Karena saya menggunakan XUnit, saya memutuskan untuk membawa Xunit pembantu yang sangat berguna.SkippableFact!

Misalnya:

[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 memungkinkan saya melewatkan tes untuk alasan apa pun. Saya dapat membantu jika saya di Docker, seperti yang saya lakukan di sini. Atau, mengingat Selenium Tests akan menampilkan "OpenQA.Selenium.WebDriverException" ketika tidak dapat menemukan Selenium Web Driver, saya juga dapat melakukan ini, melewatkan karena Pengecualian tertentu telah selesai. Perhatikan ini berarti SKIP bukan GAGAL.

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

Hasilnya terlihat seperti ini:

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

Anda dapat memilih untuk Lewati Tes jika backend, API pihak ke-3, atau DB tidak berfungsi, tetapi Anda masih ingin menguji sebanyak mungkin. Saya cukup senang dengan hasilnya!

Sponsor Baru! Jangan pernah mengetik faktur lagi! Dengan DocSight OCR oleh ActivePDF, Anda akan mengekstrak data dari tagihan, faktur, PO &dokumen lainnya menggunakan teknologi pengambilan data zona. Raih Transformasi Digital hari ini!

Docker
  1. Cara Menjalankan Perintah di Running Docker Container

  2. Instal Docker dan WordPress Di Ubuntu

  3. Mengoptimalkan ukuran Gambar ASP.NET Core Docker

  1. Menjalankan PostgreSQL di Docker, Panduan Cepat dan Praktis

  2. Cara mencadangkan dan memulihkan wadah Docker

  3. Cara Menjeda dan Melanjutkan Wadah Docker

  1. Cara SSH ke dalam Running Docker Container dan Jalankan Perintah

  2. perbedaan antara podman dan buruh pelabuhan.

  3. Cara SSH ke Wadah Docker dan Jalankan Perintah