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


Выполнение тестов Python с помощью расширения Databricks для Visual Studio Code

На этой странице описывается, как выполнять тесты Python с помощью расширения Databricks для Visual Studio Code. См. раздел "Что такое расширение Databricks для Visual Studio Code?".

Выполнение тестов с помощью pytest

Вы можете запустить pytest в локальном коде, который не требует подключения к кластеру в удаленной рабочей области Azure Databricks. Например, можно использовать pytest для тестирования функций, которые в локальной памяти принимают и возвращают DataFrame PySpark. Чтобы приступить к работе с pytest и запустить его локально, см. раздел в документации по pytest.

Чтобы выполнить код pytest в рабочей области Azure Databricks на удаленной машине, сделайте следующие шаги в вашем проекте Visual Studio Code:

Шаг 1. Создание тестов

Добавьте файл Python со следующим кодом, который содержит тесты для выполнения. В этом примере предполагается, что этот файл называется spark_test.py и находится в корне проекта Visual Studio Code. Этот файл содержит pytestфикстуру, которая делает SparkSession (точку входа в функциональность Spark на кластере) доступным для тестов. Этот файл содержит один тест, который проверяет, содержит ли указанная ячейка в таблице указанное значение. При необходимости можно добавить собственные тесты в этот файл.

from pyspark.sql import SparkSession
import pytest

@pytest.fixture
def spark() -> SparkSession:
  # Create a SparkSession (the entry point to Spark functionality) on
  # the cluster in the remote Databricks workspace. Unit tests do not
  # have access to this SparkSession by default.
  return SparkSession.builder.getOrCreate()

# Now add your unit tests.

# For example, here is a unit test that must be run on the
# cluster in the remote Databricks workspace.
# This example determines whether the specified cell in the
# specified table contains the specified value. For example,
# the third column in the first row should contain the word "Ideal":
#
# +----+-------+-------+-------+---------+-------+-------+-------+------+-------+------+
# |_c0 | carat | cut   | color | clarity | depth | table | price | x    | y     | z    |
# +----+-------+-------+-------+---------+-------+-------+-------+------+-------+------+
# | 1  | 0.23  | Ideal | E     | SI2     | 61.5  | 55    | 326   | 3.95 | 3. 98 | 2.43 |
# +----+-------+-------+-------+---------+-------+-------+-------+------+-------+------+
# ...
#
def test_spark(spark):
  spark.sql('USE default')
  data = spark.sql('SELECT * FROM diamonds')
  assert data.collect()[0][2] == 'Ideal'

Шаг 2. Создание runner pytest

Добавьте файл Python со следующим кодом, который указывает pytest на выполнение тестов на предыдущем шаге. В этом примере предполагается, что файл называется pytest_databricks.py и находится в корне проекта Visual Studio Code.

import pytest
import os
import sys

# Run all tests in the connected directory in the remote Databricks workspace.
# By default, pytest searches through all files with filenames ending with
# "_test.py" for tests. Within each of these files, pytest runs each function
# with a function name beginning with "test_".

# Get the path to the directory for this file in the workspace.
dir_root = os.path.dirname(os.path.realpath(__file__))
# Switch to the root directory.
os.chdir(dir_root)

# Skip writing .pyc files to the bytecode cache on the cluster.
sys.dont_write_bytecode = True

# Now run pytest from the root directory, using the
# arguments that are supplied by your custom run configuration in
# your Visual Studio Code project. In this case, the custom run
# configuration JSON must contain these unique "program" and
# "args" objects:
#
# ...
# {
#   ...
#   "program": "${workspaceFolder}/path/to/this/file/in/workspace",
#   "args": ["/path/to/_test.py-files"]
# }
# ...
#
retcode = pytest.main(sys.argv[1:])

Шаг 3. Создание настраиваемой конфигурации запуска

Чтобы проинструктировать pytest выполнить тесты, нужно создать настраиваемую конфигурацию запуска. Используйте существующую конфигурацию запуска на основе кластера Databricks , чтобы создать собственную настраиваемую конфигурацию запуска, как показано ниже.

  1. В главном меню выберите пункт "Запустить > Добавить конфигурацию".

  2. В палитре команд выберите Databricks.

    Visual Studio Code добавляет .vscode/launch.json файл в проект, если этот файл еще не существует.

  3. Измените конфигурацию запуска начального запуска следующим образом, а затем сохраните файл:

    • Измените имя этой конфигурации запуска с Run on Databricks на некоторое уникальное имя этой конфигурации, в этом примере Unit Tests (on Databricks).
    • Измените program с ${file} на путь в проекте, который содержит тестовый раннер, в этом примере ${workspaceFolder}/pytest_databricks.py.
    • Измените args с [] на путь в проекте, который содержит файлы с вашими тестами, в данном примере ["."].

    Файл launch.json должен выглядеть следующим образом:

    {
      // Use IntelliSense to learn about possible attributes.
      // Hover to view descriptions of existing attributes.
      // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
      "version": "0.2.0",
      "configurations": [
        {
          "type": "databricks",
          "request": "launch",
          "name": "Unit Tests (on Databricks)",
          "program": "${workspaceFolder}/pytest_databricks.py",
          "args": ["."],
          "env": {}
        }
      ]
    }
    

Шаг 4. Выполнение тестов

Сначала убедитесь, что pytest уже установлен в кластере. Например, при открытии страницы параметров кластера в рабочей области Azure Databricks сделайте следующее:

  1. На вкладке "Библиотеки", если pytest отображается, то pytest уже установлен. Если pytest не отображается, нажмите кнопку "Установить новую".
  2. Для источника библиотеки щелкните PyPI.
  3. Для пакета введите pytest.
  4. Щелкните Установить.
  5. Подождите до тех пор, пока состояние не изменится с ожидания на установлено.

Чтобы выполнить тесты, выполните следующие действия из проекта Visual Studio Code:

  1. В главном меню выберите Вид > Выполнить.
  2. В списке Запуск и Отладка щелкните Модульные Тесты (в Databricks), если он еще не выбран.
  3. Щелкните значок зеленой стрелки (начать отладку).

pytest Результаты отображаются в консоли отладки (просмотр > консоли отладки в главном меню). Например, эти результаты показывают, что в spark_test.py файле найден хотя бы один тест, а точка (.) означает, что был найден и передан один тест. (Неудачный тест будет отображать F.)

<date>, <time> - Creating execution context on cluster <cluster-id> ...
<date>, <time> - Synchronizing code to /Workspace/path/to/directory ...
<date>, <time> - Running /pytest_databricks.py ...
============================= test session starts ==============================
platform linux -- Python <version>, pytest-<version>, pluggy-<version>
rootdir: /Workspace/path/to/directory
collected 1 item

spark_test.py .                                                          [100%]

============================== 1 passed in 3.25s ===============================
<date>, <time> - Done (took 10818ms)

Выполнение тестов с помощью Databricks Connect

Для локального выполнения тестов, использующих API Spark, используйте Databricks Connect.

Шаг 1. Настройка Databricks Connect

Выполните действия, чтобы настроить Databricks Connect для расширения. Смотрите Отладка кода с использованием Databricks Connect для расширения Databricks для Visual Studio Code.

Шаг 2. Создание модульного теста

Добавьте файл Python со следующим кодом, который содержит тест для запуска. В этом примере предполагается, что этот файл называется main_test.py.

from my_project import main


def test_find_all_taxis():
    taxis = main.find_all_taxis()
    assert taxis.count() > 5

Шаг 3. Добавление или обновление конфигурации запуска debugpy

Затем создайте конфигурацию debugpy запуска, которая включает Databricks Connect.

  1. В главном меню Visual Studio Code нажмите «Запуск > Добавить конфигурацию».

  2. В палитре команд выберите отладчик Python.

    Visual Studio Code добавляет .vscode/launch.json файл в проект, если этот файл еще не существует.

  3. Добавьте "databricks": true поле. Это позволяет Databricks Connect.

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Unit Tests (on Databricks)",
      "type": "debugpy",
      "databricks": true,
      "request": "launch",
      "program": "${file}",
      "args": ["."],
      "env": {},
      "console": "integratedTerminal"
    }
  ]
}

Шаг 4. Выполнение тестов

Чтобы выполнить тесты, выполните следующие действия из проекта Visual Studio Code:

  1. В главном меню нажмите кнопку "Просмотреть > тестирование ", чтобы открыть панель тестирования.
  2. На панели тестирования запустите тест, щелкнув значок отладки, связанный с main_test.py. Обратите внимание, что только запуск теста не активирует измененную конфигурацию отладки, и код не будет иметь доступа к Databricks Connect.