Snowpark Checkpoints-Bibliothek: Hypothese¶
Hypothesis Unit-Testing¶
Hypothesis ist eine leistungsstarke Testbibliothek für Python, die traditionelle Unit-Tests durch die automatische Generierung einer Vielzahl von Eingabedaten verbessert. Es verwendet eigenschaftsbasiertes Testen. Anstatt einzelne Testfälle zu spezifizieren, können Sie die erwartete Verhaltensweise Ihres Codes mit Eigenschaften oder Bedingungen beschreiben und Hypothesis erzeugt Beispiele, um diese Eigenschaften gründlich zu testen. Dieser Ansatz hilft, Grenzfälle und unerwartete Verhaltensweisen aufzudecken, und ist daher besonders effektiv bei komplexen Funktionen. Weitere Informationen finden Sie unter Hypothese.
Das snowpark-checkpoints-hypothesis
-Paket erweitert die Hypothese-Bibliothek, um synthetische Snowpark-DataFrames für Testzwecke zu erzeugen. Indem Sie die Möglichkeit von Hypothesis nutzen, vielfältige und zufällige Testdaten zu generieren, können Sie Snowpark-DataFrames mit unterschiedlichen Schemas und Werten erstellen, um reale Szenarios zu simulieren und Grenzfälle aufzudecken, um robusten Code zu gewährleisten und die Korrektheit komplexer Transformationen zu überprüfen.
Die Hypothesis-Strategie für Snowpark basiert auf Pandera zur Erzeugung synthetischer Daten. Die Funktion dataframe_strategy
verwendet das angegebene Schema, um einen Pandas-DataFrame zu generieren, der dem Schema entspricht, und konvertiert ihn dann in einen Snowpark-DataFrame.
Funktionssignatur:
def dataframe_strategy(
schema: Union[str, DataFrameSchema],
session: Session,
size: Optional[int] = None
) -> SearchStrategy[DataFrame]
Funktionsparameter:
schema
: Das Schema, das die Spalten, Datentypen und Prüfungen definiert, denen der generierte Snowpark-Datenframe entsprechen soll. Das Schema kann Folgendes sein:Ein Pfad zu einer JSON-Schemadatei, die mit der Funktion
collect_dataframe_checkpoint
des Paketssnowpark-checkpoints-collectors
erstellt wurde.Eine Instanz von pandera.api.pandas.container.DataFrameSchema.
session
: Eine Instanz von snowflake.snowpark.Session, die für die Erstellung des Snowpark-DataFrames verwendet wird.size
: Die Anzahl der zu erzeugenden Zeilen für jeden Snowpark DataFrame. Wenn dieser Parameter nicht angegeben wird, generiert die Strategie DataFrames in unterschiedlichen Größen.
Funktionsausgabe:
Gibt eine Hypothesis-SearchStrategy zurück, die Snowpark DataFrames erzeugt.
Unterstützte und nicht unterstützte Datentypen¶
Die Funktion dataframe_strategy
unterstützt die Erstellung von Snowpark-DataFrames mit verschiedenen Datentypen. Je nach dem Typ des an die Funktion übergebenen Schema-Arguments variieren die von der Strategie unterstützten Datentypen. Beachten Sie, dass die Strategie eine Ausnahme auslöst, wenn sie einen nicht unterstützten Datentyp findet.
Die folgende Tabelle zeigt die von der Funktion dataframe_strategy
unterstützten und nicht unterstützten PySpark Datentypen, wenn eine JSON-Datei als schema
-Argument übergeben wird.
Datentyp PySpark |
Unterstützt |
---|---|
Ja |
|
Ja |
|
Nein |
|
Ja |
|
Nein |
|
Nein |
|
Nein |
|
Nein |
|
Ja |
|
Ja |
|
Nein |
|
Ja |
|
Ja |
|
Nein |
|
Nein |
Die folgende Tabelle zeigt die Pandera-Datentypen, die von der Funktion dataframe_strategy
unterstützt werden, wenn ein DataFrameSchema Objekt als schema
-Argument übergeben wird, sowie die Snowpark-Datentypen, denen sie zugeordnet sind.
Pandera-Datentyp |
Snowpark-Datentyp |
---|---|
int8 |
|
int16 |
|
int32 |
|
int64 |
|
float32 |
|
float64 |
|
string |
|
bool |
|
datetime64[ns, tz] |
|
datetime64[ns] |
|
date |
Beispiele¶
Der typische Workflow für die Verwendung der Hypothesis-Bibliothek zur Erstellung eines Snowpark-DataFrames ist wie folgt:
Erstellen Sie eine Standard-Python-Testfunktion mit den verschiedenen Assertionen oder Bedingungen, die Ihr Code für alle Eingaben erfüllen sollte.
Fügen Sie den Hypothesis
@given
-Decorator zu Ihrer Testfunktion hinzu und übergeben Sie die Funktiondataframe_strategy
als Argument. Weitere Informationen über den Decorator@given
finden Sie unter hypothesis.given.Führen Sie die Testfunktion aus. Wenn der Test ausgeführt wird, stellt Hypothesis automatisch die generierten Eingaben als Argumente für den Test bereit.
Beispiel 1: Generieren von Snowpark-DataFrames aus einer JSON-Datei
Im Folgenden finden Sie ein Beispiel für die Generierung von Snowpark DataFrames aus einer JSON Schemadatei, die mit der Funktion collect_dataframe_checkpoint
des snowpark-checkpoints-collectors
-Pakets erstellt wurde.
from hypothesis import given
from snowflake.hypothesis_snowpark import dataframe_strategy
from snowflake.snowpark import DataFrame, Session
@given(
df=dataframe_strategy(
schema="path/to/file.json",
session=Session.builder.getOrCreate(),
size=10,
)
)
def test_my_function_from_json_file(df: DataFrame):
# Test a particular function using the generated Snowpark DataFrame
...
Beispiel 2: Generieren eines Snowparks-DataFrame aus einem Pandera-DataFrameSchema-Objekt
Nachfolgend finden Sie ein Beispiel für die Generierung von Snowpark-DataFrames aus einer Instanz eines Pandera-DataFrameSchema. Weitere Informationen finden Sie unter Pandera-DataFrameSchema.
import pandera as pa
from hypothesis import given
from snowflake.hypothesis_snowpark import dataframe_strategy
from snowflake.snowpark import DataFrame, Session
@given(
df=dataframe_strategy(
schema=pa.DataFrameSchema(
{
"boolean_column": pa.Column(bool),
"integer_column": pa.Column("int64", pa.Check.in_range(0, 9)),
"float_column": pa.Column(pa.Float32, pa.Check.in_range(10.5, 20.5)),
}
),
session=Session.builder.getOrCreate(),
size=10,
)
)
def test_my_function_from_dataframeschema_object(df: DataFrame):
# Test a particular function using the generated Snowpark DataFrame
...
Beispiel 3: Anpassen der Hypothesis-Verhaltensweise
Sie können die Verhaltensweise Ihres Tests auch mit dem Hypothesis-Decorator @settings
anpassen. Mit diesem Decorator können Sie verschiedene Konfigurationsparameter anpassen, um das Testverhalten auf Ihre Bedürfnisse zuzuschneiden. Mit dem @settings
-Decorator können Sie Aspekte wie die maximale Anzahl von Testfällen, die Frist für jede Testausführung, die Ausführlichkeitsstufen und viele andere steuern. Weitere Informationen finden Sie unter Hypothesis-Einstellungen.
from datetime import timedelta
from hypothesis import given, settings
from snowflake.snowpark import DataFrame, Session
from snowflake.hypothesis_snowpark import dataframe_strategy
@given(
df=dataframe_strategy(
schema="path/to/file.json",
session=Session.builder.getOrCreate(),
)
)
@settings(
deadline=timedelta(milliseconds=800),
max_examples=25,
)
def test_my_function(df: DataFrame):
# Test a particular function using the generated Snowpark DataFrame
...