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

