Exécuter des tests avec pytest à l’aide de l’extension Databricks pour Visual Studio Code
Cet article explique comment exécuter des tests à l’aide de pytest
à l’aide de l’extension Databricks pour Visual Studio Code. Consultez Présentation de l’extension Databricks pour Visual Studio Code.
Vous pouvez exécuter pytest sur du code local qui n’a pas besoin d’une connexion à un cluster dans un espace de travail Azure Databricks distant. Par exemple, vous pouvez utiliser pytest
pour tester vos fonctions qui acceptent et retournent des DataFrames PySpark dans la mémoire locale. Pour bien démarrer avec pytest
et l’exécuter localement, consultez la section Get Started dans la documentation pytest
.
Pour exécuter pytest
sur du code dans un espace de travail Azure Databricks distant, effectuez les étapes suivantes 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 se trouve à la racine de votre projet Visual Studio Code. Ce fichier contient une fixture pytest
qui rend disponible pour les tests le SparkSession
du cluster (le point d’entrée de la fonctionnalité Spark sur le cluster). Ce fichier contient un seul test qui vérifie si la cellule spécifiée dans le tableau contient la valeur spécifiée. Si nécessaire, vous pouvez ajouter vos propres tests à ce fichier.
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éer 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.
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 de série de tests personnalisée
Pour demander à pytest
d’exécuter vos tests, vous devez créer une configuration de série de tests personnalisée. Pour cela, utilisez la configuration de série de tests existante basée sur cluster Databricks de la façon suivante :
Dans le menu principal, cliquez sur Exécuter > Ajouter une configuration.
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à.Modifiez la configuration de série de tests de démarrage de la façon suivante, puis enregistrez le fichier :
- Remplacez le nom de cette configuration de série de tests (
Run on Databricks
) par un nom d’affichage unique, en l’occurrence dans cet exempleUnit Tests (on Databricks)
. - Remplacez
${file}
parprogram
dans le chemin du projet qui contient le Test Runner, en l’occurrence dans cet exemple${workspaceFolder}/pytest_databricks.py
. - Remplacez
[]
parargs
dans le chemin du projet qui contient les fichiers avec vos tests, en l’occurrence dans cet exemple["."]
.
Votre fichier
launch.json
doit se présenter ainsi :{ // 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": {} } ] }
- Remplacez le nom de cette configuration de série de tests (
Étape 4 : Exécuter les tests
Assurez-vous que pytest
est déjà installé sur le cluster. Par exemple, avec la page des paramètres du cluster ouverte dans votre espace de travail Azure Databricks, effectuez les étapes suivantes :
- Sous l’onglet Bibliothèques, si pytest est visible, cela signifie que
pytest
est déjà installé. Si pytest n’est pas visible, cliquez sur Installer. - Pour Library Source (Source de la bibliothèque), cliquez sur PyPI.
- Pour Package, entrez
pytest
. - Cliquez sur Installer.
- Attendez que l’état passe de Pending (En attente) à Installed (Installé).
Pour exécuter les tests, effectuez les étapes suivantes à partir de votre projet Visual Studio Code :
- Dans le menu principal, cliquez sur Afficher > Exécuter.
- Dans la liste Exécuter et déboguer, cliquez sur Unit Tests (on Databricks) (Tests unitaires (sur Databricks)) s’il n’est pas déjà sélectionné.
- Cliquez sur la flèche verte (Démarrer le débogage).
Les résultats pytest
s’affichent dans la console de débogage (Afficher > Console de débogage dans le menu principal). Par exemple, ces résultats indiquent qu’au moins un test a été trouvé dans le fichier spark_test.py
, et un point (.
) signifie qu’un seul test a été trouvé et a réussi (si le test avait échoué, F
serait affiché).
<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)