カスタム テストを作成してドメイン固有の規則を実装する

完了

ここまで、テンプレートに対してテストを実行する方法を見てきました。 ただし、独自の規則のセットを持つ会社やチームで活動する場合もあります。 これらの規則は、テスト エクスペリエンスの "カスタマイズ" が必要であることを意味する場合があります。 次のようなシナリオが考えられます。

  • 特定のテスト スイートを実行する。 テスト ツールキットをインストールすると、実行される一連のテストが提供されます。 これらのテストは、ディレクトリ <install directory>/arm-ttk/testcases/deploymentTemplate にあります。

    このテスト実行エクスペリエンスをカスタマイズできます。 カスタマイズする方法の 1 つは、前のユニットで見たように、-Test パラメーターを使用することです。 また、ディレクトリ内のファイルを削除することで、実行されるテストを編集することもできます。 -Skip パラメーターを使用して、特定のテストをスキップできます。

  • ドメイン固有のテストを作成して実行する。 テスト ファイルを作成して、ドメイン固有の規則を適用できます。 このユニットでは、主にこのシナリオに焦点を当てます。

独自のテストの作成と実行

あなたは、独自のドメイン固有のテストを作成することにしました。 このようなテストを作成して実行するフローがあります。

  1. ディレクトリ <install directory>/arm-ttk/testcases/deploymentTemplate でファイルを作成します。
  2. PowerShell でファイルを作成します。
  3. ファイルを実行して、結果を調べます。

カスタム テストの作成

カスタム テストは、正しいディレクトリ <install directory>/arm-ttk/testcases/deploymentTemplate に配置する必要があります。 また、ダッシュ、ポストフィックス .test、末尾の .ps1 を使用して、名前付け標準に従う必要もあります。 一般的なテスト ファイルは次のようになります。

Domain-Specific.test.ps1

Authoring

テスト ファイル名を作成するには、PowerShell で記述する必要があります。 テスト ファイルの 3 つの部分は次のとおりです。

  • ドキュメント。 この部分は省略可能ですが、追加すると非常に便利です。 ファイルの先頭に配置されており、通常はテストの概要、機能、呼び出し方法を説明する一連のコメントが含まれます。 コメントは、たとえば次の例のようになります。

    <#
    .Synopsis
         Ensures that all IDs use the resourceID() function.
    .Description
         Ensures that all IDs use the resourceID() function, or resolve to parameters or variables that use the ResourceID() function.
    .Example
         Test-AzTemplate -TemplatePath .\100-marketplace-sample\ -Test IDs-Should-Be-Derived-From-ResourceIDs
    #>
    

    上記の例の .Synopsis というセクションでは、テストの機能が簡単に説明されています。 .Description というセクションには、長い説明もあります。 最後に .Example というセクションがあり、テストを実行するさまざまな方法が示されています。

  • 入力パラメーター。 テスト ファイルには、一連の入力パラメーターを含めることができます。 このセクションは、キーワード param とかっこによって定義されます。 通常は次のようになります。

    param(
       [Parameter(Mandatory=$true)]
       [PSObject]$TemplateObject,
    
       [Parameter(Mandatory=$true)]
       [string]$TemplateFileName,
    
       [string]$SampleName = "$ENV:SAMPLE_NAME"
    )
    

    前の例は、$TemplateObject$TemplateFileName、および $SampleName の 3 つのパラメーターを示しています。 最初の 2 つのパラメーターは、Parameter[(Mandatory = $true)] の装飾で示されているように必須です。 パラメーターの名前は、それぞれの意味に従って付けられています。 $TemplateObject にはテンプレート ファイルのオブジェクト表現が含まれており、TemplateFileName にはテスト対象のファイルの名前が含まれています。

    ヒント

    ARM テンプレート テスト ツールキットに関する記事には、パラメーターに関する詳細情報があります。

  • テスト ロジック。 テストの最後の部分は、テスト ロジックです。 ほとんどのテストは、通常、次の手順で実行されます。

    1. テンプレートを反復して処理します。
    2. 1 つ以上の条件を検証します。
    3. 何らかの問題が発生した場合は、エラーを生成します。

コード ヘルパー

必要なコンテンツを見つけたり、エラーを報告したりするのに役立つ、多数のヘルパーがあります。 コード ヘルパーの 2 つの例を次に示します。

  • Find-JsonContent。 特定の値を持つ特定の要素を見つけるのに役立ちます。 次に例を示します。

    Find-JsonContent -Key apiVersion -Value * -Like
    

    上記のコードを使用すると、名前が apiVersion で値が * の JSON 属性が見つかります。これは基本的に、apiVersion という名前のすべての属性を意味します。 次のような JSON オブジェクトに一致します。

    {
       "apiVersion": "2021-01-01"
    }
    
  • Write-Error。 テンプレート内に何か問題があることをテスト ランナーに伝えるのに役立ちます。 これを使用すると、エラー メッセージを表現し、必要な任意の変数を使用して文字列式を補間することができます。 使用方法の例を次に示します。

      Write-Error "Resource $($resource.Name) Location must be located in westeurope'" -TargetObject $resource
    

テストの実行

この時点で、テストが作成されました。 同じディレクトリ内の他のすべてのファイルと一緒にそれを実行します。

前の例と同様に、-Test パラメーターを使用して、特定のテスト ファイルのみを実行できます。 パラメーターとして、ファイル拡張子を除いたテスト ファイル名を指定します。 そのため、Custom-Test.test.ps1 を単独で実行するには Test-AzTemplate -TemplatePath /path/to/template -Test Custom-Test を使用します。