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

如何让pytest按CSV给定顺序执行参数化测试用例?

解决pytest参数化测试按CSV原始顺序执行的问题

问题原因

pytest默认会对参数化的测试用例,基于参数的字符串表示进行排序,导致从CSV加载的原始数据顺序被打乱。

解决方案

方案1:全局配置强制按定义顺序执行

在项目根目录创建pytest.ini文件,添加以下配置:

[pytest]
test_order = defined

此配置会让pytest严格按照测试用例(包括参数化用例)的定义顺序执行,也就是CSV文件中的行顺序。

方案2:命令行临时指定执行顺序

运行测试时添加命令行参数,临时启用按定义顺序执行:

pytest --test-order=defined

方案3:改用@pytest.mark.parametrize参数化(可选)

如果更倾向于直接的参数化写法,可以把fixture参数化替换为parametrize,配合上述配置同样能保持顺序:

import os
import csv
import pytest

CSV_FILE_NAME = "CSV file path"
CSV_FILE_PATH = os.path.join(os.getcwd(), CSV_FILE_NAME)

def load_tests_from_csv(file_path):
    with open(file_path, newline='', encoding='utf-8-sig') as csvfile:
        reader = csv.DictReader(csvfile)
        return list(reader)

test_data = load_tests_from_csv(CSV_FILE_PATH)

class TestClassTest:
    @pytest.mark.parametrize("test_data", test_data)
    def test_generated(self, test_data):
        assert True
        print(f"Running test with row data: {test_data}")

版本兼容说明

  • 若使用pytest 7.0及以上版本,直接使用test_order=defined配置或对应命令行参数即可。
  • 若pytest版本低于7.0,可使用--no-sort命令行参数替代,或者升级pytest到最新版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:43:13