Sdílet prostřednictvím


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 pytestzaří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:

  1. V hlavní nabídce klikněte na Spustit > konfiguraci přidat.

  2. Na paletě příkazů vyberte Databricks .

    Visual Studio Code přidá .vscode/launch.json do projektu soubor, pokud tento soubor ještě neexistuje.

  3. 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říkladu Unit Tests (on Databricks).
    • V tomto příkladu programpřejděte ${file} na ${workspaceFolder}/pytest_databricks.py cestu v projektu, který obsahuje spouštěč testů.
    • V tomto příkladu argspř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": {}
        }
      ]
    }
    

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:

  1. Na kartě Knihovny, pokud je pytest viditelný, je pytest již nainstalován. Pokud pytest není viditelný, klepněte na tlačítko Nainstalovat nový.
  2. V případě zdroje knihovny klikněte na PyPI.
  3. Do souboru Package (Balíček) zadejte pytest.
  4. Klikněte na Install (Nainstalovat).
  5. 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:

  1. V hlavní nabídce klikněte na Zobrazit > spuštění.
  2. V seznamu Spustit a ladit klikněte na Testy jednotek (v Databricks), pokud ještě nejsou vybrány.
  3. 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)