Aller au contenu principal

Exécuter des tests Python à l'aide de l'extension Databricks pour Visual Studio Code

Cette page explique comment exécuter les tests Python à l'aide de l'extension Databricks pour Visual Studio Code. Voir l'extension Databricks pour Visual Studio Code.

Exécuter les tests avec pytest

Vous pouvez exécuter pytest sur du code local qui n'a pas besoin d'une connexion à un cluster dans un workspace Databricks distant. Par exemple, vous pourriez utiliser pytest pour tester vos fonctions qui acceptent et renvoient des DataFrames PySpark en mémoire locale. Pour get start avec pytest et l'exécuter localement, consultez Get Started dans la documentation pytest.

Pour exécuter pytest sur le code dans un workspace Databricks distant, procédez comme suit dans votre projet Visual Studio Code :

Étape 1 : Créer les tests

Ajoutez un fichier Python avec le code suivant, qui contient vos tests à exécuter. Cet exemple suppose que ce fichier est nommé spark_test.py et qu'il se trouve à la racine de votre projet Visual Studio Code. Ce fichier contient un fixture pytest, ce qui rend le SparkSession du cluster (le point d'entrée de la fonctionnalité Spark sur le cluster) disponible pour les tests. Ce fichier contient un seul test qui vérifie si la cellule spécifiée dans la table contient la valeur spécifiée. Vous pouvez ajouter vos propres tests à ce fichier selon les besoins.

Python
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'

Étape 2 : créez l’exécuteur pytest

Ajoutez un fichier Python avec le code suivant, qui indique à pytest d'exécuter vos tests de l'étape précédente. Cet exemple suppose que le fichier est nommé pytest_databricks.py et se trouve à la racine de votre projet Visual Studio Code.

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

Étape 3 : Créer une configuration d’exécution personnalisée

Pour indiquer à pytest d'exécuter vos tests, vous devez créer une configuration d'exécution personnalisée. Utilisez la configuration d'exécution basée sur le **cluster Databricks** existante pour créer votre propre configuration d'exécution personnalisée, comme suit :

  1. Dans le menu principal, cliquez sur Exécuter > Ajouter une configuration .

  2. Dans la Palette de commandes , sélectionnez Databricks .

    Visual Studio Code ajoute un fichier .vscode/launch.json à votre projet, si ce fichier n’existe pas déjà.

  3. Modifiez la configuration d'exécution initiale comme suit, puis enregistrez le fichier :

    • Changez le nom de cette configuration d'exécution de Run on Databricks à un nom d'affichage unique pour cette configuration (par exemple, Unit Tests (on Databricks)).
    • Modifiez program de ${file} vers le chemin dans le projet qui contient le lanceur de tests, par exemple ${workspaceFolder}/pytest_databricks.py.
    • Changez args de [] au chemin d'accès dans le projet qui contient les fichiers avec vos tests, dans cet exemple ["."].

    Votre fichier launch.json devrait ressembler à ceci :

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

Étape 4 : Exécuter les tests

Assurez-vous que pytest est déjà installé sur le cluster d'abord. Par exemple, avec la page des paramètres du cluster ouverte dans votre Workspace Databricks, procédez comme suit :

  1. Dans l'onglet Libraries tab, si pytest est visible, alors pytest est déjà installé. Si pytest n'est pas visible, cliquez sur Installer une nouvelle .
  2. Pour Source de la bibliothèque , cliquez sur PyPI .
  3. Pour le Package , saisissez pytest.
  4. Cliquez sur Installer .
  5. Attendez que le Statut passe de En attente à Installé .

Pour exécuter les tests, procédez comme suit depuis votre projet Visual Studio Code :

  1. Dans le menu principal, cliquez sur View > Run .
  2. Dans la liste Run and Debug , cliquez sur Unit Tests (on Databricks) , s'il n'est pas déjà sélectionné.
  3. Cliquez sur l'icône de la flèche verte ( Start Debugging ).

Les pytest résultats s'affichent dans la **Console de débogage** (**Affichage > Console de débogage** dans le menu principal). Par exemple, ces résultats montrent qu'au moins un test a été trouvé dans le fichier spark_test.py, et qu'un point (.) signifie qu'un seul test a été trouvé et a réussi. (Un test échoué afficherait un 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)

Exécuter des tests à l'aide de Databricks Connect

Pour exécuter des tests localement qui utilisent les Spark API, utilisez Databricks Connect.

Étape 1 : Configurer Databricks Connect

Suivez les étapes pour configurer Databricks Connect pour l'extension. Consultez Déboguer du code à l'aide de Databricks Connect pour l'extension Databricks pour Visual Studio Code.

Étape 2 : Créer un test unitaire

Ajoutez un fichier Python avec le code suivant, qui contient votre test à exécuter. Cet exemple suppose que ce fichier est nommé main_test.py.

Python
from my_project import main


def test_find_all_taxis():
taxis = main.find_all_taxis()
assert taxis.count() > 5

Étape 3 : ajoutez ou mettez à jour la configuration de lancement debugpy

Ensuite, créez une configuration de lancement debugpy qui active Databricks Connect.

  1. Dans le menu principal de Visual Studio Code, cliquez sur Exécuter > Ajouter une configuration .

  2. Dans la Palette de commandes , sélectionnez Débogueur Python .

    Visual Studio Code ajoute un fichier .vscode/launch.json à votre projet, si ce fichier n’existe pas déjà.

  3. Ajouter "databricks": true champ. Ceci active Databricks Connect.

JSON
{
"version": "0.2.0",
"configurations": [
{
"name": "Unit Tests (on Databricks)",
"type": "debugpy",
"databricks": true,
"request": "launch",
"program": "${file}",
"args": ["."],
"env": {},
"console": "integratedTerminal"
}
]
}

Étape 4 : Exécuter les tests

Pour exécuter les tests, procédez comme suit depuis votre projet Visual Studio Code :

  1. Dans le menu principal, cliquez sur Afficher > Tester pour ouvrir le panneau de test.
  2. Dans le panneau de test, exécutez votre test en cliquant sur l'icône de débogage associée à main_test.py. Notez que la simple exécution du test ne Trigger pas la configuration de débogage modifiée, et le code n'aura pas accès à Databricks Connect.