Ausführen automatisierter Tests mithilfe von Azurite

Erfahren Sie, wie Sie mithilfe von Azurite automatisierte Tests für private Endpunkte für Azure BLOB Storage Emulator schreiben.

Ausführen von Tests auf Ihrem lokalen Computer aus

  1. Installieren der aktuellen Version von Python

  2. Installieren von Azure Storage-Explorer

  3. Installieren und Ausführen von Azurite:

    Option 1: Verwenden von npm zum Installieren und anschließendes Ausführen von Azurite

    # Install Azurite
    npm install -g azurite
    
    # Create an Azurite directory
    mkdir c:\azurite
    
    # Launch Azurite locally
    azurite --silent --location c:\azurite --debug c:\azurite\debug.log
    

    Option 2: Verwenden von Docker zum Ausführen von Azurite

    docker run -p 10000:10000 mcr.microsoft.com/azure-storage/azurite azurite-blob --blobHost 0.0.0.0
    
  4. Wählen Sie im Azure Storage Explorer die Option Anhängen an einen lokalen Emulator

    Screenshot der Azure Storage-Explorer, Herstellen einer Verbindung mit Azure Storage Quelle.

  5. Geben Sie einen Anzeigenamen und eine BLOB-Port-Nummer an, um eine Verbindung mit Azurite herzustellen, und verwenden Sie Azure Storage-Explorer, um den lokalen BLOB-Speicher zu verwalten.

    Screenshot des Azure Storage-Explorer, angehängt an einen lokalen Emulator.

  6. Erstellen einer virtuellen Python-Umgebung

    python -m venv .venv
    
  7. Erstellen Sie einen Container, und initialisieren Sie Umgebungsvariablen. Verwenden Sie eine Pytestconftest.py-Datei, um Tests zu generieren. Hier ein Beispiel für eine conftest.py-Datei:

    from azure.storage.blob import BlobServiceClient
    import os
    
    def pytest_generate_tests(metafunc):
       os.environ['AZURE_STORAGE_CONNECTION_STRING'] = 'DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;'
       os.environ['STORAGE_CONTAINER'] = 'test-container'
    
       # Create a container for Azurite for the first run
       blob_service_client = BlobServiceClient.from_connection_string(os.environ.get("AZURE_STORAGE_CONNECTION_STRING"))
       try:
          blob_service_client.create_container(os.environ.get("STORAGE_CONTAINER"))
       except Exception as e:
          print(e)
    

    Hinweis

    Der für angezeigte Wert AZURE_STORAGE_CONNECTION_STRING ist der Standardwert für Azurite, es handelt sich nicht um einen privaten Schlüssel.

  8. Installieren von Abhängigkeiten, die in einer requirements.txt-Datei aufgelistet sind

    pip install -r requirements.txt
    
  9. Ausführen von Tests:

    python -m pytest ./tests
    

Nachdem Sie Tests ausgeführt haben, können Sie die Dateien im Azurite BLOB-Speicher mit Azure Storage-Explorer anzeigen.

Screenshot von Azure Storage-Explorer, der von den Tests generierte Dateien anzeigt.

Ausführen von Tests auf Azure Pipelines

Stellen Sie nach dem lokalen Ausführen von Tests sicher, dass die Tests auf Azure Pipelinesbestanden werden. Verwenden Sie ein Docker Azurite-Image als gehosteten Agent in Azure, oder verwenden Sie npm zum Installieren von Azurite. Im folgenden Azure Pipelines-Beispiel wird npm zum Installieren von Azurite verwendet.

trigger:
- master

steps:
- task: UsePythonVersion@0
  displayName: 'Use Python 3.7'
  inputs:
    versionSpec: 3.7

- bash: |
    pip install -r requirements_tests.txt
  displayName: 'Setup requirements for tests'

- bash: |
    sudo npm install -g azurite
    sudo mkdir azurite
    sudo azurite --silent --location azurite --debug azurite\debug.log &
  displayName: 'Install and Run Azurite'

- bash: |
    python -m pytest --junit-xml=unit_tests_report.xml --cov=tests --cov-report=html --cov-report=xml ./tests
  displayName: 'Run Tests'

- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
    reportDirectory: '$(System.DefaultWorkingDirectory)/**/htmlcov'

- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit'
    testResultsFiles: '**/*_tests_report.xml'
    failTaskOnFailedTests: true

Nachdem Sie die Azure Pipelines-Tests ausgeführt haben, sollte eine Ausgabe ähnlich der folgenden angezeigt werden:

Screenshot der Azure Pipelines-Testergebnisse.

Nächste Schritte