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

如何用Python+pytest将每条测试结果写入对应Excel行?

解决方案

问题出在你用类变量i维护写入行号,pytest执行测试用例时,这个累加逻辑无法和每个测试用例对应的Excel行精准匹配。正确做法是直接利用测试数据里的TEST CASE_NO.定位对应Excel行:

Excel标题行是第1行,TEST CASE_NO. = 1对应第2行,TEST CASE_NO. = 2对应第3行,以此类推,目标行号 = TEST CASE_NO. + 1。

修改test_sample.py中的测试函数:

class TestSample:

    sheet = ReadExcel('test_data.xlsx', 'test_data')
    rows = sheet.read_data()

    @pytest.fixture(scope='function', params=rows)
    def _test_data(self, request):
        return request.param

    def test_write_result(self, drivers, _test_data):
        # 获取测试用例编号,直接对应Excel行号
        test_case_no = _test_data['TEST CASE_NO.']
        # 计算目标行号:测试用例编号 +1(标题占第1行)
        target_row = test_case_no + 1
        # 写入对应行的第2列(TEST RESULT列)
        self.sheet.write_data(target_row, 2, "pass")

额外优化建议

当前write_data方法每次都打开、保存、关闭Excel,频繁IO会影响性能。可以改成测试类初始化时打开Excel,所有测试完成后再关闭:

# 修改test_sample.py
class TestSample:
    def __init__(self):
        self.sheet = ReadExcel('test_data.xlsx', 'test_data')
        self.sheet.open()  # 初始化时打开Excel
        self.rows = self.sheet.read_data()

    def teardown_class(self):
        self.sheet.close()  # 所有测试完成后关闭Excel

    @pytest.fixture(scope='function', params=self.rows)
    def _test_data(self, request):
        return request.param

    def test_write_result(self, drivers, _test_data):
        test_case_no = _test_data['TEST CASE_NO.']
        target_row = test_case_no + 1
        self.sheet.sh.cell(row=target_row, column=2, value="pass")
        self.sheet.wb.save(self.sheet.file_name)  # 写入后保存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:20:37