다음을 통해 공유


Visual Studio Code용 Databricks 확장을 사용하여 pytest로 테스트 실행

이 문서에서는 Visual Studio Code용 Databricks 확장을 사용하여 pytest 테스트를 실행하는 방법을 설명합니다. Visual Studio Code용 Databricks 확장이란?을 참조하세요.

원격 Azure Databricks 작업 영역의 클러스터에 연결할 필요가 없는 로컬 코드에서 pytest를 실행할 수 있습니다. 예를 들어 pytest를 사용하여 로컬 메모리에서 PySpark DataFrames를 수락하고 반환하는 함수를 테스트할 수 있습니다. pytest를 시작하여 로컬에서 실행하려면 pytest 설명서에서 시작을 참조하세요.

원격 Azure Databricks 작업 영역의 코드에 대해 pytest를 실행하려면 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단계: pytest 실행기 만들기

이전 단계에서 테스트를 실행하도록 pytest를 지시하는 다음 코드가 포함된 Python 파일을 추가합니다. 이 예제에서는 파일 이름이 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를 선택합니다.

    .vscode/launch.json 파일이 아직 없는 경우 Visual Studio Code는 프로젝트에 이 파일을 추가합니다.

  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)