Uruchamianie testów za pomocą narzędzia pytest przy użyciu rozszerzenia databricks dla programu Visual Studio Code
W tym artykule opisano sposób uruchamiania testów przy użyciu pytest
rozszerzenia usługi Databricks dla programu Visual Studio Code. Zobacz Co to jest rozszerzenie usługi Databricks dla programu Visual Studio Code?.
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
polecenia , aby przetestować funkcje, które akceptują i zwracają ramki danych PySpark w pamięci lokalnej. Aby
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. Ten plik zawiera pytest
urządzenie, które sprawia, że klaster SparkSession
(punkt wejścia do funkcji spark w klastrze) jest dostępny dla testów. Ten plik zawiera pojedynczy test sprawdzający, czy określona komórka w table 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
uruchamianie testów, należy utworzyć niestandardową konfigurację uruchamiania. Użyj istniejącej konfiguracji uruchamiania opartej na klastrze usługi Databricks , aby utworzyć własną niestandardową konfigurację uruchamiania w następujący sposób:
W menu głównym kliknij pozycję Uruchom > dodaj konfigurację.
W Palecie PoleceńselectDatabricks.
Program Visual Studio Code dodaje
.vscode/launch.json
plik do projektu, jeśli ten plik jeszcze nie istnieje.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ładzieUnit Tests (on Databricks)
. - Przejdź
program
z${file}
do ścieżki w projekcie, który zawiera moduł uruchamiający testy, w tym przykładzie${workspaceFolder}/pytest_databricks.py
. - Przejdź
args
z[]
do ścieżki w projekcie, który zawiera 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": {} } ] }
- Zmień nazwę tej konfiguracji przebiegu z
Krok 4. Uruchamianie testów
Upewnij się, że pytest
program 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:
-
Na karcie Biblioteki, jeśli narzędzie pytest jest widoczne,
pytest
jest już zainstalowane. Jeśli narzędzie pytest nie jest widoczne, kliknij przycisk Zainstaluj nowy. - W obszarze Źródło biblioteki kliknij pozycję PyPI.
- W polu Pakiet wprowadź wartość
pytest
. - Kliknij przycisk Zainstaluj.
- 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:
- W menu głównym kliknij pozycję Wyświetl > uruchom.
- W Uruchom i debugujlistkliknij pozycję Testy jednostkowe (w usłudze Databricks), jeśli nie została jeszcze wybrana.
- 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)