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. Hypothesis erzeugt dann 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.Das sorgt für robusten Code und ermöglicht die Überprüfung komplexer Transformationen auf Korrektheit.
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 der Snowpark-DataFrames verwendet wirdsize
: Die Anzahl der zu erzeugenden Zeilen für jeden Snowpark-DataFrameWenn 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, die je nach dem Typ des an die Funktion übergebenen Schema-Arguments variieren. Beachten Sie, dass die Strategie eine Ausnahme auslöst, wenn sie einen nicht unterstützten Datentyp findet.
Die folgende Tabelle enthält die PySpark-Datentypen, die von der Funktion dataframe_strategy
unterstützt bzw. nicht unterstützt werden, 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¶
Die folgende Prozedur stellt den typischen Workflow für die Verwendung der Hypothesis-Bibliothek zur Erstellung eines Snowpark-DataFrames vor:
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.
Hypothesis stellt die generierten Eingaben automatisch als Argumente für den Test bereit.
Beispiel 1: Generieren von Snowpark-DataFrames aus einer JSON-Datei
In diesem Beispiel werden Snowpark-DataFrames aus einer JSON-Schemadatei generiert, die wiederum von der Funktion collect_dataframe_checkpoint
des Pakets snowpark-checkpoints-collectors
generiert 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
In diesem Beispiel werden Snowpark-DataFrames aus einer Instanz eines Pandera-DataFrameSchema generiert:
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
...
Weitere Informationen finden Sie unter Pandera-DataFrameSchema.
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 und die Ausführlichkeitsstufen steuern.
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
...
Weitere Informationen finden Sie unter Hypothesis-Einstellungen.