Snowpark Pythonでのテストの記述¶
このトピックでは、Snowflakeに接続した状態でSnowparkコードをテストする方法を説明します。PyTest のような標準的なテストユーティリティを使用して、Snowpark Python UDFs、 DataFrame 変換、ストアドプロシージャをテストすることができます。
徹底的なテストは、意図しない互換性を破る変更を防ぐのに役立ちます。ユニットテストでは、コードの一部が期待通りに動くかどうかを検証します。統合テストは、コンポーネントがエンドツーエンドのユースケースで正しく連動することを確認するのに役立ちます。
このドキュメントの例では、Pythonの最も人気のあるテストフレームワークの1つである PyTest を使用します。追加ガイダンスとベストプラクティスについては、 PyTest ドキュメンテーション をご参照ください。
あるいは、Snowpark Pythonローカルテストフレームワークを使用して、Snowflakeアカウントに接続することなくローカルでSnowpark Python DataFrames を作成して操作することもできます。詳細については、 ローカルテストフレームワーク をご参照ください。
テストの設定¶
pip install pytest または conda install pytest を実行して、 PyTest をプロジェクトにインストールします。 requirements.txt またはconda環境ファイルに追加することもできます。
ソースコードディレクトリの隣に test ディレクトリを作成し、ユニットテストと統合テストをそこに追加します。例の表示については、 Snowpark Pythonプロジェクトのテンプレート ご参照ください。
Snowparkセッション用の PyTest フィクスチャの作成¶
PyTest フィクスチャは、テスト(またはテストモジュール)の前に実行され、テストにデータや接続を提供する関数です。このシナリオでは、Snowpark Session オブジェクトを返す PyTest フィクスチャを作成します。
testディレクトリがない場合は、それを作成します。conftest.pyをtestの下に次のコンテンツで作成します。connection_parametersはSnowflakeアカウントの認証情報があるディクショナリです。ディクショナリフォーマットの詳細については、 セッションの作成 をご参照ください。ファイルスコープのフィクスチャとしてではなく、モジュールスコープのフィクスチャとして
Sessionフィクスチャを作成します。これは、複数のセッションが作成され、セッションオブジェクトの競合による問題が発生するのを防ぎます。
UDFs 用のユニットテスト¶
Pythonの UDF ロジックをテストするには、UDF ハンドラーをPythonの汎用メソッドとしてテストします。
testディレクトリの下に UDF ユニットテスト用のファイルを作成します。たとえば、ファイル名をtest_functions.pyとします。テストするPythonメソッドをインポートします。
各テストシナリオについて、
test_<scenario_to_test>というPythonメソッドを作成します。
たとえば、次のようなPython UDF ハンドラーになります。
このメソッドをテストファイル(test/test_functions.py)にインポートし、Pythonの汎用メソッドとしてテストすることができます。
DataFrame 変換用のユニットテスト¶
DataFrame 変換にユニットテストを追加することで、予期せぬバグやリグレッションを防ぐのに役立ちます。DataFrame ロジックを簡単にテストできるようにするには、変換をPythonメソッドにカプセル化し、変換される DataFrames を入力として受け取り、変換された DataFrames を返します。
次の例では、 mf_df_transformer に変換ロジックが含まれています。Pythonプロジェクトの他のモジュールにインポートして、簡単にテストすることができます。
この変換をテストするには、次のステップに従います。
testディレクトリの下に DataFrame テスト用のファイルtest_transformers.pyを作成します(test/test_transformers.py)。テストする変換器のテストメソッドを作成します:
test_my_df_transformer(session)。ここでのsessionパラメーターは、前のセクションで作成されたセッションフィクスチャを指します。セッションフィクスチャを使って、テストメソッド内に入力と予想される出力 DataFrames を作成します。
入力 DataFrame を変換器に渡し、予想される DataFrame と変換器が返す実際の DataFrame を比較します。
ストアドプロシージャ用の統合テスト¶
ストアドプロシージャハンドラーをテストするには、セッションフィクスチャを使用してストアドプロシージャハンドラーを呼び出します。ストアドプロシージャが ETL パイプラインなどのテーブルから読み取る場合、以下の例に示すように、ストアドプロシージャハンドラーを呼び出す前にそれらのテーブルを作成することができます。このパターンでは、入力データがソース管理内で追跡され、テスト実行中に予期せず変更されることがないようにします。