Tesztek futtatása pytesttel a Visual Studio Code Databricks-bővítményével
Ez a cikk bemutatja, hogyan futtathat teszteket pytest
a Visual Studio Code Databricks-bővítményével. Lásd : Mi a Visual Studio Code Databricks-bővítménye?.
Olyan helyi kódon futtathat pytestet , amely nem igényel kapcsolatot egy távoli Azure Databricks-munkaterület fürtjéhez. Használhatja például pytest
a PySpark DataFrame-eket a helyi memóriában elfogadó és visszaküldött függvények tesztelésére. Az első lépésekről pytest
és a helyi futtatásról a dokumentáció első lépéseit.
Ha egy távoli Azure Databricks-munkaterületen szeretne kódot futtatni pytest
, tegye a következőket a Visual Studio Code-projektben:
1. lépés: A tesztek létrehozása
Adjon hozzá egy Python-fájlt a következő kóddal, amely tartalmazza a futtatandó teszteket. Ez a példa feltételezi, hogy ez a fájl neve el van nevezve spark_test.py
, és a Visual Studio Code-projekt gyökerében található. Ez a fájl tartalmaz egy pytest
fixture-t, amely elérhetővé teszi a fürt SparkSession
(a fürt Spark-funkcióinak belépési pontja) a tesztek számára. Ez a fájl egyetlen tesztet tartalmaz, amely ellenőrzi, hogy a tábla megadott cellása tartalmazza-e a megadott értéket. Igény szerint saját teszteket is hozzáadhat ehhez a fájlhoz.
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'
2. lépés: A pytest-futó létrehozása
Adjon hozzá egy Python-fájlt az alábbi kóddal, amely arra utasítja pytest
, hogy futtassa a teszteket az előző lépésben. Ez a példa feltételezi, hogy a fájl neve el van nevezve pytest_databricks.py
, és a Visual Studio Code-projekt gyökerében található.
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:])
3. lépés: Egyéni futtatási konfiguráció létrehozása
A tesztek futtatására való utasításhoz pytest
létre kell hoznia egy egyéni futtatási konfigurációt. A meglévő Databricks-fürtalapú futtatási konfigurációval saját egyéni futtatási konfigurációt hozhat létre az alábbiak szerint:
A főmenüben kattintson > hozzáadása parancsra.
A parancskatalógusban válassza a Databricks lehetőséget.
A Visual Studio Code hozzáad egy
.vscode/launch.json
fájlt a projekthez, ha ez a fájl még nem létezik.Módosítsa az indítási futtatási konfigurációt az alábbiak szerint, majd mentse a fájlt:
- Ebben a példában
Run on Databricks
módosítsa a futtatási konfiguráció nevétUnit Tests (on Databricks)
a konfiguráció egyedi megjelenítendő nevére. - Váltson
program
a tesztfuttatót tartalmazó projekt elérési útjára ebben a példában${file}
.${workspaceFolder}/pytest_databricks.py
-
args
Ebben a példában[]
váltson["."]
a teszteket tartalmazó fájlokat tartalmazó projekt elérési útjára.
A
launch.json
fájlnak így kell kinéznie:{ // 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": {} } ] }
- Ebben a példában
4. lépés: A tesztek futtatása
Először győződjön meg arról, hogy pytest
már telepítve van a fürtre. Ha például meg van nyitva a fürt beállítások lapja az Azure Databricks-munkaterületen, tegye a következőket:
-
A Kódtárak lapon, ha a pytest látható, akkor
pytest
már telepítve van. Ha a pytest nem látható, kattintson az Új telepítése gombra. - Erőforrástár-forrás esetén kattintson a PyPI gombra.
- A Csomag mezőbe írja be a következőt
pytest
: - Kattintson az Install (Telepítés) gombra.
- Várjon, amíg az állapot függőben lévőrőltelepítésre változik.
A tesztek futtatásához tegye a következőket a Visual Studio Code-projektből:
- A főmenüben kattintson a Futtatás>.
- A Futtatás és hibakeresés listában kattintson a Unit Tests (on Databricks) elemre, ha még nincs kijelölve.
- Kattintson a zöld nyílra (Hibakeresés indítása) ikonra.
Az pytest
eredmények a hibakeresési konzolon jelennek meg (> megtekintése a főmenüben). Ezek az eredmények például azt mutatják, hogy legalább egy teszt található a spark_test.py
fájlban, és a pont (.
) azt jelenti, hogy egyetlen teszt található és lett átadva. (A sikertelen teszt egy 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)