refactor(接口测试): 场景和用例未执行、误报状态报告优化
--bug=1013743 --user=宋天阳 【接口测试】场景和用例未执行、误报状态报告优化 https://www.tapd.cn/55049933/s/1173289
This commit is contained in:
parent
ca778d44c9
commit
acc93fe825
|
@ -12,6 +12,7 @@ import io.metersphere.api.dto.datacount.ApiDataCountResult;
|
||||||
import io.metersphere.api.jmeter.FixedCapacityUtils;
|
import io.metersphere.api.jmeter.FixedCapacityUtils;
|
||||||
import io.metersphere.base.domain.*;
|
import io.metersphere.base.domain.*;
|
||||||
import io.metersphere.base.mapper.*;
|
import io.metersphere.base.mapper.*;
|
||||||
|
import io.metersphere.base.mapper.ext.ExtApiDefinitionExecResultMapper;
|
||||||
import io.metersphere.base.mapper.ext.ExtApiScenarioReportMapper;
|
import io.metersphere.base.mapper.ext.ExtApiScenarioReportMapper;
|
||||||
import io.metersphere.base.mapper.ext.ExtApiScenarioReportResultMapper;
|
import io.metersphere.base.mapper.ext.ExtApiScenarioReportResultMapper;
|
||||||
import io.metersphere.commons.constants.*;
|
import io.metersphere.commons.constants.*;
|
||||||
|
@ -83,6 +84,8 @@ public class ApiScenarioReportService {
|
||||||
@Resource
|
@Resource
|
||||||
private ApiDefinitionExecResultMapper definitionExecResultMapper;
|
private ApiDefinitionExecResultMapper definitionExecResultMapper;
|
||||||
@Resource
|
@Resource
|
||||||
|
private ExtApiDefinitionExecResultMapper extApiDefinitionExecResultMapper;
|
||||||
|
@Resource
|
||||||
private UiReportServiceProxy uiReportServiceProxy;
|
private UiReportServiceProxy uiReportServiceProxy;
|
||||||
@Resource
|
@Resource
|
||||||
private ExtApiScenarioReportResultMapper extApiScenarioReportResultMapper;
|
private ExtApiScenarioReportResultMapper extApiScenarioReportResultMapper;
|
||||||
|
@ -352,17 +355,50 @@ public class ApiScenarioReportService {
|
||||||
return report;
|
return report;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getIntegrationReportStatus(List<String> reportStatus) {
|
||||||
|
boolean hasError = false, hasErrorReport = false, hasUnExecute = false, hasOtherStatus = false, hasStop = false;
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(reportStatus)) {
|
||||||
|
//查不到任何结果,按照未执行来处理
|
||||||
|
hasUnExecute = true;
|
||||||
|
}else {
|
||||||
|
for (String status : reportStatus) {
|
||||||
|
if (StringUtils.equalsIgnoreCase(status, ExecuteResult.Error.name())) {
|
||||||
|
hasError = true;
|
||||||
|
} else if (StringUtils.equalsIgnoreCase(status, ExecuteResult.errorReportResult.name())) {
|
||||||
|
hasErrorReport = true;
|
||||||
|
} else if (StringUtils.equalsIgnoreCase(status, ExecuteResult.STOP.name())) {
|
||||||
|
hasStop = true;
|
||||||
|
} else if (StringUtils.equalsIgnoreCase(status, ExecuteResult.unexecute.name())) {
|
||||||
|
hasUnExecute = true;
|
||||||
|
} else {
|
||||||
|
hasOtherStatus = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hasError || hasErrorReport || hasOtherStatus) {
|
||||||
|
//根据状态优先级判定,只要存在失败/误报/其他待定状态 的数据, 则未执行和停止都为false (优先级最低)
|
||||||
|
hasUnExecute = false;
|
||||||
|
hasStop = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return hasError ? ScenarioStatus.Error.name() :
|
||||||
|
hasErrorReport ? ExecuteResult.errorReportResult.name() :
|
||||||
|
hasStop ? ExecuteResult.STOP.name() :
|
||||||
|
hasUnExecute ? ExecuteResult.unexecute.name() : ScenarioStatus.Success.name();
|
||||||
|
}
|
||||||
|
|
||||||
public void margeReport(String reportId, String runMode, String console) {
|
public void margeReport(String reportId, String runMode, String console) {
|
||||||
// 更新场景状态
|
// 更新场景状态
|
||||||
|
List<String> statusList = null;
|
||||||
if (StringUtils.equalsIgnoreCase(runMode, ApiRunMode.DEFINITION.name())) {
|
if (StringUtils.equalsIgnoreCase(runMode, ApiRunMode.DEFINITION.name())) {
|
||||||
ApiDefinitionExecResultWithBLOBs result = definitionExecResultMapper.selectByPrimaryKey(reportId);
|
ApiDefinitionExecResultWithBLOBs result = definitionExecResultMapper.selectByPrimaryKey(reportId);
|
||||||
if (!StringUtils.equalsAnyIgnoreCase(result.getStatus(), APITestStatus.Rerunning.name())) {
|
if (!StringUtils.equalsAnyIgnoreCase(result.getStatus(), APITestStatus.Rerunning.name())) {
|
||||||
result.setEndTime(System.currentTimeMillis());
|
result.setEndTime(System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
ApiDefinitionExecResultExample execResultExample = new ApiDefinitionExecResultExample();
|
statusList = extApiDefinitionExecResultMapper.selectDistinctStatusByReportId(reportId);
|
||||||
execResultExample.createCriteria().andIntegratedReportIdEqualTo(reportId).andStatusEqualTo("Error");
|
result.setStatus(this.getIntegrationReportStatus(statusList));
|
||||||
long size = definitionExecResultMapper.countByExample(execResultExample);
|
result.setEndTime(System.currentTimeMillis());
|
||||||
result.setStatus(size > 0 ? ScenarioStatus.Error.name() : ScenarioStatus.Success.name());
|
|
||||||
definitionExecResultMapper.updateByPrimaryKeySelective(result);
|
definitionExecResultMapper.updateByPrimaryKeySelective(result);
|
||||||
} else {
|
} else {
|
||||||
ApiScenarioReport report = apiScenarioReportMapper.selectByPrimaryKey(reportId);
|
ApiScenarioReport report = apiScenarioReportMapper.selectByPrimaryKey(reportId);
|
||||||
|
@ -370,30 +406,9 @@ public class ApiScenarioReportService {
|
||||||
if (!StringUtils.equalsAnyIgnoreCase(report.getStatus(), APITestStatus.Rerunning.name())) {
|
if (!StringUtils.equalsAnyIgnoreCase(report.getStatus(), APITestStatus.Rerunning.name())) {
|
||||||
report.setEndTime(System.currentTimeMillis());
|
report.setEndTime(System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
List<String> statusList = extApiScenarioReportResultMapper.selectDistinctStatusByReportId(reportId);
|
statusList = extApiScenarioReportResultMapper.selectDistinctStatusByReportId(reportId);
|
||||||
boolean hasError = false, hasErrorReport = false, hasUnExecute = false, hasOtherStatus = false;
|
report.setStatus(this.getIntegrationReportStatus(statusList));
|
||||||
for (String status : statusList) {
|
report.setEndTime(System.currentTimeMillis());
|
||||||
if (StringUtils.equalsIgnoreCase(status, ExecuteResult.Error.name())) {
|
|
||||||
hasError = true;
|
|
||||||
} else if (StringUtils.equalsIgnoreCase(status, ExecuteResult.errorReportResult.name())) {
|
|
||||||
hasErrorReport = true;
|
|
||||||
} else if (StringUtils.equalsIgnoreCase(status, ExecuteResult.unexecute.name())) {
|
|
||||||
hasUnExecute = true;
|
|
||||||
} else {
|
|
||||||
hasOtherStatus = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasUnExecute && (hasError || hasErrorReport || hasOtherStatus)) {
|
|
||||||
//只有全部状态都是未执行时,集合报告的状态才可以是未执行
|
|
||||||
hasUnExecute = false;
|
|
||||||
}else if(CollectionUtils.isEmpty(statusList)){
|
|
||||||
//查不到任何结果也按照未执行来处理
|
|
||||||
hasUnExecute = true;
|
|
||||||
}
|
|
||||||
report.setStatus(hasError ? ScenarioStatus.Error.name() :
|
|
||||||
hasErrorReport ? ExecuteResult.errorReportResult.name() :
|
|
||||||
hasUnExecute ? ExecuteResult.unexecute.name() : ScenarioStatus.Success.name());
|
|
||||||
// 更新报告
|
// 更新报告
|
||||||
apiScenarioReportMapper.updateByPrimaryKey(report);
|
apiScenarioReportMapper.updateByPrimaryKey(report);
|
||||||
}
|
}
|
||||||
|
@ -889,7 +904,7 @@ public class ApiScenarioReportService {
|
||||||
} else if (errorReportResultSize > 0) {
|
} else if (errorReportResultSize > 0) {
|
||||||
status = ExecuteResult.errorReportResult.name();
|
status = ExecuteResult.errorReportResult.name();
|
||||||
} else {
|
} else {
|
||||||
status = requestResults.isEmpty() ? ScenarioStatus.Error.name() : ScenarioStatus.Success.name();
|
status = requestResults.isEmpty() ? ExecuteResult.unexecute.name() : ScenarioStatus.Success.name();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dto != null && dto.getArbitraryData() != null && dto.getArbitraryData().containsKey("TIMEOUT") && (Boolean) dto.getArbitraryData().get("TIMEOUT")) {
|
if (dto != null && dto.getArbitraryData() != null && dto.getArbitraryData().containsKey("TIMEOUT") && (Boolean) dto.getArbitraryData().get("TIMEOUT")) {
|
||||||
|
|
|
@ -47,5 +47,5 @@ public interface ExtApiDefinitionExecResultMapper {
|
||||||
|
|
||||||
List<ApiDefinitionExecResult> findByProjectIds(@Param("request") TaskCenterRequest request);
|
List<ApiDefinitionExecResult> findByProjectIds(@Param("request") TaskCenterRequest request);
|
||||||
|
|
||||||
|
List<String> selectDistinctStatusByReportId(String reportId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,10 @@
|
||||||
WHERE testCase.project_id = #{projectId})
|
WHERE testCase.project_id = #{projectId})
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="selectDistinctStatusByReportId" resultType="java.lang.String">
|
||||||
|
SELECT DISTINCT status FROM api_definition_exec_result WHERE integrated_report_id = #{0}
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="findFaliureCaseInfoByProjectIDAndExecuteTimeAndLimitNumber" resultType="io.metersphere.api.dto.datacount.ExecutedCaseInfoResult">
|
<select id="findFaliureCaseInfoByProjectIDAndExecuteTimeAndLimitNumber" resultType="io.metersphere.api.dto.datacount.ExecutedCaseInfoResult">
|
||||||
SELECT * FROM (
|
SELECT * FROM (
|
||||||
-- api_test_case 只查找测试计划执行的结果
|
-- api_test_case 只查找测试计划执行的结果
|
||||||
|
|
|
@ -5,7 +5,7 @@ public enum ExecuteResult {
|
||||||
errorReportResult,
|
errorReportResult,
|
||||||
|
|
||||||
//接口执行状态(兼容旧数据)
|
//接口执行状态(兼容旧数据)
|
||||||
success,error,
|
success, error, STOP,
|
||||||
|
|
||||||
//未执行状态
|
//未执行状态
|
||||||
unexecute,
|
unexecute,
|
||||||
|
|
Loading…
Reference in New Issue