Share via


Köra tester med pytest för Databricks-tillägget för Visual Studio Code

Den här artikeln beskriver hur du kör tester med hjälp pytest av för Databricks-tillägget för Visual Studio Code. Se Vad är Databricks-tillägget för Visual Studio Code?.

Den här informationen förutsätter att du redan har installerat och konfigurerat Databricks-tillägget för Visual Studio Code. Se Installera Databricks-tillägget för Visual Studio Code.

Du kan köra pytest på lokal kod som inte behöver en anslutning till ett kluster på en fjärransluten Azure Databricks-arbetsyta. Du kan till exempel använda pytest för att testa dina funktioner som accepterar och returnerar PySpark DataFrames i lokalt minne. Information om hur du kommer igång med pytest och kör det lokalt finns i Kom igång i dokumentationen pytest .

Om du vill köra pytest kod på en fjärransluten Azure Databricks-arbetsyta gör du följande i ditt Visual Studio Code-projekt:

Steg 1: Skapa testerna

Lägg till en Python-fil med följande kod, som innehåller dina tester som ska köras. Det här exemplet förutsätter att den här filen heter spark_test.py och finns i roten för ditt Visual Studio Code-projekt. Den här filen innehåller en pytestfixtur som gör klustrets SparkSession (startpunkten till Spark-funktionen i klustret) tillgängliga för testerna. Den här filen innehåller ett enda test som kontrollerar om den angivna cellen i tabellen innehåller det angivna värdet. Du kan lägga till dina egna tester i den här filen efter behov.

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'

Steg 2: Skapa pytest-löparen

Lägg till en Python-fil med följande kod, som instruerar pytest dig att köra dina tester från föregående steg. Det här exemplet förutsätter att filen heter pytest_databricks.py och finns i roten för ditt Visual Studio Code-projekt.

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

Steg 3: Skapa en anpassad körningskonfiguration

Om du vill instruera pytest dig att köra dina tester måste du skapa en anpassad körningskonfiguration. Använd den befintliga databricks-klusterbaserade körningskonfigurationen för att skapa en egen anpassad körningskonfiguration på följande sätt:

  1. På huvudmenyn klickar du på Kör > Lägg till konfiguration.

  2. I kommandopaletten väljer du Databricks.

    Visual Studio Code lägger till en .vscode/launch.json fil i projektet, om den här filen inte redan finns.

  3. Ändra startkörningskonfigurationen på följande sätt och spara sedan filen:

    • Ändra körningskonfigurationens namn från Run on Databricks till ett unikt visningsnamn för den här konfigurationen i det här exemplet Unit Tests (on Databricks).
    • Ändra program från ${file} till sökvägen i projektet som innehåller testlöparen i det här exemplet ${workspaceFolder}/pytest_databricks.py.
    • Ändra args från [] till sökvägen i projektet som innehåller filerna med dina tester i det här exemplet ["."].

    Filen launch.json bör se ut så här:

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

Steg 4: Kör testerna

Kontrollera att det pytest redan är installerat på klustret först. Gör till exempel följande med klustrets inställningssida öppen på din Azure Databricks-arbetsyta:

  1. Om pytest är synligt på fliken Bibliotek är det pytest redan installerat. Om pytest inte visas klickar du på Installera ny.
  2. För Bibliotekskälla klickar du på PyPI.
  3. För Paket anger du pytest.
  4. Klicka på Installera.
  5. Vänta tills Status ändras från Väntar till Installerad.

Kör testerna genom att göra följande från Visual Studio Code-projektet:

  1. Klicka på Visa > körhuvudmenyn.
  2. I listan Kör och felsöka klickar du på Enhetstester (på Databricks), om den inte redan är markerad.
  3. Klicka på ikonen för den gröna pilen (Starta felsökning).

Resultatet pytest visas i felsökningskonsolen(Visa > felsökningskonsolen på huvudmenyn). Dessa resultat visar till exempel att minst ett test hittades i spark_test.py filen, och en punkt (.) innebär att ett enda test hittades och godkändes. (Ett misslyckat test skulle visa en 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)