如何使用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
相关产品推荐
相关产品推荐

