You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pytest新手如何编写用例验证类方法返回pandas DataFrame

解决方案

核心问题说明

你原来的代码错误在于没有正确使用pytest的fixture注入规则:fixture不能直接作为变量传入测试方法,需要作为测试函数的入参声明,pytest会自动执行fixture函数并将返回值注入到测试逻辑中。

修正后的测试代码

import pytest
import pandas as pd
# 导入你自定义的GoogleTrends类
from your_module import GoogleTrends

@pytest.fixture
def pytrends():
    # 把类实例也封装为fixture,多个测试用例可以复用
    return GoogleTrends()

@pytest.fixture
def keyword():
    return ['bitcoin']

@pytest.fixture
def start():
    return '2020-06-05T01'

@pytest.fixture
def end():
    return '2020-06-05T04'

def test_interest_over_time_struct(pytrends, keyword, start, end):
    """校验interest_over_time方法返回值类型和列结构"""
    # 调用方法获取返回结果
    result = pytrends.interest_over_time(kw_list=keyword, start_date=start, end_date=end)
    
    # 1. 校验返回值类型为pandas DataFrame
    assert isinstance(result, pd.DataFrame), "方法返回值类型不符合预期,应为pandas DataFrame"
    
    # 2. 校验列结构和示例输出一致
    expected_cols = {'formattedTime', 'formattedAxisTime', 'value', 'hasData', 'formattedValue'}
    actual_cols = set(result.columns)
    assert actual_cols == expected_cols, f"列结构不符,差异列:{actual_cols ^ expected_cols}"
    
    # 3. 可选:校验索引是否符合实现逻辑
    assert result.index.name == 'date', "DataFrame索引名称应为date"
    assert pd.api.types.is_datetime64_any_dtype(result.index), "索引应为datetime类型"

可选优化(无网络依赖测试)

如果不需要调用真实Google接口,可以用mock工具模拟requests.get的返回值,避免网络波动对测试的影响,执行速度也会更快。


内容的提问来源于stack exchange,提问作者Ivan Raykov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:54:03