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


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

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

Вы можете запустить pytest в локальном коде, который не требует подключения к кластеру в удаленной рабочей области Azure Databricks. Например, можно использовать pytest для тестирования функций, которые принимают и возвращают Кадры данных 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)