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

如何使用PyTest为多个CSV文件单独执行相同测试用例?

为多个CSV文件批量执行PyTest测试用例

原代码的问题

你的写法无法被PyTest识别,核心问题包括:

  • 测试类的__init__方法赋值错误:self.data = pd.DataFrame应该改为self.data = data,否则实例的data属性指向的是DataFrame类,而非传入的具体数据集
  • 测试方法test_na缺少self参数,类中的测试方法必须以self作为第一个参数
  • 手动循环创建测试类实例的方式无效:PyTest通过静态扫描模块中的测试函数/类来发现用例,模块级循环执行的代码不会触发测试用例注册

正确实现方式:使用PyTest参数化

最规范的做法是用@pytest.mark.parametrize装饰器,为每个CSV文件生成独立的测试用例,每个文件都会单独执行测试逻辑。

方案1:函数式测试(推荐)

import pandas as pd
import pytest

# 定义要测试的CSV文件列表
file_names = ['file1.csv', 'file2.csv']

@pytest.mark.parametrize("file_path", file_names)
def test_no_missing_values(file_path):
    # 加载当前CSV文件
    df = pd.read_csv(file_path)
    # 检查每列是否无缺失值,失败时显示具体文件和列信息
    for col in df.columns:
        assert df[col].isna().sum() == 0, f"文件[{file_path}]的列[{col}]存在缺失值"

方案2:类式测试

如果偏好使用测试类,也可以在类的测试方法上添加参数化装饰器:

import pandas as pd
import pytest

file_names = ['file1.csv', 'file2.csv']

class TestCSV:
    @pytest.mark.parametrize("file_path", file_names)
    def test_no_missing_values(self, file_path):
        df = pd.read_csv(file_path)
        for col in df.columns:
            assert df[col].isna().sum() == 0, f"文件[{file_path}]的列[{col}]存在缺失值"

效果说明

  • PyTest会为file_names中的每个文件生成一条独立的测试用例
  • 执行测试时,每个文件的测试结果会单独显示,方便定位哪个文件的哪列出现问题
  • 无需手动管理测试实例,PyTest会自动完成测试用例的发现和执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:01:03