Spouštění testů pomocí pytestu pomocí rozšíření Databricks pro Visual Studio Code
Tento článek popisuje, jak spouštět testy pomocí pytest
rozšíření Databricks pro Visual Studio Code. Podívejte se , co je rozšíření Databricks pro Visual Studio Code?.
Pytest můžete spustit v místním kódu, který nepotřebuje připojení ke clusteru ve vzdáleném pracovním prostoru Azure Databricks. Můžete například použít pytest
k otestování funkcí, které přijímají a vracejí datové rámce PySpark v místní paměti. Pokud chcete začít s pytest
a spouštět ho místně, přečtěte si téma Začínáme v dokumentaci k pytest
.
Pokud chcete spustit pytest
kód ve vzdáleném pracovním prostoru Azure Databricks, proveďte v projektu editoru Visual Studio Code následující kroky:
Krok 1: Vytvoření testů
Přidejte soubor Pythonu s následujícím kódem, který obsahuje vaše testy ke spuštění. Tento příklad předpokládá, že tento soubor je pojmenován spark_test.py
a je v kořenovém adresáři projektu editoru Visual Studio Code. Tento soubor obsahuje pytest
zařízení, které zpřístupňuje cluster SparkSession
(vstupní bod funkce Sparku v clusteru) pro testy. Tento soubor obsahuje jeden test, který kontroluje, zda zadaná buňka v tabulce obsahuje zadanou hodnotu. Podle potřeby můžete do tohoto souboru přidat vlastní testy.
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: Vytvoření spouštěče pytestu
Přidejte soubor Pythonu s následujícím kódem, který dává pokyn pytest
ke spuštění testů z předchozího kroku. Tento příklad předpokládá, že soubor je pojmenovaný pytest_databricks.py
a nachází se v kořenovém adresáři projektu editoru 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: Vytvoření vlastní konfigurace spuštění
Pokud chcete dát pokyn pytest
ke spuštění testů, musíte vytvořit vlastní konfiguraci spuštění. Pomocí existující konfigurace spuštění založené na clusteru Databricks vytvořte vlastní konfiguraci spuštění následujícím způsobem:
V hlavní nabídce klikněte na Spustit > konfiguraci přidat.
Na paletě příkazů vyberte Databricks .
Visual Studio Code přidá
.vscode/launch.json
do projektu soubor, pokud tento soubor ještě neexistuje.Následujícím způsobem změňte konfiguraci počátečního spuštění a pak soubor uložte:
- Změňte název konfigurace spuštění na
Run on Databricks
jedinečný zobrazovaný název pro tuto konfiguraci v tomto příkladuUnit Tests (on Databricks)
. - V tomto příkladu
program
přejděte${file}
na${workspaceFolder}/pytest_databricks.py
cestu v projektu, který obsahuje spouštěč testů. - V tomto příkladu
args
přejděte[]
na["."]
cestu v projektu, který obsahuje soubory s testy .
Soubor
launch.json
by měl vypadat takto:{ // 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": {} } ] }
- Změňte název konfigurace spuštění na
Krok 4: Spuštění testů
Nejprve se ujistěte, že pytest
je už v clusteru nainstalovaný. Například se stránkou nastavení clusteru otevřenou v pracovním prostoru Azure Databricks postupujte takto:
-
Na kartě Knihovny, pokud je pytest viditelný, je
pytest
již nainstalován. Pokud pytest není viditelný, klepněte na tlačítko Nainstalovat nový. - V případě zdroje knihovny klikněte na PyPI.
- Do souboru Package (Balíček) zadejte
pytest
. - Klikněte na Install (Nainstalovat).
- Počkejte na změny stavu čekající na instalaci.
Pokud chcete testy spustit, proveďte v projektu editoru Visual Studio Code následující kroky:
- V hlavní nabídce klikněte na Zobrazit > spuštění.
- V seznamu Spustit a ladit klikněte na Testy jednotek (v Databricks), pokud ještě nejsou vybrány.
- Klikněte na zelenou šipku (Spustit ladění).
Výsledky pytest
se zobrazí v konzole ladění (zobrazení > konzoly ladění v hlavní nabídce). Tyto výsledky například ukazují, že v spark_test.py
souboru byl nalezen aspoň jeden test, a tečka (.
) znamená, že byl nalezen a úspěšný jeden test. (Neúspěšný test by zobrazil chybu 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)