Robot Framework测试for循环函数仅返回首条迭代结果如何获取全部结果
问题根因
你当前代码只能拿到第一次迭代结果的核心原因是:for循环内部直接写了return语句。Python中函数一旦执行return,就会立刻终止运行并返回对应值,后续的循环迭代根本不会执行,自然拿不到所有参数的测试结果。
另外原代码还存在两个可优化点:
- 打开CSV文件后没有做关闭处理,长时间运行可能触发资源泄漏
- 跳过表头时用
pass属于空逻辑,用continue直接进入下一轮循环可读性更好
修改步骤
1. 调整Python函数逻辑
批量测试的分支不要在循环内直接返回单条结果,先初始化列表存储每一次迭代的测试结果,等所有行遍历完成后再统一返回结果列表;单参数查询的分支保留原有逻辑即可,同时用上下文管理器自动处理文件关闭。
修改后的完整代码:
import csv def testcase(x, testType=""): header = ["Name", "Format", "Arraysize", "MinVal", "MaxVal", "Default Val"] # with语句会在代码块执行完后自动关闭文件,不需要手动调用close() with open("Parameter_List.csv", "r", encoding="utf-8") as parameter_list: Parameters = csv.reader(parameter_list) test_results = [] if x == "compagne": for row in Parameters: param = row[0].split(";") if param == header: continue # 命中表头直接进入下一轮循环 parameter = Parameter(param[0], param[1], param[2], param[3], param[4], param[5]) # 单条测试结果追加到列表,不直接返回 test_results.append(parameter.robotALLtest()) elif x == "one test" and testType in ["Min Value", "Max Value", "Lower Min", "Greater Max", "Persistence ON", "Persistence OFF", "Rset"]: for row in Parameters: param = row[0].split(";") if param == header: continue parameter = Parameter(param[0], param[1], param[2], param[3], param[4], param[5]) test_results.append(parameter.robotTestParameter(testType)) # 所有行遍历完成后,返回全部结果 return test_results else: # 单参数查询分支保留原有逻辑,增加参数不存在的异常提示 target_param = None for row in Parameters: param = row[0].split(";") if x == param[0]: target_param = Parameter(param[0], param[1], param[2], param[3], param[4], param[5]) break if not target_param: raise ValueError(f"未找到名称为{x}的配置参数") return target_param.robotTestParameter(testType)
2. 调整Robot Framework测试用例
修改后批量测试场景下函数返回的是布尔值列表,你可以引入Robot Framework自带的Collections库,直接断言列表中不存在False值,即可确认所有迭代的测试结果都为True。
调整后的测试用例:
*** Settings *** Library test_cases.py Library Collections # 导入内置集合库做列表断言 *** Test Cases *** Test All Lower Min Parameter Check ${all_results} testcase one test Lower Min # 断言所有测试结果都为True List Should Not Contain Value ${all_results} ${False} # 可选:打印所有结果方便排查失败项 Log Many 各参数测试结果: ${all_results}
补充说明
如果需要把测试结果和参数名绑定,方便定位哪个参数测试失败,可以把存结果的列表改成字典,key存参数名,value存对应的测试结果,断言时遍历校验即可。
内容的提问来源于stack exchange,提问作者HAMZA SAAFI
相关产品推荐
相关产品推荐

