Köra tester med pytest med Hjälp av Databricks-tillägget för Visual Studio Code
Den här artikeln beskriver hur du kör tester med hjälp av pytest
Databricks-tillägget för Visual Studio Code. Se Vad är 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. Om du vill get komma igång med pytest
och köra det lokalt, läs Get Starta i dokumentationen för 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 pytest
fixtur 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 table 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:
På huvudmenyn klickar du på Kör > Lägg till konfiguration.
I kommandopaletten
Databricks .Visual Studio Code lägger till en
.vscode/launch.json
fil i projektet, om den här filen inte redan finns.Ä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 exempletUnit 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": {} } ] }
- Ändra körningskonfigurationens namn från
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:
-
Om pytest är synligt på fliken Bibliotek är det
pytest
redan installerat. Om pytest inte visas klickar du på Installera ny. - För Bibliotekskälla klickar du på PyPI.
- För Paket anger du
pytest
. - Klicka på Installera.
- 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:
- Klicka på Visa > kör på huvudmenyn.
- I Kör och felsökalistklickar du på enhetstester (på Databricks), om den inte redan är markerad.
- 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)