如何在RestAssured迭代Excel测试数据时记录结果并持续执行
解决方案
要实现「失败不终止测试」和「结果记录到报告」的需求,核心是用软断言替代硬断言,同时配合报告工具记录每条用例状态,具体实现如下:
1. 核心修改:使用软断言保证迭代不中断
普通Assert.fail()会直接抛出异常终止测试,改用TestNG的SoftAssert可以收集所有失败,直到所有用例执行完再统一抛出异常,确保迭代能跑完所有Excel记录。
2. 代码示例
初始化软断言对象
在Excel迭代循环外初始化SoftAssert:
import org.testng.asserts.SoftAssert; // 初始化软断言 SoftAssert softAssert = new SoftAssert();
修改断言逻辑(集成报告记录)
在每条Excel记录的处理逻辑中,替换原有断言,并添加用例标识方便报告定位:
// 从Excel获取当前记录的唯一标识(比如行号,方便报告定位问题) String testCaseId = "TC_" + row.getRowNum(); // 假设row是当前Excel行对象 if (rbac == true && isallowed == var) { // 记录通过状态到控制台/报告 String passMsg = testCaseId + " - 测试通过:rbac状态与allowed状态匹配"; System.out.println(passMsg); // 若用ExtentReports等工具,可调用:extentTest.pass(passMsg); } else if (rbac == false && isallowed == false) { // 用软断言验证状态码 softAssert.assertEquals(response.statusCode(), 403, testCaseId + " 验证失败:预期状态码403,实际为" + response.statusCode()); if (response.statusCode() == 403) { String passMsg = testCaseId + " - 测试通过:rbac与allowed均为false,返回403状态码"; System.out.println(passMsg); // extentTest.pass(passMsg); } } else if (rbac == false && isallowed == true) { String failMsg = testCaseId + " - 测试失败:rbac状态为false,但allowed状态为true"; softAssert.fail(failMsg); System.out.println(failMsg); // extentTest.fail(failMsg); } else { String failMsg = testCaseId + " - 测试失败:状态匹配不符合预期"; softAssert.fail(failMsg); System.out.println(failMsg); // extentTest.fail(failMsg); }
最后统一抛出所有失败
在Excel迭代循环结束后,调用assertAll()触发所有收集到的失败:
// 所有用例执行完后,统一抛出失败信息 softAssert.assertAll();
关键说明
- 软断言的作用:
SoftAssert会缓存所有失败断言,不会中途终止迭代,保证所有Excel记录都能被执行。 - 报告集成:如果使用TestNG自带报告,
SoftAssert的失败信息会自动被捕获并展示;如果用第三方报告工具(如ExtentReports),只需在每个分支调用对应的pass()/fail()方法,即可把用例详情写入报告。 - 用例标识:给每条记录加唯一ID(如行号前缀),能快速在报告中定位到对应的Excel测试数据,提升排查效率。
内容的提问来源于stack exchange,提问作者Ankur Verma
相关产品推荐
相关产品推荐

