Freigeben über


Ausführen von Python Tests mithilfe der Databricks-Erweiterung für Visual Studio Code

Auf dieser Seite wird beschrieben, wie Sie Python Tests mithilfe der Databricks-Erweiterung für Visual Studio Code ausführen. Siehe Databricks-Erweiterung für Visual Studio Code.

Ausführen von Tests mithilfe von Pytest

Sie können pytest auf lokalem Code ausführen, der keine Verbindung mit einem Cluster in einem Remote-Azure Databricks-Arbeitsbereich benötigt. Sie können beispielsweise pytest verwenden, um Ihre Funktionen zu testen, die PySpark-DataFrames im lokalen Arbeitsspeicher akzeptieren und zurückgeben. Informationen zu den ersten Schritten mit pytest und zur lokalen Ausführung finden Sie unter Erste Schritte sowie in der pytest-Dokumentation.

Um pytest in einem entfernten Azure Databricks-Arbeitsbereich auf Code auszuführen, gehen Sie in Ihrem Visual Studio Code-Projekt wie folgt vor:

Schritt 1: Erstellen der Tests

Fügen Sie eine Python Datei mit dem folgenden Code hinzu, der Ihre auszuführenden Tests enthält. In diesem Beispiel wird davon ausgegangen, dass diese Datei spark_test.py benannt ist und sich im Stammverzeichnis Ihres Visual Studio Code Projekts befindet. Diese Datei enthält eine pytestVorrichtung, die den Cluster SparkSession (den Einstiegspunkt zu Spark-Funktionalität auf dem Cluster) für die Tests verfügbar macht. Diese Datei enthält einen einzelnen Test, der überprüft, ob die angegebene Zelle in der Tabelle den angegebenen Wert enthält. Sie können dieser Datei bei Bedarf eigene Tests hinzufügen.

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'

Schritt 2: Erstellen des pytest-Runners

Fügen Sie eine Python Datei mit dem folgenden Code hinzu, der pytest anweist, Ihre Tests aus dem vorherigen Schritt auszuführen. In diesem Beispiel wird davon ausgegangen, dass die Datei pytest_databricks.py benannt ist und sich im Stammverzeichnis Des Visual Studio Code Projekts befindet.

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:])

Schritt 3: Erstellen einer benutzerdefinierten Ausführungskonfiguration

Um pytest anzuweisen, Ihre Tests auszuführen, müssen Sie eine benutzerdefinierte Ausführungskonfiguration erstellen. Verwenden Sie die vorhandene clusterbasierte Databricks-Ausführungskonfiguration, um Ihre eigene benutzerdefinierte Ausführungskonfiguration wie folgt zu erstellen:

  1. Klicken Sie im Hauptmenü auf Ausführen > Konfiguration hinzufügen.

  2. Wählen Sie in der Befehlspalette die Option Databricks aus.

    Visual Studio Code fügt ihrem Projekt eine .vscode/launch.json-Datei hinzu, falls diese Datei noch nicht vorhanden ist.

  3. Ändern Sie die Startausführungskonfiguration wie folgt, und speichern Sie die Datei dann:

    • Ändern Sie den Namen dieser Ausführungskonfiguration von Run on Databricks zu einem eindeutigen Anzeigenamen für diese Konfiguration, in diesem Beispiel Unit Tests (on Databricks).
    • Ändern Sie program von ${file} in den Pfad im Projekt, der den Testrunner enthält (in diesem Beispiel ${workspaceFolder}/pytest_databricks.py).
    • Ändern Sie args von [] in den Pfad im Projekt, der die Dateien mit Ihren Tests enthält (in diesem Beispiel ["."]).

    Ihre Datei launch.json sollte wie folgt aussehen:

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

Schritt 4: Ausführen der Tests

Vergewissern Sie sich zunächst, dass pytest bereits auf dem Cluster installiert ist. Gehen Sie beispielsweise wie folgt vor, wenn die Einstellungsseite des Clusters in Ihrem Azure Databricks Arbeitsbereich geöffnet ist:

  1. Wenn pytest auf der Registerkarte Bibliotheken angezeigt wird, ist pytest bereits installiert. Wenn pytest nicht angezeigt wird, klicken Sie auf Neu installieren.
  2. Klicken Sie unter Bibliotheksquelle auf PyPI.
  3. Geben Sie unter Paket anschließend pytest ein.
  4. Klicken Sie auf Installieren.
  5. Warten Sie, bis sich der Status von Ausstehend in Installiert ändert.

Führen Sie zum Ausführen der Tests die folgenden Schritte aus Ihrem Visual Studio Code Projekt aus:

  1. Klicken Sie im Hauptmenü auf Ansicht > Ausführen.
  2. Klicken Sie in der Liste Ausführen und debuggen auf Komponententests (in Databricks), sofern noch nicht ausgewählt.
  3. Klicken Sie auf den grünen Pfeil (Debuggen starten).

Die pytest-Ergebnisse werden in der Debugging-Konsole angezeigt (Ansicht > Debugging-Konsole im Hauptmenü). Diese Ergebnisse zeigen beispielsweise, dass mindestens ein Test in der Datei spark_test.py gefunden wurde, und ein Punkt (.) bedeutet, dass ein einzelner Test gefunden und bestanden wurde. (Ein fehlerhafter Test zeigt F an.)

<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)

Ausführen von Tests mit Databricks Connect

Verwenden Sie Databricks Connect, um Tests lokal auszuführen, die Spark-APIs verwenden.

Schritt 1: Konfigurieren von Databricks Connect

Führen Sie die Schritte aus, um Databricks Connect für die Erweiterung zu konfigurieren. Siehe Debug-Code mit Databricks Connect für die Databricks-Erweiterung für Visual Studio Code.

Schritt 2: Erstellen eines Komponententests

Fügen Sie eine Python Datei mit dem folgenden Code hinzu, der Ihren Test zum Ausführen enthält. In diesem Beispiel wird davon ausgegangen, dass diese Datei benannt main_test.pyist.

from my_project import main


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

Schritt 3: Hinzufügen oder Aktualisieren der Startkonfiguration für debugpy

Erstellen Sie als Nächstes eine debugpy Startkonfiguration, die Databricks Connect ermöglicht.

  1. Klicken Sie im Hauptmenü von Visual Studio Code auf Run > Add configuration.

  2. Wählen Sie in der BefehlspalettePython Debugger aus.

    Visual Studio Code fügt ihrem Projekt eine .vscode/launch.json-Datei hinzu, falls diese Datei noch nicht vorhanden ist.

  3. Feld "databricks": true hinzufügen. Dies ermöglicht Databricks Connect.

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

Schritt 4: Ausführen der Tests

Führen Sie zum Ausführen der Tests die folgenden Schritte aus Ihrem Visual Studio Code Projekt aus:

  1. Klicken Sie im Hauptmenü auf "Testen anzeigen>", um den Testbereich zu öffnen.
  2. Führen Sie im Testbereich Ihren Test aus, indem Sie auf das dem Debugsymbol zugeordnete main_test.pySymbol klicken. Beachten Sie, dass beim Ausführen des Tests die geänderte Debugkonfiguration nicht ausgelöst wird, und der Code hat keinen Zugriff auf Databricks Connect.