Udostępnij przez


Uruchamianie testów języka Python przy użyciu rozszerzenia databricks dla programu Visual Studio Code

Na tej stronie opisano sposób uruchamiania testów języka Python przy użyciu rozszerzenia usługi Databricks dla programu Visual Studio Code. Zobacz Co to jest rozszerzenie usługi Databricks dla programu Visual Studio Code?.

Uruchamianie testów przy użyciu narzędzia pytest

Narzędzie pytest można uruchomić w kodzie lokalnym, który nie wymaga połączenia z klastrem w zdalnym obszarze roboczym usługi Azure Databricks. Na przykład możesz użyć pytest, aby przetestować funkcje, które akceptują i zwracają ramki danych PySpark w pamięci lokalnej. Aby rozpocząć pracę z pytest i uruchomić ją lokalnie, przeczytaj Wprowadzenie w dokumentacji pytest.

Aby uruchomić pytest kod w zdalnym obszarze roboczym usługi Azure Databricks, wykonaj następujące czynności w projekcie programu Visual Studio Code:

Krok 1. Tworzenie testów

Dodaj plik w języku Python z następującym kodem zawierającym testy do uruchomienia. W tym przykładzie przyjęto założenie, że ten plik ma nazwę spark_test.py i znajduje się w katalogu głównym projektu programu Visual Studio Code. Plik ten zawiera pytestkonfigurację, która sprawia, że klastera SparkSession(punkt wejścia do funkcjonalności Spark na klastrze) jest dostępny dla testów. Ten plik zawiera pojedynczy test, który sprawdza, czy określona komórka w tabeli zawiera określoną wartość. W razie potrzeby możesz dodać własne testy do tego pliku.

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'

Krok 2. Tworzenie modułu uruchamiającego pytest

Dodaj plik w języku Python z następującym kodem, który instruuje pytest uruchamianie testów z poprzedniego kroku. W tym przykładzie przyjęto założenie, że plik ma nazwę pytest_databricks.py i znajduje się w katalogu głównym projektu programu 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:])

Krok 3. Tworzenie niestandardowej konfiguracji przebiegu

Aby poinstruować pytest, aby uruchomił testy, należy utworzyć niestandardową konfigurację uruchomienia. Użyj istniejącej konfiguracji uruchamiania na klastrze Databricks, aby utworzyć własną niestandardową konfigurację uruchamiania w następujący sposób:

  1. W menu głównym kliknij pozycję Uruchom > dodaj konfigurację.

  2. W palecie poleceńwybierz Databricks.

    Program Visual Studio Code dodaje .vscode/launch.json plik do projektu, jeśli ten plik jeszcze nie istnieje.

  3. Zmień konfigurację uruchamiania początkowego w następujący sposób, a następnie zapisz plik:

    • Zmień nazwę tej konfiguracji przebiegu z Run on Databricks na unikatową nazwę wyświetlaną dla tej konfiguracji, w tym przykładzie Unit Tests (on Databricks).
    • Zmień program z ${file} na ścieżkę w projekcie, która zawiera moduł uruchamiający testy, w tym przykładzie ${workspaceFolder}/pytest_databricks.py.
    • Zmień args z [] na ścieżkę w projekcie zawierającą pliki z testami, w tym przykładzie ["."].

    Plik launch.json powinien wyglądać następująco:

    {
      // 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": {}
        }
      ]
    }
    

Krok 4. Uruchamianie testów

Upewnij się, że pytest jest już zainstalowany w klastrze. Na przykład po otwarciu strony ustawień klastra w obszarze roboczym usługi Azure Databricks wykonaj następujące czynności:

  1. Na karcie Biblioteka, jeśli pytest jest widoczne, oznacza to, że pytest jest już zainstalowane. Jeśli narzędzie pytest nie jest widoczne, kliknij przycisk Zainstaluj nowy.
  2. Kliknij PyPI dla Źródło biblioteki.
  3. W polu Pakiet wprowadź wartość pytest.
  4. Kliknij przycisk Zainstaluj.
  5. Poczekaj, aż stan zmieni się z Oczekujące na Zainstalowane.

Aby uruchomić testy, wykonaj następujące czynności w projekcie programu Visual Studio Code:

  1. W menu głównym kliknij pozycję Wyświetl > Uruchom.
  2. Na liście Uruchom i Debuguj kliknij pozycję Testy Jednostkowe (w usłudze Databricks), jeśli nie została jeszcze wybrana.
  3. Kliknij zieloną strzałkę (Rozpocznij debugowanie) ikonę.

Wyniki pytest są wyświetlane w konsoli debugowania (Wyświetl > konsolę debugowania w menu głównym). Na przykład te wyniki pokazują, że w spark_test.py pliku znaleziono co najmniej jeden test, a kropka (.) oznacza, że jeden test został znaleziony i przekazany. (Test kończący się niepowodzeniem pokazuje wartość 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)

Uruchamianie testów przy użyciu usługi Databricks Connect

Aby uruchamiać testy lokalnie korzystające z interfejsów API platformy Spark, użyj usługi Databricks Connect.

Krok 1. Konfigurowanie usługi Databricks Connect

Postępuj zgodnie z instrukcjami, aby skonfigurować program Databricks Connect dla rozszerzenia. Zobacz Debugowanie kodu przy użyciu usługi Databricks Connect dla rozszerzenia usługi Databricks dla programu Visual Studio Code.

Krok 2. Tworzenie testu jednostkowego

Dodaj plik w języku Python z następującym kodem zawierającym test do uruchomienia. W tym przykładzie przyjęto założenie, że ten plik ma nazwę main_test.py.

from my_project import main


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

Krok 3. Dodawanie lub aktualizowanie konfiguracji uruchamiania debugpy

Następnie utwórz konfigurację uruchamiania debugpy , która umożliwia korzystanie z usługi Databricks Connect.

  1. W menu głównym programu Visual Studio Code kliknij pozycję Uruchom > dodaj konfigurację.

  2. W palecie poleceń wybierz pozycję Debuger języka Python.

    Program Visual Studio Code dodaje .vscode/launch.json plik do projektu, jeśli ten plik jeszcze nie istnieje.

  3. Dodaj "databricks": true pole. Umożliwia to nawiązanie połączenia z usługą Databricks Connect.

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

Krok 4. Uruchamianie testów

Aby uruchomić testy, wykonaj następujące czynności w projekcie programu Visual Studio Code:

  1. W menu głównym kliknij pozycję Wyświetl > testowanie , aby otworzyć panel testowania.
  2. W panelu testowania uruchom test, klikając ikonę debugowania skojarzoną z main_test.py. Pamiętaj, że uruchomienie testu nie spowoduje wyzwolenia zmodyfikowanej konfiguracji debugowania, a kod nie będzie miał dostępu do usługi Databricks Connect.