Snowpark Checkpoints 라이브러리: 가설¶
Hypothesis 단위 테스트¶
Hypothesis는 광범위한 입력 데이터를 자동으로 생성하여 기존 단위 테스트를 개선하는 강력한 Python용 테스트 라이브러리입니다. 개별 테스트 사례를 지정하는 대신 속성 또는 조건으로 코드의 예상 동작을 설명할 수 있는 속성 기반 테스트를 사용하며, Hypothesis는 이러한 속성을 철저하게 테스트하기 위한 예제를 생성합니다. 이 접근 방식은 에지 사례와 예기치 않은 동작을 발견하는 데 도움이 되므로, 복잡한 함수에 특히 효과적입니다. 자세한 내용은 `Hypothesis<https://hypothesis.readthedocs.io/en/latest/>`_ 섹션을 참조하세요.
snowpark-checkpoints-hypothesis
패키지는 Hypothesis 라이브러리를 확장하여 테스트 목적으로 합성 Snowpark DataFrames를 생성합니다. 다양하고 무작위화된 테스트 데이터를 생성하는 Hypothesis의 권한을 활용해 스미카와 값이 다양한 Snowpark DataFrames를 만듦으로써 실제 시나리오를 시뮬레이션할 수 있습니다. 이를 통해 강력한 코드를 보장하고 복잡한 변환 과정의 정확성을 확인할 수 있습니다.
Snowpark의 Hypothesis 전략에서는 pandera를 사용하여 합성 데이터를 생성합니다. dataframe_strategy
함수는 지정된 스키마를 사용하여 해당 함수에 적합한 pandas DataFrame을 생성한 후 Snowpark DataFrame으로 변환합니다.
함수 서명:
def dataframe_strategy(
schema: Union[str, DataFrameSchema],
session: Session,
size: Optional[int] = None
) -> SearchStrategy[DataFrame]
함수 매개 변수:
schema
: 생성된 Snowpark 데이터 프레임이 일치해야 하는 열과 데이터 타입을 정의하고 검사하는 스키마스키마는 다음이 될 수 있습니다.
snowpark-checkpoints-collectors
패키지의collect_dataframe_checkpoint
함수에 따라 생성된 JSON 스키마 파일의 경로`pandera.api.pandas.container.DataFrameSchema<https://pandera.readthedocs.io/en/stable/reference/generated/pandera.api.pandas.container.DataFrameSchema.html>`_의 인스턴스
session
: Snowpark DataFrames를 만드는 데 사용될 `snowflake.snowpark.Session<https://docs.snowflake.com/en/developer-guide/snowpark/reference/python/latest/snowpark/api/snowflake.snowpark.Session>`_의 인스턴스size
: 각 Snowpark DataFrame에서 생성할 행의 수이 매개 변수를 제공하지 않으면 전략은 크기가 다른 DataFrames 를 생성합니다.
함수 출력:
Snowpark DataFrames를 생성하는 `Hypothesis SearchStrategy<https://github.com/HypothesisWorks/hypothesis/blob/904bdd967ca9ff23475aa6abe860a30925149da7/hypothesis-python/src/hypothesis/strategies/_internal/strategies.py#L221>`_를 반환합니다.
지원 및 지원되지 않는 데이터 타입¶
dataframe_strategy
함수는 데이터 타입이 다른 Snowpark DataFrames의 생성을 지원하며, 이 데이터 타입은 함수에 전달된 스키마 인자의 유형에 따라 달라집니다. 지원되지 않는 데이터 타입을 발견하면 전략에서 예외가 발생합니다.
다음 테이블에는 JSON 파일이 schema
인자로 전달될 때 dataframe_strategy
함수에서 지원하는 PySpark 데이터 타입과 지원하지 않는 타입이 나와 있습니다.
PySpark 데이터 타입 |
지원됨 |
---|---|
예 |
|
예 |
|
아니요 |
|
예 |
|
아니요 |
|
아니요 |
|
아니요 |
|
아니요 |
|
예 |
|
예 |
|
아니요 |
|
예 |
|
예 |
|
아니요 |
|
아니요 |
다음 테이블에는 DataFrameSchema 오브젝트가 schema
인자로 전달될 때 dataframe_strategy
함수에서 지원하는 pandera 데이터 타입과 이들이 매핑되는 Snowpark 데이터 타입이 나와 있습니다.
Pandera 데이터 타입 |
Snowpark 데이터 타입 |
---|---|
int8 |
|
int16 |
|
int32 |
|
int64 |
|
float32 |
|
float64 |
|
문자열 |
|
bool |
|
datetime64[ns, tz] |
|
datetime64[ns] |
|
날짜 |
예¶
다음 절차에는 Hypothesis 라이브러리를 사용하여 Snowpark DataFrames를 생성하는 일반적인 워크플로가 나와 있습니다.
코드가 모든 입력에 대해 충족해야 하는 다양한 어설션 또는 조건이 포함된 표준 Python 테스트 함수를 만듭니다.
테스트 함수에 Hypothesis
@given
데코레이터를 추가하고,dataframe_strategy
함수를 인자로 전달합니다.@given
데코레이터에 대한 자세한 내용은 hypothesis.given 섹션을 참조하십시오.테스트 함수를 실행합니다.
Hypothesis는 생성된 입력을 테스트 인자로 자동 제공합니다.
예 1: JSON 파일에서 Snowpark DataFrames 생성하기
이 예제에서는 Snowpark DataFrames가 snowpark-checkpoints-collectors`의 :code:`collect_dataframe_checkpoint
함수로 생성된 JSON 스키마 파일에서 생성됩니다.
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
...
예제 2: Pandera DataFrameSchema 오브젝트에서 Snowpark DataFrame 생성하기**
이 예제에서는 Snowpark DataFrames가 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
...
자세한 내용은 `Pandera DataFrameSchema<https://pandera.readthedocs.io/en/latest/dataframe_schemas.html>`_ 섹션을 참조하십시오.
예 3: Hypothesis 동작 사용자 지정하기
Hypothesis @settings
데코레이터를 사용하여 테스트의 동작을 사용자 지정할 수도 있습니다. 이 데코레이터를 사용하면 다양한 구성 변수를 사용자 지정하여 테스트 동작을 필요에 맞게 조정할 수 있습니다.
@settings
데코레이터를 사용하면 최대 테스트 사례 수, 각 테스트의 실행 기한, 상세도 수준 등 여러 측면을 제어할 수 있습니다.
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
...
자세한 내용은 Hypothesis 설정 섹션을 참조하십시오.