Bagikan melalui


Jalankan pengujian Python menggunakan ekstensi Databricks untuk Visual Studio Code

Halaman ini menjelaskan cara menjalankan pengujian Python menggunakan ekstensi Databricks untuk Visual Studio Code. Lihat Apa itu ekstensi Databricks untuk Visual Studio Code?.

Menjalankan pengujian menggunakan pytest

Anda dapat menjalankan pytest pada kode lokal yang tidak memerlukan koneksi ke kluster di ruang kerja Azure Databricks jarak jauh. Misalnya, Anda dapat menggunakan pytest untuk menguji fungsi yang menerima dan mengembalikan PySpark DataFrames dalam memori lokal. Untuk memulai pytest dan menjalankannya secara lokal, lihat Memulai dalam pytest dokumentasi.

Untuk menjalankan pytest kode di ruang kerja Azure Databricks jarak jauh, lakukan hal berikut di proyek Visual Studio Code Anda:

Langkah 1: Membuat pengujian

Tambahkan file Python dengan kode berikut, yang berisi pengujian Anda untuk dijalankan. Contoh ini mengasumsikan bahwa file ini diberi nama spark_test.py dan berada di akar proyek Visual Studio Code Anda. File ini berisi pytestrangka, yang membuat kluster SparkSession (titik masuk ke fungsionalitas Spark pada kluster) tersedia untuk tes. File ini berisi satu pengujian yang memeriksa apakah sel yang ditentukan dalam tabel berisi nilai yang ditentukan. Anda dapat menambahkan pengujian Anda sendiri ke file ini sesuai kebutuhan.

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'

Langkah 2: Membuat runner pytest

Tambahkan file Python dengan kode berikut, yang menginstruksikan pytest untuk menjalankan pengujian Anda dari langkah sebelumnya. Contoh ini mengasumsikan bahwa file diberi nama pytest_databricks.py dan berada di akar proyek Visual Studio Code Anda.

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

Langkah 3: Membuat konfigurasi eksekusi kustom

Untuk menginstruksikan pytest untuk menjalankan pengujian, Anda harus membuat konfigurasi eksekusi kustom. Gunakan konfigurasi eksekusi berbasis kluster Databricks yang ada untuk membuat konfigurasi eksekusi kustom Anda sendiri, sebagai berikut:

  1. Pada menu utama, klik Jalankan > Tambahkan konfigurasi.

  2. Di Palet Perintah, pilih Databricks.

    Visual Studio Code menambahkan .vscode/launch.json file ke proyek Anda, jika file ini belum ada.

  3. Ubah konfigurasi eksekusi pemula sebagai berikut, lalu simpan file:

    • Ubah nama konfigurasi eksekusi ini dari Run on Databricks ke beberapa nama tampilan unik untuk konfigurasi ini, dalam contoh Unit Tests (on Databricks)ini .
    • Ubah program dari ${file} ke jalur dalam proyek yang berisi runner pengujian, dalam contoh ${workspaceFolder}/pytest_databricks.pyini .
    • Ubah args dari [] ke jalur dalam proyek yang berisi file dengan pengujian Anda, dalam contoh ["."]ini .

    File Anda launch.json akan terlihat seperti ini:

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

Langkah 4: Jalankan pengujian

Pastikan bahwa pytest sudah diinstal pada kluster terlebih dahulu. Misalnya, dengan halaman pengaturan kluster terbuka di ruang kerja Azure Databricks Anda, lakukan hal berikut:

  1. Pada tab Pustaka , jika pytest terlihat, maka pytest sudah diinstal. Jika pytest tidak terlihat, klik Instal baru.
  2. Untuk Sumber Pustaka, klik PyPI.
  3. Untuk Paket, masukkan pytest.
  4. Klik Pasang.
  5. Tunggu hingga Status berubah dari Tertunda ke Terinstal.

Untuk menjalankan pengujian, lakukan hal berikut dari proyek Visual Studio Code Anda:

  1. Pada menu utama, klik Tampilkan > Jalankan.
  2. Di daftar Jalankan dan Debug, klik Pengujian Unit (di Databricks), jika belum dipilih.
  3. Klik ikon panah hijau (Mulai Penelusuran Kesalahan).

Hasilnya pytest ditampilkan di Konsol Debug (Lihat > Konsol Debug di menu utama). Misalnya, hasil ini menunjukkan bahwa setidaknya satu pengujian ditemukan dalam spark_test.py file, dan titik (.) berarti bahwa satu pengujian ditemukan dan lulus. (Tes yang Fgagal akan menunjukkan .)

<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)

Menjalankan pengujian menggunakan Databricks Connect

Untuk menjalankan pengujian secara lokal yang menggunakan API Spark, gunakan Databricks Connect.

Langkah 1: Mengonfigurasi Databricks Connect

Ikuti langkah-langkah untuk mengonfigurasi Databricks Connect untuk ekstensi. Lihat Kode debug menggunakan Databricks Connect untuk ekstensi Databricks untuk Visual Studio Code.

Langkah 2: Membuat pengujian unit

Tambahkan file Python dengan kode berikut, yang berisi pengujian Anda untuk dijalankan. Contoh ini mengasumsikan bahwa file ini bernama main_test.py.

from my_project import main


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

Langkah 3: Menambahkan atau memperbarui konfigurasi peluncuran debugpy

Selanjutnya, buat debugpy konfigurasi peluncuran yang memungkinkan Databricks Connect.

  1. Pada menu utama Visual Studio Code, klik Jalankan > Tambahkan konfigurasi.

  2. Di Palet Perintah, pilih Python Debugger.

    Visual Studio Code menambahkan .vscode/launch.json file ke proyek Anda, jika file ini belum ada.

  3. Tambahkan kolom "databricks": true. Ini memungkinkan Databricks Connect.

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

Langkah 4: Jalankan pengujian

Untuk menjalankan pengujian, lakukan hal berikut dari proyek Visual Studio Code Anda:

  1. Pada menu utama, klik Lihat > Pengujian untuk membuka panel pengujian.
  2. Di panel pengujian, jalankan pengujian Anda dengan mengklik ikon debug yang terkait dengan main_test.py. Perhatikan bahwa hanya menjalankan pengujian tidak akan memicu konfigurasi debug yang dimodifikasi, dan kode tidak akan memiliki akses ke Databricks Connect.