Übung: Erstellen und Ausführen von benutzerdefinierten Tests mit dem Testtoolkit

Abgeschlossen

Als Mitglied eines Produktteams wissen Sie, dass es wichtig ist, team- oder domänenspezifische Regeln implementieren zu können. Eine Möglichkeit ist hierbei das Implementieren der Regeln als Tests. Diese Tests können Sie anschließend mit dem Testtoolkit ausführen.

Erstellen und Ausführen eines benutzerdefinierten Tests

Sie erstellen einen benutzerdefinierten Test und verwenden das Testtoolkit, um ihn auszuführen. Außerdem korrigieren Sie die Bereitstellungsvorlage, um sicherzustellen, dass der Test erfolgreich abgeschlossen wird. Der benutzerdefinierte Test prüft, ob alle Parameter einer Benennungsregel folgen. Diese Regel ist eine domänenspezifische Anforderung für das Produkt, an dem Sie arbeiten.

Es wird empfohlen, dass Sie für diese Übung zwei Text-Editoren geöffnet haben:

  • Erstellen eines benutzerdefinierten Tests. Suchen Sie den Pfad des Unterverzeichnisses arm-ttk/testcases/deploymentTemplate/ des Installationsverzeichnisses für das Testtoolkit. Von hier aus führen Sie Visual Studio Code aus, in dem Sie einen benutzerdefinierten Test erstellen und bearbeiten.
  • Erstellen einer Vorlagendatei und Ausführen von Tests. Wählen Sie den gewünschten Speicherort für diesen Pfad aus. Es wird empfohlen, von diesem Pfad aus eine Visual Studio Code-Instanz zu starten, damit Sie die Datei azuredeploy.json bei Aufforderung problemlos bearbeiten können. Starten Sie auch ein integriertes Terminal mit dieser Visual Studio Code-Instanz, um das Ausführen von Tests zu erleichtern.

Erstellen der Vorlagendatei

Wählen Sie ein Verzeichnis Ihrer Wahl aus, und erstellen Sie eine Datei namens azuredeploy.json.

Warnung

Stellen Sie sicher, dass das ausgewählte Verzeichnis ein leeres Verzeichnis ohne Unterverzeichnisse ist.

Fügen Sie den folgenden Inhalt ein:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "resources": []
}

Erstellen des benutzerdefinierten Tests

  1. Öffnen Sie Visual Studio Code, und navigieren Sie zu Ihrem Installationsverzeichnis für das Testtoolkit. Wechseln Sie zum Unterverzeichnis arm-ttk/testcases/deploymentTemplate. Führen Sie den folgenden Befehl aus:

    code .
    

    Hinweis

    Öffnen Sie zunächst Visual Studio Code manuell und dann das Verzeichnis, wenn sich Visual Studio Code nicht in diesem Pfad befindet.

  2. Erstellen Sie eine benutzerdefinierte Testdatei mit dem Namen Custom-ParameterNaming.test.ps1. Fügen Sie den folgenden Inhalt ein:

    param(
    [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array
    [PSObject]
    $MainTemplateResources
    )
    
    Write-Error "To be implemented"
    

    Lassen Sie den Text-Editor geöffnet. Sie werden diese Datei später bearbeiten.

Ausführen des benutzerdefinierten Tests

Führen Sie den benutzerdefinierten Test mithilfe der folgenden Schritte aus:

  1. Öffnen Sie ein neues Terminalfenster, oder verwenden Sie das alte Fenster.

  2. Navigieren Sie zu dem Verzeichnis, in dem Sie azuredeploy.json erstellt haben. Führen Sie den folgenden Befehl aus, um Visual Studio Code zu starten:

    code .
    

    Hinweis

    Öffnen Sie zunächst Visual Studio Code manuell und dann das Vorlagenverzeichnis, wenn sich Visual Studio Code nicht in diesem Pfad befindet.

  3. Öffnen Sie in Visual Studio Code das integrierte Terminal, indem Sie im oberen Menü auf Terminal>Neues Terminal klicken. Führen Sie im Terminal den folgenden Befehl aus, um PowerShell zu starten:

    pwsh
    

    Die Ausgabe ähnelt der folgenden Ausgabe:

    PowerShell 7.0.3
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    https://aka.ms/powershell
    Type 'help' to get help.
    
  4. Führen Sie Import-Module im Terminal aus.

    Hinweis

    Ersetzen Sie path/to/arm-ttk/arm-ttk.psd1 vor dem Importieren des Moduls durch den Pfad zum heruntergeladenen Testtoolkit.

    Import-Module path/to/arm-ttk/arm-ttk.psd1
    

    Tipp

    Wenn Sie das Tool heruntergeladen oder in das Verzeichnis Downloads geklont haben, sieht der Pfad in etwa wie folgt aus: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Sie können das Tool jetzt verwenden. Solange Sie sich in derselben PowerShell-Sitzung befinden, ist es nicht erforderlich, den Importbefehl erneut auszuführen.

  5. Führen Sie Test-AzTemplate im Terminal aus, um das Ausführen des Tests zu starten:

    Test-AzTemplate -TemplatePath .
    

    Die Ausgabe ähnelt dem Folgenden. Die hervorgehobenen Zeilen geben Ihren Test an:

    Validating custom\azuredeploy.json
      JSONFiles Should Be Valid
        [+] JSONFiles Should Be Valid (56 ms)
    Pass  : 1
    Fail  : 0
    Total : 1
    
    
    
      adminUsername Should Not Be A Literal
        [+] adminUsername Should Not Be A Literal (68 ms)
      apiVersions Should Be Recent In Reference Functions
        [+] apiVersions Should Be Recent In Reference Functions (203 ms)
      apiVersions Should Be Recent
        [+] apiVersions Should Be Recent (137 ms)
      artifacts parameter
        [+] artifacts parameter (145 ms)
      CommandToExecute Must Use ProtectedSettings For Secrets
        [+] CommandToExecute Must Use ProtectedSettings For Secrets (171 ms)
      deploymentTemplate
        [-] Custom ParameterNaming (354 ms)
            To be implemented
    
      DependsOn Best Practices
        [+] DependsOn Best Practices (152 ms)
      Deployment Resources Must Not Be Debug
        [+] Deployment Resources Must Not Be Debug (152 ms)
      DeploymentTemplate Must Not Contain Hardcoded Uri
        [+] DeploymentTemplate Must Not Contain Hardcoded Uri (185 ms)
      DeploymentTemplate Schema Is Correct
        [+] DeploymentTemplate Schema Is Correct (197 ms)
      Dynamic Variable References Should Not Use Concat
        [+] Dynamic Variable References Should Not Use Concat (157 ms)
      IDs Should Be Derived From ResourceIDs
        [+] IDs Should Be Derived From ResourceIDs (69 ms)
      Location Should Not Be Hardcoded
        [+] Location Should Not Be Hardcoded (260 ms)
      ManagedIdentityExtension must not be used
        [+] ManagedIdentityExtension must not be used (70 ms)
      Min And Max Value Are Numbers
        [+] Min And Max Value Are Numbers (213 ms)
      Outputs Must Not Contain Secrets
        [+] Outputs Must Not Contain Secrets (76 ms)
      Parameter Types Should Be Consistent
        [+] Parameter Types Should Be Consistent (68 ms)
      Parameters Must Be Referenced
        [+] Parameters Must Be Referenced (93 ms)
      Password params must be secure
        [+] Password params must be secure (111 ms)
      providers apiVersions Is Not Permitted
        [+] providers apiVersions Is Not Permitted (68 ms)
      ResourceIds should not contain
        [+] ResourceIds should not contain (210 ms)
      Resources Should Have Location
        [+] Resources Should Have Location (113 ms)
      Resources Should Not Be Ambiguous
        [+] Resources Should Not Be Ambiguous (147 ms)
      Secure Params In Nested Deployments
        [+] Secure Params In Nested Deployments (242 ms)
      Secure String Parameters Cannot Have Default
        [+] Secure String Parameters Cannot Have Default (129 ms)
      Template Should Not Contain Blanks
        [+] Template Should Not Contain Blanks (201 ms)
      URIs Should Be Properly Constructed
        [+] URIs Should Be Properly Constructed (180 ms)
      Variables Must Be Referenced
        [+] Variables Must Be Referenced (132 ms)
      Virtual Machines Should Not Be Preview
        [+] Virtual Machines Should Not Be Preview (91 ms)
      VM Images Should Use Latest Version
        [+] VM Images Should Use Latest Version (114 ms)
      VM Size Should Be A Parameter
        [+] VM Size Should Be A Parameter (130 ms)
    Pass  : 31
    Fail  : 1
    Total : 32
    

    Da Sie den Test nun gefunden haben, lassen Sie dieses Terminalfenster geöffnet. Sie werden es später erneut verwenden.

Umgestalten des benutzerdefinierten Tests

Nun sorgen Sie für eine ordnungsgemäße Implementierung des benutzerdefinierten Tests.

  1. Navigieren Sie zurück zum Text-Editor mit der Datei Custom-ParameterNaming.test.ps1.

    Hinweis

    Wenn Sie Visual Studio Code versehentlich geschlossen haben, navigieren Sie zum Unterverzeichnis arm-ttk/testcases/deploymentTemplate, und öffnen Sie die Datei Custom-ParameterNaming.test.ps1.

  2. Ersetzen Sie den Inhalt der Datei durch den folgenden Code:

    <#
    .Synopsis
     Ensures that all parameters adheres to a naming standard
    .Description
     All parameters should start with the company specific prefix 'tailwind'
    #>
    param(
       # The Template Object
       [Parameter(Mandatory = $true, Position = 0)]
       [PSObject]
       $TemplateObject,
    
       # The Template JSON Text
       [Parameter(Mandatory = $true, Position = 0)]
       [PSObject]
       $TemplateText
    )
    
    foreach ($parameter in $TemplateObject.parameters.psobject.properties) {
      # If the parameter name starts with tailwind, then the parameter is correctly named
      if ($parameter.Name -notmatch 'tailwind*') {
         Write-Error "Parameter '$($parameter.Name)' must start with prefix 'tailwind'" -TargetObject $parameter
      }
    }
    

    Der vorangehende Code durchläuft alle Parameter. Er überprüft das Attribut name und stellt fest, ob der Name mit dem Präfix tailwind beginnt. Wenn der überprüfte Parameter nicht mit der Benennungsregel übereinstimmt, ruft der Code das Cmdlet Write-Error mit einer entsprechenden Fehlermeldung auf.

Aktualisieren der Vorlagendatei

Nun fügen Sie der Vorlagendatei einen Parameter hinzu.

  1. Wählen Sie den Text-Editor mit azuredeploy.json aus, und ändern Sie den Inhalt der Datei in den folgenden Inhalt:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "location": {
          "type": "string",
          "metadata": {
            "description": "a deployment location"
          }
        }
      },
      "resources": []
    }
    

    Der Vorlageninhalt oben definiert den Parameter namens location, der die Benennungsregel nicht erfüllt, da das Präfix tailwind fehlt.

Erneutes Ausführen des Testtoolkits

Sie haben jetzt einen benutzerdefinierten Test erstellt. Die Benennung der Vorlagendatei erfüllt die Anforderung jedoch nicht. Daher erwarten Sie, dass beim anstehenden Testlauf ein Fehler auftritt. Stellen Sie sicher, dass dies der Fall ist, indem Sie den folgenden Schritt ausführen.

Verwenden Sie das vorhandene integrierte Visual Studio Code-Terminalfenster, in dem PowerShell gestartet und in das das Testtoolkit importiert wurde.

Führen Sie in Visual Studio Code Test-AzTemplate im integrierten Terminal aus:

Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming

Der Befehl oben wird mit dem Parameter -Test ausgeführt, der einen Testnamen als Eingabe annimmt. Sie haben Custom-ParameterNaming als Parameter bereitgestellt, was bedeutet, dass nur der neu entwickelte Test ausgeführt wird.

Tipp

Die Verwendung des Parameters -Test ist eine bewährte Methode beim Entwickeln eines Tests, da er die ausgeführten Tests und die Größe der Terminalausgabe begrenzt.

Dieser Befehl führt zur folgenden Ausgabe:

Validating custom\azuredeploy.json
 deploymentTemplate
   [-] Custom ParameterNaming (2ms)
       Parameter 'location' must start with prefix 'tailwind'

Das Ergebnis gibt an, dass der Test funktioniert. Stellen Sie sicher, dass dies der Fall ist, indem Sie die Bereitstellungsdatei ändern.

Korrigieren der Vorlagendatei

An dieser Stelle sollten Sie die Korrektheit Ihres benutzerdefinierten Tests überprüfen, indem Sie die Vorlagendatei so ändern, dass sie die Regeln einhält, die vom benutzerdefinierten Test festgelegt wurden.

  1. Ändern Sie in der Visual Studio Code-Instanz mit der Datei azuredeploy.json den Inhalt der Datei wie folgt:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "tailwindLocation": {
          "type": "string",
          "metadata": {
            "description": "a deployment location"
          }
        }
      },
      "resources": []
    }
    

    Der Parameter mit dem Namen location wurde in tailwindLocation umbenannt. Theoretisch sollte dieser Parameter den Test jetzt bestehen. Überprüfen Sie dies.

  2. Fahren Sie mit derselben Visual Studio Code-Instanz fort, und führen Sie Test-AzTemplate im integrierten Terminal aus:

    Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
    

    Die Ausgabe sieht nun wie folgt aus:

    Validating custom\azuredeploy.json
      deploymentTemplate
        [+] Custom ParameterNaming (2 ms)
    

Erfolg! Sie haben einen benutzerdefinierten Test implementiert und ausgeführt. Außerdem haben Sie eine Bereitstellungsvorlage korrigiert, damit sie der Testbedingung entspricht.

Erstellen und Ausführen eines benutzerdefinierten Tests

Sie erstellen einen benutzerdefinierten Test und verwenden das Testtoolkit, um ihn auszuführen. Außerdem korrigieren Sie die Bereitstellungsvorlage, um sicherzustellen, dass der Test erfolgreich abgeschlossen wird. Der benutzerdefinierte Test prüft, ob alle Parameter einer Benennungsregel folgen. Diese Regel ist eine domänenspezifische Anforderung für das Produkt, an dem Sie arbeiten.

Es wird empfohlen, dass Sie für diese Übung zwei Text-Editoren geöffnet haben:

  • Erstellen eines benutzerdefinierten Tests. Suchen Sie den Pfad des Unterverzeichnisses arm-ttk/testcases/deploymentTemplate/ des Installationsverzeichnisses für das Testtoolkit. Von hier aus führen Sie Visual Studio Code aus, in dem Sie einen benutzerdefinierten Test erstellen und bearbeiten.
  • Erstellen einer Vorlagendatei und Ausführen von Tests. Wählen Sie den gewünschten Speicherort für diesen Pfad aus. Es wird empfohlen, von diesem Pfad aus eine Visual Studio Code-Instanz zu starten, damit Sie die Datei azuredeploy.json bei Aufforderung problemlos bearbeiten können. Starten Sie auch ein integriertes Terminal mit dieser Visual Studio Code-Instanz, um das Ausführen von Tests zu erleichtern.

Erstellen der Vorlagendatei

Wählen Sie ein Verzeichnis Ihrer Wahl aus, und erstellen Sie eine Datei namens azuredeploy.json.

Warnung

Stellen Sie sicher, dass das ausgewählte Verzeichnis ein leeres Verzeichnis ohne Unterverzeichnisse ist.

Fügen Sie den folgenden Inhalt ein:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "resources": []
}

Erstellen des benutzerdefinierten Tests

  1. Öffnen Sie ein Terminal. Navigieren Sie zu Ihrem Installationsverzeichnis für das Testtoolkit. Wechseln Sie zum Unterverzeichnis arm-ttk/testcases/deploymentTemplate. Führen Sie den folgenden Befehl aus:

    code .
    

    Hinweis

    Öffnen Sie zunächst Visual Studio Code manuell und dann das Verzeichnis, wenn sich Visual Studio Code nicht in diesem Pfad befindet.

  2. Erstellen Sie eine benutzerdefinierte Datei mit dem Namen Custom-ParameterNaming.test.ps1. Fügen Sie den folgenden Inhalt ein:

    param(
    [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array
    [PSObject]
    $MainTemplateResources
    )
    
    Write-Error "To be implemented"
    

    Lassen Sie den Text-Editor geöffnet. Sie werden diese Datei später bearbeiten.

Ausführen des benutzerdefinierten Tests

Führen Sie den benutzerdefinierten Test mithilfe der folgenden Schritte aus:

  1. Öffnen Sie ein neues Terminalfenster, oder verwenden Sie das alte Fenster.

  2. Navigieren Sie zu dem Verzeichnis, in dem Sie azuredeploy.json erstellt haben. Führen Sie den folgenden Befehl aus, um Visual Studio Code zu starten:

    code .
    

    Hinweis

    Öffnen Sie zunächst Visual Studio Code manuell und dann das Vorlagenverzeichnis, wenn sich Visual Studio Code nicht in diesem Pfad befindet.

  3. Öffnen Sie in Visual Studio Code das integrierte Terminal, indem Sie im oberen Menü auf Terminal>Neues Terminal klicken. Führen Sie im Terminal den folgenden Befehl aus, um PowerShell zu starten:

    pwsh
    

    Die Ausgabe ähnelt der folgenden Ausgabe:

    PowerShell 7.0.3
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    https://aka.ms/powershell
    Type 'help' to get help.
    
  4. Führen Sie Import-Module im Terminal aus.

    Hinweis

    Ersetzen Sie path/to/arm-ttk/arm-ttk.psd1 vor dem Importieren des Moduls durch den Pfad zum heruntergeladenen Testtoolkit.

    Import-Module path/to/arm-ttk/arm-ttk.psd1
    

    Tipp

    Wenn Sie das Tool heruntergeladen oder in das Verzeichnis Downloads geklont haben, sieht der Pfad in etwa wie folgt aus: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Sie können das Tool jetzt verwenden. Solange Sie sich in derselben PowerShell-Sitzung befinden, ist es nicht erforderlich, den Importbefehl erneut auszuführen.

  5. Führen Sie Test-AzTemplate im Terminal aus:

    Test-AzTemplate -TemplatePath .
    

    Die Ausgabe ähnelt dem Folgenden. Die hervorgehobenen Zeilen geben Ihren Test an:

    Validating custom\azuredeploy.json
      JSONFiles Should Be Valid
        [+] JSONFiles Should Be Valid (56 ms)
    Pass  : 1
    Fail  : 0
    Total : 1
    
    
    
      adminUsername Should Not Be A Literal
        [+] adminUsername Should Not Be A Literal (68 ms)
      apiVersions Should Be Recent In Reference Functions
        [+] apiVersions Should Be Recent In Reference Functions (203 ms)
      apiVersions Should Be Recent
        [+] apiVersions Should Be Recent (137 ms)
      artifacts parameter
        [+] artifacts parameter (145 ms)
      CommandToExecute Must Use ProtectedSettings For Secrets
        [+] CommandToExecute Must Use ProtectedSettings For Secrets (171 ms)
      deploymentTemplate
        [-] Custom ParameterNaming (354 ms)
            To be implemented
    
      DependsOn Best Practices
        [+] DependsOn Best Practices (152 ms)
      Deployment Resources Must Not Be Debug
        [+] Deployment Resources Must Not Be Debug (152 ms)
      DeploymentTemplate Must Not Contain Hardcoded Uri
        [+] DeploymentTemplate Must Not Contain Hardcoded Uri (185 ms)
      DeploymentTemplate Schema Is Correct
        [+] DeploymentTemplate Schema Is Correct (197 ms)
      Dynamic Variable References Should Not Use Concat
        [+] Dynamic Variable References Should Not Use Concat (157 ms)
      IDs Should Be Derived From ResourceIDs
        [+] IDs Should Be Derived From ResourceIDs (69 ms)
      Location Should Not Be Hardcoded
        [+] Location Should Not Be Hardcoded (260 ms)
      ManagedIdentityExtension must not be used
        [+] ManagedIdentityExtension must not be used (70 ms)
      Min And Max Value Are Numbers
        [+] Min And Max Value Are Numbers (213 ms)
      Outputs Must Not Contain Secrets
        [+] Outputs Must Not Contain Secrets (76 ms)
      Parameter Types Should Be Consistent
        [+] Parameter Types Should Be Consistent (68 ms)
      Parameters Must Be Referenced
        [+] Parameters Must Be Referenced (93 ms)
      Password params must be secure
        [+] Password params must be secure (111 ms)
      providers apiVersions Is Not Permitted
        [+] providers apiVersions Is Not Permitted (68 ms)
      ResourceIds should not contain
        [+] ResourceIds should not contain (210 ms)
      Resources Should Have Location
        [+] Resources Should Have Location (113 ms)
      Resources Should Not Be Ambiguous
        [+] Resources Should Not Be Ambiguous (147 ms)
      Secure Params In Nested Deployments
        [+] Secure Params In Nested Deployments (242 ms)
      Secure String Parameters Cannot Have Default
        [+] Secure String Parameters Cannot Have Default (129 ms)
      Template Should Not Contain Blanks
        [+] Template Should Not Contain Blanks (201 ms)
      URIs Should Be Properly Constructed
        [+] URIs Should Be Properly Constructed (180 ms)
      Variables Must Be Referenced
        [+] Variables Must Be Referenced (132 ms)
      Virtual Machines Should Not Be Preview
        [+] Virtual Machines Should Not Be Preview (91 ms)
      VM Images Should Use Latest Version
        [+] VM Images Should Use Latest Version (114 ms)
      VM Size Should Be A Parameter
        [+] VM Size Should Be A Parameter (130 ms)
    Pass  : 31
    Fail  : 1
    Total : 32
    

    Da Sie den Test nun gefunden haben, lassen Sie dieses Terminalfenster geöffnet. Sie werden es später erneut verwenden.

Umgestalten des benutzerdefinierten Tests

Nun sorgen Sie für eine ordnungsgemäße Implementierung des benutzerdefinierten Tests.

  1. Navigieren Sie zurück zum Text-Editor mit der Datei Custom-ParameterNaming.test.ps1.

    Hinweis

    Wenn Sie Visual Studio Code versehentlich geschlossen haben, navigieren Sie zum Unterverzeichnis arm-ttk/testcases/deploymentTemplate, und öffnen Sie die Datei Custom-ParameterNaming.test.ps1.

  2. Ersetzen Sie den Inhalt der Datei durch den folgenden Code:

    <#
    .Synopsis
     Ensures that all parameters adheres to a naming standard
    .Description
     All parameters should start with the company specific prefix 'tailwind'
    #>
    param(
       # The Template Object
       [Parameter(Mandatory = $true, Position = 0)]
       [PSObject]
       $TemplateObject,
    
       # The Template JSON Text
       [Parameter(Mandatory = $true, Position = 0)]
       [PSObject]
       $TemplateText
    )
    
    foreach ($parameter in $TemplateObject.parameters.psobject.properties) {
      # If the parameter name starts with tailwind, then the parameter is correctly named
      if ($parameter.Name -notmatch 'tailwind*') {
         Write-Error "Parameter '$($parameter.Name)' must start with prefix 'tailwind'" -TargetObject $parameter
      }
    }
    

    Der vorangehende Code durchläuft alle Parameter. Er überprüft das Attribut name und stellt fest, ob der Name mit dem Präfix tailwind beginnt. Wenn der überprüfte Parameter nicht mit der Benennungsregel übereinstimmt, ruft der Code das Cmdlet Write-Error mit einer entsprechenden Fehlermeldung auf.

Aktualisieren der Vorlagendatei

Nun fügen Sie der Vorlagendatei einen Parameter hinzu.

  1. Wählen Sie den Text-Editor mit azuredeploy.json aus, und ändern Sie den Inhalt der Datei in den folgenden Inhalt:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "location": {
          "type": "string",
          "metadata": {
            "description": "a deployment location"
          }
        }
      },
      "resources": []
    }
    

    Der Vorlageninhalt oben definiert den Parameter namens location, der die Benennungsregel nicht erfüllt, da das Präfix tailwind fehlt.

Erneutes Ausführen des Testtoolkits

Sie haben jetzt einen benutzerdefinierten Test erstellt. Die Benennung der Vorlagendatei erfüllt die Anforderung jedoch nicht. Daher erwarten Sie, dass beim anstehenden Testlauf ein Fehler auftritt. Stellen Sie sicher, dass dies der Fall ist, indem Sie den folgenden Schritt ausführen.

Hinweis

Verwenden Sie das vorhandene integrierte Visual Studio Code-Terminalfenster, in dem PowerShell gestartet und in das das Testtoolkit importiert wurde.

Führen Sie in Visual Studio Code Test-AzTemplate im integrierten Terminal aus:

Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming

Der Befehl oben wird mit dem Parameter namens -Test ausgeführt, der einen Testnamen als Eingabe annimmt. Sie haben Custom-ParameterNaming als Parameter bereitgestellt, was bedeutet, dass nur der neu entwickelte Test ausgeführt wird.

Tipp

Die Verwendung dieses Parameters ist eine bewährte Methode, wenn Sie einen Test entwickeln, da er die ausgeführten Tests und die Größe der Terminalausgabe begrenzt.

Dieser Befehl führt zur folgenden Ausgabe:

Validating custom\azuredeploy.json
 deploymentTemplate
   [-] Custom ParameterNaming (2ms)
       Parameter 'location' must start with prefix 'tailwind'

Das Ergebnis gibt an, dass der Test funktioniert. Stellen Sie sicher, dass dies der Fall ist, indem Sie die Bereitstellungsdatei ändern.

Korrigieren der Vorlagendatei

An dieser Stelle sollten Sie die Korrektheit Ihres benutzerdefinierten Tests überprüfen, indem Sie die Vorlagendatei so ändern, dass sie die Regeln einhält, die vom benutzerdefinierten Test festgelegt wurden.

  1. Ändern Sie in der Visual Studio Code-Instanz mit der Datei azuredeploy.json den Inhalt der Datei wie folgt:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "tailwindLocation": {
          "type": "string",
          "metadata": {
            "description": "a deployment location"
          }
        }
      },
      "resources": []
    }
    

    Der Parameter mit dem Namen location wurde in tailwindLocation umbenannt. Theoretisch sollte dieser Parameter den Test jetzt bestehen. Überprüfen Sie dies.

  2. Fahren Sie mit derselben Visual Studio Code-Instanz fort, und führen Sie Test-AzTemplate im integrierten Terminal aus:

    Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
    

    Die Ausgabe sieht nun wie folgt aus:

    Validating custom\azuredeploy.json
      deploymentTemplate
        [+] Custom ParameterNaming (2 ms)
    

Erfolg! Sie haben einen benutzerdefinierten Test implementiert und ausgeführt. Außerdem haben Sie eine Bereitstellungsvorlage korrigiert, damit sie der Testbedingung entspricht.

Erstellen und Ausführen eines benutzerdefinierten Tests

Sie erstellen einen benutzerdefinierten Test und verwenden das Testtoolkit, um ihn auszuführen. Außerdem korrigieren Sie die Bereitstellungsvorlage, um sicherzustellen, dass der Test erfolgreich abgeschlossen wird. Der benutzerdefinierte Test prüft, ob alle Parameter einer Benennungsregel folgen. Diese Regel ist eine domänenspezifische Anforderung für das Produkt, an dem Sie arbeiten.

Es wird empfohlen, dass Sie für diese Übung zwei Text-Editoren geöffnet haben:

  • Erstellen eines benutzerdefinierten Tests. Suchen Sie den Pfad des Unterverzeichnisses arm-ttk\testcases\deploymentTemplate\ des Installationsverzeichnisses für das Testtoolkit. Von hier aus führen Sie Visual Studio Code aus, in dem Sie einen benutzerdefinierten Test erstellen und bearbeiten.
  • Erstellen einer Vorlagendatei und Ausführen von Tests. Wählen Sie den gewünschten Speicherort für diesen Pfad aus. Es wird empfohlen, von diesem Pfad aus eine Visual Studio Code-Instanz zu starten, damit Sie die Datei azuredeploy.json bei Aufforderung problemlos bearbeiten können. Starten Sie auch ein integriertes Terminal mit dieser Visual Studio Code-Instanz, um das Ausführen von Tests zu erleichtern.

Erstellen der Vorlagendatei

Wählen Sie ein Verzeichnis Ihrer Wahl aus, und erstellen Sie eine Datei namens azuredeploy.json.

Warnung

Stellen Sie sicher, dass das ausgewählte Verzeichnis ein leeres Verzeichnis ohne Unterverzeichnisse ist.

Fügen Sie den folgenden Inhalt ein:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "resources": []
}

Erstellen des benutzerdefinierten Tests

  1. Öffnen Sie ein Terminal.

  2. Navigieren Sie zu Ihrem Installationsverzeichnis für das Testtoolkit.

  3. Wechseln Sie zum Unterverzeichnis arm-ttk\testcases\deploymentTemplate.

  4. Führen Sie den folgenden Befehl aus:

    code .
    

    Hinweis

    Öffnen Sie zunächst Visual Studio Code manuell und dann das Verzeichnis, wenn sich Visual Studio Code nicht in diesem Pfad befindet.

  5. Erstellen Sie eine Datei namens Custom-ParameterNaming.test.ps1, und fügen Sie den folgenden Inhalt ein:

    param(
    [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array
    [PSObject]
    $MainTemplateResources
    )
    
    Write-Error "To be implemented"
    

    Lassen Sie den Text-Editor geöffnet. Sie werden diese Datei später bearbeiten.

Ausführen des benutzerdefinierten Tests

Führen Sie den benutzerdefinierten Test mithilfe der folgenden Schritte aus:

  1. Öffnen Sie ein neues Terminalfenster, oder verwenden Sie das alte Fenster.

  2. Navigieren Sie zu dem Verzeichnis, in dem Sie azuredeploy.json erstellt haben.

  3. Führen Sie den folgenden Befehl aus, um Visual Studio Code zu starten:

    code .
    

    Hinweis

    Öffnen Sie zunächst Visual Studio Code manuell und dann das Vorlagenverzeichnis, wenn sich Visual Studio Code nicht in diesem Pfad befindet.

  4. Öffnen Sie in Visual Studio Code das integrierte Terminal. Öffnen Sie die Befehlspalette, geben Sie PowerShell ein, und wählen Sie Integriertes Terminal anzeigen aus.

  5. Führen Sie die folgenden Befehle im Terminal aus:

    Hinweis

    Ersetzen Sie path\to\arm-ttk\arm-ttk.psd1 vor dem Importieren des Moduls durch den Pfad zum heruntergeladenen Testtoolkit.

    Import-Module path\to\arm-ttk\arm-ttk.psd1
    

    Tipp

    Wenn Sie das Tool heruntergeladen oder in das Verzeichnis Downloads geklont haben, sieht der Pfad in etwa wie folgt aus: C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.

    Sie können das Tool jetzt verwenden. Solange Sie sich in derselben PowerShell-Sitzung befinden, ist es nicht erforderlich, den Importbefehl erneut auszuführen.

  6. Führen Sie Test-AzTemplate im Terminal aus:

    Test-AzTemplate -TemplatePath .
    

    Die Ausgabe ähnelt dem Folgenden. Die hervorgehobenen Zeilen geben Ihren Test an:

    Validating custom\azuredeploy.json
      JSONFiles Should Be Valid
        [+] JSONFiles Should Be Valid (56 ms)
    Pass  : 1
    Fail  : 0
    Total : 1
    
    
    
      adminUsername Should Not Be A Literal
        [+] adminUsername Should Not Be A Literal (68 ms)
      apiVersions Should Be Recent In Reference Functions
        [+] apiVersions Should Be Recent In Reference Functions (203 ms)
      apiVersions Should Be Recent
        [+] apiVersions Should Be Recent (137 ms)
      artifacts parameter
        [+] artifacts parameter (145 ms)
      CommandToExecute Must Use ProtectedSettings For Secrets
        [+] CommandToExecute Must Use ProtectedSettings For Secrets (171 ms)
      deploymentTemplate
        [-] Custom ParameterNaming (354 ms)
            To be implemented
    
      DependsOn Best Practices
        [+] DependsOn Best Practices (152 ms)
      Deployment Resources Must Not Be Debug
        [+] Deployment Resources Must Not Be Debug (152 ms)
      DeploymentTemplate Must Not Contain Hardcoded Uri
        [+] DeploymentTemplate Must Not Contain Hardcoded Uri (185 ms)
      DeploymentTemplate Schema Is Correct
        [+] DeploymentTemplate Schema Is Correct (197 ms)
      Dynamic Variable References Should Not Use Concat
        [+] Dynamic Variable References Should Not Use Concat (157 ms)
      IDs Should Be Derived From ResourceIDs
        [+] IDs Should Be Derived From ResourceIDs (69 ms)
      Location Should Not Be Hardcoded
        [+] Location Should Not Be Hardcoded (260 ms)
      ManagedIdentityExtension must not be used
        [+] ManagedIdentityExtension must not be used (70 ms)
      Min And Max Value Are Numbers
        [+] Min And Max Value Are Numbers (213 ms)
      Outputs Must Not Contain Secrets
        [+] Outputs Must Not Contain Secrets (76 ms)
      Parameter Types Should Be Consistent
        [+] Parameter Types Should Be Consistent (68 ms)
      Parameters Must Be Referenced
        [+] Parameters Must Be Referenced (93 ms)
      Password params must be secure
        [+] Password params must be secure (111 ms)
      providers apiVersions Is Not Permitted
        [+] providers apiVersions Is Not Permitted (68 ms)
      ResourceIds should not contain
        [+] ResourceIds should not contain (210 ms)
      Resources Should Have Location
        [+] Resources Should Have Location (113 ms)
      Resources Should Not Be Ambiguous
        [+] Resources Should Not Be Ambiguous (147 ms)
      Secure Params In Nested Deployments
        [+] Secure Params In Nested Deployments (242 ms)
      Secure String Parameters Cannot Have Default
        [+] Secure String Parameters Cannot Have Default (129 ms)
      Template Should Not Contain Blanks
        [+] Template Should Not Contain Blanks (201 ms)
      URIs Should Be Properly Constructed
        [+] URIs Should Be Properly Constructed (180 ms)
      Variables Must Be Referenced
        [+] Variables Must Be Referenced (132 ms)
      Virtual Machines Should Not Be Preview
        [+] Virtual Machines Should Not Be Preview (91 ms)
      VM Images Should Use Latest Version
        [+] VM Images Should Use Latest Version (114 ms)
      VM Size Should Be A Parameter
        [+] VM Size Should Be A Parameter (130 ms)
    Pass  : 31
    Fail  : 1
    Total : 32
    

    Da Sie den Test nun gefunden haben, lassen Sie dieses Terminalfenster geöffnet. Sie werden es später erneut verwenden.

Umgestalten des benutzerdefinierten Tests

Nun sorgen Sie für eine ordnungsgemäße Implementierung des benutzerdefinierten Tests.

  1. Navigieren Sie zurück zum Text-Editor mit der Datei Custom-ParameterNaming.test.ps1.

    Hinweis

    Wenn Sie Visual Studio Code versehentlich geschlossen haben, navigieren Sie zum Unterverzeichnis testcases/deploymentTemplate, und öffnen Sie die Datei Custom-ParameterNaming.test.ps1.

  2. Ersetzen Sie den Inhalt der Datei durch den folgenden Code:

    <#
    .Synopsis
     Ensures that all parameters adheres to a naming standard
    .Description
     All parameters should start with the company specific prefix 'tailwind'
    #>
    param(
       # The Template Object
       [Parameter(Mandatory = $true, Position = 0)]
       [PSObject]
       $TemplateObject,
    
       # The Template JSON Text
       [Parameter(Mandatory = $true, Position = 0)]
       [PSObject]
       $TemplateText
    )
    
    foreach ($parameter in $TemplateObject.parameters.psobject.properties) {
      # If the parameter name starts with tailwind, then the parameter is correctly named
      if ($parameter.Name -notmatch 'tailwind*') {
         Write-Error "Parameter '$($parameter.Name)' must start with prefix 'tailwind'" -TargetObject $parameter
      }
    }
    

    Der vorangehende Code durchläuft alle Parameter. Er überprüft das Attribut name und stellt fest, ob der Name mit dem Präfix tailwind beginnt. Wenn der überprüfte Parameter nicht mit der Benennungsregel übereinstimmt, ruft der Code das Cmdlet Write-Error mit einer entsprechenden Fehlermeldung auf.

Aktualisieren der Vorlagendatei

Nun fügen Sie der Vorlagendatei einen Parameter hinzu.

  1. Wählen Sie den Text-Editor mit azuredeploy.json aus, und ändern Sie den Inhalt der Datei in den folgenden Inhalt:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "location": {
          "type": "string",
          "metadata": {
            "description": "a deployment location"
          }
        }
      },
      "resources": []
    }
    

    Der Vorlageninhalt oben definiert den Parameter namens location, der die Benennungsregel nicht erfüllt, da das Präfix tailwind fehlt.

Erneutes Ausführen des Testtoolkits

Sie haben jetzt einen benutzerdefinierten Test erstellt. Die Benennung der Vorlagendatei erfüllt die Anforderung jedoch nicht. Daher erwarten Sie, dass beim anstehenden Testlauf ein Fehler auftritt. Stellen Sie sicher, dass dies der Fall ist, indem Sie den folgenden Schritt ausführen.

Verwenden Sie das vorhandene integrierte Visual Studio Code-Terminalfenster, in dem PowerShell gestartet und in das das Testtoolkit importiert wurde.

Führen Sie in Visual Studio Code Test-AzTemplate im integrierten Terminal aus:

Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming

Der Befehl oben wird mit dem Parameter -Test ausgeführt, der einen Testnamen als Eingabe annimmt. Sie haben Custom-ParameterNaming als Parameter bereitgestellt, was bedeutet, dass nur der neu entwickelte Test ausgeführt wird.

Tipp

Die Verwendung dieses Parameters ist eine bewährte Methode, wenn Sie einen Test entwickeln, da er die ausgeführten Tests und die Größe der Terminalausgabe begrenzt.

Dieser Befehl führt zur folgenden Ausgabe:

Validating custom\azuredeploy.json
 deploymentTemplate
   [-] Custom ParameterNaming (2ms)
       Parameter 'location' must start with prefix 'tailwind'

Das Ergebnis gibt an, dass der Test funktioniert. Stellen Sie sicher, dass dies der Fall ist, indem Sie die Bereitstellungsdatei ändern.

Korrigieren der Vorlagendatei

An dieser Stelle sollten Sie die Korrektheit Ihres benutzerdefinierten Tests überprüfen, indem Sie die Vorlagendatei so ändern, dass sie die Regeln einhält, die vom benutzerdefinierten Test festgelegt wurden.

  1. Ändern Sie in der Visual Studio Code-Instanz mit der Datei azuredeploy.json den Inhalt der Datei wie folgt:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "tailwindLocation": {
          "type": "string",
          "metadata": {
            "description": "a deployment location"
          }
        }
      },
      "resources": []
    }
    

    Der Parameter mit dem Namen location wurde in tailwindLocation umbenannt. Theoretisch sollte dieser Parameter den Test jetzt bestehen. Überprüfen Sie dies.

  2. Fahren Sie mit derselben Visual Studio Code-Instanz fort, und führen Sie Test-AzTemplate im integrierten Terminal aus:

    Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
    

    Die Ausgabe sieht nun wie folgt aus:

    Validating custom\azuredeploy.json
      Custom ParameterNaming
        [+] Custom ParameterNaming (9 ms)
    

Erfolg! Sie haben einen benutzerdefinierten Test implementiert und ausgeführt. Außerdem haben Sie eine Bereitstellungsvorlage korrigiert, damit sie der Testbedingung entspricht.