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
相关产品推荐
相关产品推荐

