GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

.NET Core アプリが Docker コンテナーで実行され、XUnit で SkippableFacts が実行されていることを検出する

ポッドキャスト サイトを ASP.NET Core 2.1 に移行し、Docker で実行しています容器。学習しながらブログを書いているので、いくつかのブログ投稿をチェックしてみてください。

ユニット テストと、XUnit ユニット テスト ランナーでも実行される Selenium テストを追加しました。ただし、Google Chrome を自動化する Selenium テストを Docker のコンテキスト内で実行したくありません。

次のように Dockerfile 内に環境変数を追加しようとしました:

ENV INDOCKER=1

その変数をチェックして、条件付きでテストをスキップすることにしました。シンプルですね。 実際に読むことにしました 私の ASP.NET Core 2.1 アプリが使用する Dockerfiles。 Dockerfiles (および結果のイメージ) は階層化されており、.NET のすべてがオープン ソースであることを思い出してください。

自分のレイヤーを見て、Github でソースを調べると、以下を使用していることがわかります:

  • microsoft/dotnet:2.1-aspnetcore-runtime on Alpine - .NET Core および ASP.NET Core
    • その中で、「ASPNETCORE_VERSION」を環境変数として設定していることがわかります。これは知っておくと便利です。
      ENV ASPNETCORE_VERSION 2.1.1
  • microsoft/dotnet:2.1-runtime-deps-alpine3.7 - .NET Core に必要な依存関係
    • ポート 80 でリッスンしていることがわかりますが、便利な環境変数も設定されています。
      ENV DOTNET_RUNNING_IN_CONTAINER=true

コンテナで .NET を実行していることを知るために何も設定する必要はありません。 15 分もかけてスタックを調べたり、アサートしたり、確認したりしなければ、このようなことはまったく知りませんでした。私が Docker コンテナを実行しているからといって、実行しているものを知るために時間をかけることが役に立たないというわけではありません!あなたの仮定とそのすべてを主張してくださいね?

テストに小さなヘルパーを追加しました:

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

私は XUnit を使用しているので、非常に便利なヘルパー Xunit.SkippableFact を導入することにしました!

例:

[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 を使用すると、基本的にあらゆる理由でテストをスキップできます。私がここでやっているように、私が Docker を使っているなら、私は助けることができます。または、Selenium Web Driver が見つからない場合に Selenium Tests が "OpenQA.Selenium.WebDriverException" をスローすることを考えると、特定の例外が通過したためにスキップして、これを実行することもできます。これは、FAIL ではなく SKIP であることを意味することに注意してください。

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

結果は次のようになります:

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

バックエンド、サードパーティ API、または DB がダウンしている場合は、テストをスキップすることを選択できますが、それでも可能な限り多くのテストを行いたいと考えていました。結果にはとても満足しています!

新しいスポンサー! もう請求書を入力する必要はありません。 ActivePDF の DocSight OCR を使用すると、ゾーン データ キャプチャ テクノロジを使用して、請求書、請求書、発注書、およびその他のドキュメントからデータを抽出できます。デジタルトランスフォーメーションを今すぐ実現しましょう!

Docker
  1. UbuntuにDockerとWordPressをインストールする

  2. Docker コンテナーをバックアップおよび復元する方法

  3. Docker コンテナを一時停止および再開する方法

  1. DockerでのPostgreSQLの実行、クイックで実用的なガイド

  2. podmanとdockerの違い。

  3. 実行中のDockerコンテナでコマンドを実行する方法

  1. 実行中のDockerコンテナにSSHで接続してコマンドを実行する方法

  2. DockerコンテナにSSHで接続してコマンドを実行する方法

  3. ASP.NET Core Docker イメージ サイズの最適化