Поделиться через


Запуск автоматических тестов с помощью Azurite

Из этой статьи вы узнаете, как писать автоматические тесты частных конечных точек для Хранилища BLOB-объектов Azure с помощью эмулятора хранилища Azurite.

Как запускать тесты на локальном компьютере

  1. Установите последнюю версию Python

  2. Установите Обозреватель службы хранилища Azure

  3. Установите и запустите Azurite одним из указанных ниже способов.

    Вариант 1. Используйте npm, чтобы установить 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
    

    Вариант 2. Запустите Azurite с помощью Docker

    docker run -p 10000:10000 mcr.microsoft.com/azure-storage/azurite azurite-blob --blobHost 0.0.0.0
    
  4. В Обозревателе службы хранилища Azure выберите Attach to a local emulator (Подключить к локальному эмулятору)

    Снимок экрана Обозревателя хранилища Azure, подключающегося к источнику Azure Storage.

  5. Укажите Отображаемое имя и номер порта BLOB-объектов, чтобы подключиться к Azurite и управлять локальным хранилищем BLOB-объектов с помощью Обозревателя службы хранилища Azure.

    На снимке экрана изображено окно с подключением Обозревателя службы хранилища Azure к локальному эмулятору.

  6. Создание виртуального окружения Python

    python -m venv .venv
    
  7. Создайте контейнер и инициализируйте переменные среды. Чтобы создавать тесты, используйте файл PyTestconftest.py. Ниже приведен пример файла conftest.py.

    from azure.storage.blob import BlobServiceClient
    import os
    
    def pytest_generate_tests(metafunc):
       os.environ['AZURE_STORAGE_CONNECTION_STRING'] = 'DefaultEndpointsProtocol=http;AccountName=[name];AccountKey=[key];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)
    

    Примечание.

    Значение AZURE_STORAGE_CONNECTION_STRING устанавливается по умолчанию для Azurite. Это не закрытый ключ.

  8. Установите зависимости, перечисленные в файле requirements.txt

    pip install -r requirements.txt
    
  9. Запустите тесты.

    python -m pytest ./tests
    

После выполнения тестов вы можете увидеть файлы в хранилище объектов BLOB Azurite с помощью Обозревателя хранилища Azure.

Снимок экрана: обозреватель службы хранилища Azure с файлами, созданными тестами.

Выполнение тестов в Azure Pipelines

Выполните тесты локально, а затем запустите их в Azure Pipelines. Используйте образ Docker Azurite как размещенный агент в Azure или установите Azurite с помощью npm. В следующем примере Azure Pipelines используется npm для установки Azurite.

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

После выполнения тестов в Azure Pipelines должен появится подобный результат:

Снимок экрана: результаты теста Azure Pipelines.

Следующие шаги