fix(UI 自动化) ui测试报告计数错误修复

--bug=1016623 --user=张大海 【UI测试】当成功的步骤为0时-通过率计算错误 https://www.tapd.cn/55049933/s/1240131
--bug=1016626 --user=张大海 【UI测试】生成报告-步骤统计-未执行统计错误 https://www.tapd.cn/55049933/s/1240133
This commit is contained in:
zhangdahai112 2022-09-07 17:12:46 +08:00 committed by zhangdahai112
parent 3fdeea98d3
commit 3dade654bb
2 changed files with 31 additions and 10 deletions

View File

@ -28,8 +28,6 @@ import java.util.stream.Collectors;
*/
public class PassRateUtil {
private final static String UISCENARIO_TYPE_NAME = "scenario";
public static String calculatePassRate(List<ApiScenarioReportResult> requestResults, ApiScenarioReport report) {
if (CollectionUtils.isEmpty(requestResults)) {
return "0";
@ -70,11 +68,15 @@ public class PassRateUtil {
AtomicLong atomicLong = new AtomicLong();
stepList.forEach(stepFather -> {
stepFather.getChildren().forEach(step -> {
if (StringUtils.equalsIgnoreCase(step.getType(), UISCENARIO_TYPE_NAME)) {
//scenario 拥有 hashtree 的控制语句
if (CollectionUtils.isNotEmpty(step.getChildren())) {
AtomicLong failCount = new AtomicLong();
AtomicLong unExecuteCount = new AtomicLong();
getUIFailStepCount(resultIdMap, Optional.ofNullable(step.getChildren()).orElse(new ArrayList<>()), failCount);
getUIUnExecuteStepCount(resultIdMap, Optional.ofNullable(step.getChildren()).orElse(new ArrayList<>()), unExecuteCount);
//复制或者嵌套场景的成功只算 1
if (failCount.get() == 0) {
if (failCount.get() == 0 && unExecuteCount.get() == 0) {
atomicLong.getAndAdd(1);
}
} else {
@ -93,16 +95,28 @@ public class PassRateUtil {
*
* @param stepTrees
* @param resultIdMap
* @param failCount
* @param count
* @return
*/
private static void getUIFailStepCount(Map<String, List<ApiScenarioReportResult>> resultIdMap, List<StepTreeDTO> stepTrees, AtomicLong failCount) {
private static void getUIFailStepCount(Map<String, List<ApiScenarioReportResult>> resultIdMap, List<StepTreeDTO> stepTrees, AtomicLong count) {
stepTrees.forEach(step -> {
if (StringUtils.equalsIgnoreCase(step.getType(), UISCENARIO_TYPE_NAME)) {
getUIFailStepCount(resultIdMap, Optional.ofNullable(step.getChildren()).orElse(new ArrayList<>()), failCount);
if (CollectionUtils.isNotEmpty(step.getChildren())) {
getUIFailStepCount(resultIdMap, Optional.ofNullable(step.getChildren()).orElse(new ArrayList<>()), count);
} else {
if (resultIdMap.containsKey(step.getResourceId()) && CollectionUtils.isNotEmpty(resultIdMap.get(step.getResourceId()))) {
calculateCount(resultIdMap, failCount, step, ScenarioStatus.Fail.name());
calculateCount(resultIdMap, count, step, ScenarioStatus.Fail.name());
}
}
});
}
private static void getUIUnExecuteStepCount(Map<String, List<ApiScenarioReportResult>> resultIdMap, List<StepTreeDTO> stepTrees, AtomicLong count) {
stepTrees.forEach(step -> {
if (CollectionUtils.isNotEmpty(step.getChildren())) {
getUIUnExecuteStepCount(resultIdMap, Optional.ofNullable(step.getChildren()).orElse(new ArrayList<>()), count);
} else {
if (!resultIdMap.containsKey(step.getResourceId())) {
count.getAndIncrement();
}
}
});

View File

@ -129,7 +129,7 @@
<span v-show="showUnExecuteReport && isUi" class="ms-point-unexecute"/>
<div v-show="showUnExecuteReport && isUi" class="metric-box">
<div class="value">{{
content.scenarioStepUnExecuteReport ? content.scenarioStepUnExecuteReport : 0
uiUnExecuteCount
}}
</div>
<div class="name">{{ $t('api_test.home_page.detail_card.unexecute') }}</div>
@ -310,6 +310,13 @@ export default {
return (this.content.scenarioStepUnExecuteReport && this.content.scenarioStepUnExecuteReport > 0)
|| (this.content.scenarioUnExecute && this.content.scenarioUnExecute > 0) || (this.content.unExecute && this.content.unExecute > 0);
},
uiUnExecuteCount() {
if (this.content.scenarioStepTotal) {
return this.content.scenarioStepTotal - (this.content.scenarioStepSuccess || 0) - (this.content.scenarioStepError || 0);
} else {
return 0;
}
}
},
}
</script>