fix(UI 自动化) 含有循环的步骤一直不出报告结果

--bug=1016617 --user=张大海 【UI测试】场景中含循环步骤-生成报告一直加载中 https://www.tapd.cn/55049933/s/1239868
This commit is contained in:
zhangdahai112 2022-09-07 12:55:58 +08:00 committed by jianxing
parent 1c75776ede
commit 1a017e8274
1 changed files with 24 additions and 9 deletions

View File

@ -36,7 +36,9 @@ public class PassRateUtil {
} else { } else {
long successSize = requestResults.stream().filter(requestResult -> StringUtils.equalsIgnoreCase(requestResult.getStatus(), ScenarioStatus.Success.name())).count(); long successSize = requestResults.stream().filter(requestResult -> StringUtils.equalsIgnoreCase(requestResult.getStatus(), ScenarioStatus.Success.name())).count();
if (report.getReportType().startsWith(SystemConstants.TestTypeEnum.UI.name())) { if (report.getReportType().startsWith(SystemConstants.TestTypeEnum.UI.name())) {
Map<String, String> resultIdMap = requestResults.stream().collect(Collectors.toMap(r -> r.getResourceId(), r -> r.getStatus())); //resourceId -> 结果列表 循环可能一个 resourceId 对应多个接口
Map<String, List<ApiScenarioReportResult>> resultResourceStatusMap = requestResults.stream().collect(Collectors.groupingBy(ApiScenarioReportResult::getResourceId));
ApiScenarioReportStructureExample e = new ApiScenarioReportStructureExample(); ApiScenarioReportStructureExample e = new ApiScenarioReportStructureExample();
e.createCriteria().andReportIdEqualTo(report.getId()); e.createCriteria().andReportIdEqualTo(report.getId());
@ -45,7 +47,7 @@ public class PassRateUtil {
return "0"; return "0";
} }
List<StepTreeDTO> stepList = JSONArray.parseArray(new String(apiScenarioReportStructures.get(0).getResourceTree(), StandardCharsets.UTF_8), StepTreeDTO.class); List<StepTreeDTO> stepList = JSONArray.parseArray(new String(apiScenarioReportStructures.get(0).getResourceTree(), StandardCharsets.UTF_8), StepTreeDTO.class);
successSize = getUISuccessSize(resultIdMap, stepList); successSize = getUISuccessSize(resultResourceStatusMap, stepList);
if (CollectionUtils.isEmpty(stepList)) { if (CollectionUtils.isEmpty(stepList)) {
return "0"; return "0";
@ -64,20 +66,20 @@ public class PassRateUtil {
* @param stepList * @param stepList
* @return * @return
*/ */
private static long getUISuccessSize(Map<String, String> resultIdMap, List<StepTreeDTO> stepList) { private static long getUISuccessSize(Map<String, List<ApiScenarioReportResult>> resultIdMap, List<StepTreeDTO> stepList) {
AtomicLong atomicLong = new AtomicLong(); AtomicLong atomicLong = new AtomicLong();
stepList.forEach(stepFather -> { stepList.forEach(stepFather -> {
stepFather.getChildren().forEach(step -> { stepFather.getChildren().forEach(step -> {
if (StringUtils.equalsIgnoreCase(step.getType(), UISCENARIO_TYPE_NAME)) { if (StringUtils.equalsIgnoreCase(step.getType(), UISCENARIO_TYPE_NAME)) {
AtomicInteger failCount = new AtomicInteger(); AtomicLong failCount = new AtomicLong();
getUIFailStepCount(resultIdMap, Optional.ofNullable(step.getChildren()).orElse(new ArrayList<>()), failCount); getUIFailStepCount(resultIdMap, Optional.ofNullable(step.getChildren()).orElse(new ArrayList<>()), failCount);
//复制或者嵌套场景的成功只算 1 //复制或者嵌套场景的成功只算 1
if (failCount.get() == 0) { if (failCount.get() == 0) {
atomicLong.getAndAdd(1); atomicLong.getAndAdd(1);
} }
} else { } else {
if (resultIdMap.containsKey(step.getResourceId()) && StringUtils.equalsIgnoreCase(resultIdMap.get(step.getResourceId()), ScenarioStatus.Success.name())) { if (resultIdMap.containsKey(step.getResourceId()) && CollectionUtils.isNotEmpty(resultIdMap.get(step.getResourceId()))) {
atomicLong.incrementAndGet(); calculateCount(resultIdMap, atomicLong, step, ScenarioStatus.Success.name());
} }
} }
}); });
@ -94,18 +96,31 @@ public class PassRateUtil {
* @param failCount * @param failCount
* @return * @return
*/ */
private static void getUIFailStepCount(Map<String, String> resultIdMap, List<StepTreeDTO> stepTrees, AtomicInteger failCount) { private static void getUIFailStepCount(Map<String, List<ApiScenarioReportResult>> resultIdMap, List<StepTreeDTO> stepTrees, AtomicLong failCount) {
stepTrees.forEach(step -> { stepTrees.forEach(step -> {
if (StringUtils.equalsIgnoreCase(step.getType(), UISCENARIO_TYPE_NAME)) { if (StringUtils.equalsIgnoreCase(step.getType(), UISCENARIO_TYPE_NAME)) {
getUIFailStepCount(resultIdMap, Optional.ofNullable(step.getChildren()).orElse(new ArrayList<>()), failCount); getUIFailStepCount(resultIdMap, Optional.ofNullable(step.getChildren()).orElse(new ArrayList<>()), failCount);
} else { } else {
if (resultIdMap.containsKey(step.getResourceId()) && StringUtils.equalsIgnoreCase(resultIdMap.get(step.getResourceId()), ScenarioStatus.Error.name())) { if (resultIdMap.containsKey(step.getResourceId()) && CollectionUtils.isNotEmpty(resultIdMap.get(step.getResourceId()))) {
failCount.incrementAndGet(); calculateCount(resultIdMap, failCount, step, ScenarioStatus.Fail.name());
} }
} }
}); });
} }
private static void calculateCount(Map<String, List<ApiScenarioReportResult>> resultIdMap, AtomicLong failCount, StepTreeDTO step, String status) {
List<ApiScenarioReportResult> sameResourceIdResults = resultIdMap.get(step.getResourceId());
if (StringUtils.equalsIgnoreCase(sameResourceIdResults.get(0).getStatus(), status)) {
failCount.incrementAndGet();
//计算完结果移除
sameResourceIdResults.remove(0);
if (CollectionUtils.isEmpty(sameResourceIdResults)) {
resultIdMap.remove(step.getResourceId());
}
}
}
/** /**
* 计算总步骤数 * 计算总步骤数
* *