fix(接口场景): 接口场景调试时增加误报结果的分析

接口场景调试时增加误报结果的分析
This commit is contained in:
song-tianyang 2022-01-25 14:54:39 +08:00 committed by jianxing
parent f9f5cd23e5
commit 80f7dd5b2b
2 changed files with 47 additions and 24 deletions

View File

@ -19,14 +19,12 @@ package io.metersphere.api.jmeter;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import io.metersphere.api.dto.ErrorReportLibraryParseDTO;
import io.metersphere.api.dto.RequestResultExpandDTO;
import io.metersphere.api.dto.RunningParamKeys;
import io.metersphere.api.exec.queue.PoolExecBlockingQueueUtil;
import io.metersphere.api.exec.utils.ResultParseUtil;
import io.metersphere.api.service.MsResultService;
import io.metersphere.commons.utils.CommonBeanFactory;
import io.metersphere.commons.utils.ErrorReportLibraryUtil;
import io.metersphere.commons.utils.LogUtil;
import io.metersphere.commons.utils.*;
import io.metersphere.dto.RequestResult;
import io.metersphere.jmeter.JMeterBase;
import io.metersphere.utils.JMeterVars;
@ -163,22 +161,16 @@ public class MsDebugListener extends AbstractListenerElement implements SampleLi
requestResult.getSubRequestResults().forEach(transactionResult -> {
transactionResult.getResponseResult().setConsole(console);
//解析误报内容
ErrorReportLibraryParseDTO errorCodeDTO = ErrorReportLibraryUtil.parseAssertions(transactionResult);
JSONObject requestResultObject = JSONObject.parseObject(JSON.toJSONString(transactionResult));
if(CollectionUtils.isNotEmpty(errorCodeDTO.getErrorCodeList())){
requestResultObject.put("errorReportResult",errorCodeDTO.getErrorCodeStr());
}
RequestResultExpandDTO expandDTO = ResponseUtil.parseByRequestResult(transactionResult);
JSONObject requestResultObject = JSONObject.parseObject(JSON.toJSONString(expandDTO));
dto.setContent("result_" + JSON.toJSONString(requestResultObject));
WebSocketUtils.sendMessageSingle(dto);
});
} else {
requestResult.getResponseResult().setConsole(console);
//解析误报内容
ErrorReportLibraryParseDTO errorCodeDTO = ErrorReportLibraryUtil.parseAssertions(requestResult);
JSONObject requestResultObject = JSONObject.parseObject(JSON.toJSONString(requestResult));
if(CollectionUtils.isNotEmpty(errorCodeDTO.getErrorCodeList())){
requestResultObject.put("errorReportResult",errorCodeDTO.getErrorCodeStr());
}
RequestResultExpandDTO expandDTO = ResponseUtil.parseByRequestResult(requestResult);
JSONObject requestResultObject = JSONObject.parseObject(JSON.toJSONString(expandDTO));
dto.setContent("result_" + JSON.toJSONString(requestResultObject));
WebSocketUtils.sendMessageSingle(dto);
}

View File

@ -18,17 +18,26 @@
<template v-slot:afterTitle v-if="(request.refType==='API'|| request.refType==='CASE')&&isSameSpace">
<span v-if="isShowNum" @click="clickResource(request)">{{ " ID: " + request.num + "" }}</span>
<span v-else>
<el-tooltip class="ms-num" effect="dark" :content="request.refType==='API'?$t('api_test.automation.scenario.api_none'):$t('api_test.automation.scenario.case_none')" placement="top">
<el-tooltip class="ms-num" effect="dark"
:content="request.refType==='API'?$t('api_test.automation.scenario.api_none'):$t('api_test.automation.scenario.case_none')"
placement="top">
<i class="el-icon-warning"/>
</el-tooltip>
</span>
<span v-xpack v-if="request.versionEnable&&showVersion">{{ $t('project.version.name') }}: {{ request.versionName }}</span>
<span v-xpack v-if="request.versionEnable&&showVersion">{{ $t('project.version.name') }}: {{
request.versionName
}}</span>
</template>
<template v-slot:behindHeaderLeft>
<el-tag size="mini" class="ms-tag" v-if="request.referenced==='Deleted'" type="danger">{{ $t('api_test.automation.reference_deleted') }}</el-tag>
<el-tag size="mini" class="ms-tag" v-if="request.referenced==='Deleted'" type="danger">
{{ $t('api_test.automation.reference_deleted') }}
</el-tag>
<el-tag size="mini" class="ms-tag" v-if="request.referenced==='Copy'">{{ $t('commons.copy') }}</el-tag>
<el-tag size="mini" class="ms-tag" v-if="request.referenced ==='REF'">{{ $t('api_test.scenario.reference') }}</el-tag>
<el-tag size="mini" class="ms-tag" v-if="request.referenced ==='REF'">{{
$t('api_test.scenario.reference')
}}
</el-tag>
<span class="ms-tag ms-step-name-api">{{ getProjectName(request.projectId) }}</span>
</template>
<template v-slot:debugStepCode>
@ -36,7 +45,15 @@
<i class="el-icon-loading" style="font-size: 16px"/>
{{ $t('commons.testing') }}
</span>
<span class="ms-step-debug-code" :class="request.requestResult[0].success && reqSuccess?'ms-req-success':'ms-req-error'" v-if="!loading &&!request.testing && request.debug && request.requestResult[0] && request.requestResult[0].responseResult">
<!-- 场景调试步骤增加误报判断 -->
<span class="ms-step-debug-code" :class="'ms-req-error-report'" v-if="!loading &&!request.testing && request.debug && request.requestResult[0] && request.requestResult[0].responseResult && request.requestResult[0].status==='errorReportResult'">
{{ $t("error_report_library.option.name") }}
</span>
<span class="ms-step-debug-code"
:class="request.requestResult[0].success && reqSuccess?'ms-req-success':'ms-req-error'"
v-else-if="!loading &&!request.testing && request.debug && request.requestResult[0] && request.requestResult[0].responseResult">
{{ request.requestResult[0].success && reqSuccess ? 'success' : 'error' }}
</span>
</template>
@ -45,7 +62,8 @@
<el-button @click="run" icon="el-icon-video-play" style="padding: 5px" class="ms-btn" size="mini" circle/>
</el-tooltip>
<el-tooltip :content="$t('report.stop_btn')" placement="top" :enterable="false" v-else>
<el-button @click.once="stop" size="mini" style="color:white;padding: 0 0.1px;width: 24px;height: 24px;" class="stop-btn" circle>
<el-button @click.once="stop" size="mini" style="color:white;padding: 0 0.1px;width: 24px;height: 24px;"
class="stop-btn" circle>
<div style="transform: scale(0.66)">
<span style="margin-left: -4.5px;font-weight: bold;">STOP</span>
</div>
@ -111,8 +129,10 @@
/>
</div>
<div v-else>
<el-tabs v-model="request.activeName" closable class="ms-tabs" v-if="request.requestResult && request.requestResult.length > 1">
<el-tab-pane v-for="(item,i) in request.requestResult" :label="'循环'+(i+1)" :key="i" style="margin-bottom: 5px">
<el-tabs v-model="request.activeName" closable class="ms-tabs"
v-if="request.requestResult && request.requestResult.length > 1">
<el-tab-pane v-for="(item,i) in request.requestResult" :label="'循环'+(i+1)" :key="i"
style="margin-bottom: 5px">
<api-response-component
:currentProtocol="request.protocol"
:apiActive="true"
@ -146,7 +166,8 @@ import {getUUID, getCurrentProjectID, getCurrentWorkspaceId} from "@/common/js/u
import ApiBaseComponent from "../common/ApiBaseComponent";
import ApiResponseComponent from "./ApiResponseComponent";
import CustomizeReqInfo from "@/business/components/api/automation/scenario/common/CustomizeReqInfo";
import TemplateComponent from "@/business/components/track/plan/view/comonents/report/TemplateComponent/TemplateComponent";
import TemplateComponent
from "@/business/components/track/plan/view/comonents/report/TemplateComponent/TemplateComponent";
import {ENV_TYPE} from "@/common/js/constants";
import {getUrl} from "@/business/components/api/automation/scenario/component/urlhelper";
@ -669,7 +690,13 @@ export default {
}
let definitionData = this.$router.resolve({
name: 'ApiDefinition',
params: {redirectID: getUUID(), dataType: "api", dataSelectRange: 'edit:' + resource.id, projectId: resource.projectId, type: resource.protocol}
params: {
redirectID: getUUID(),
dataType: "api",
dataSelectRange: 'edit:' + resource.id,
projectId: resource.projectId,
type: resource.protocol
}
});
window.open(definitionData.href, '_blank');
} else if (resource.refType && resource.refType === 'CASE') {
@ -782,6 +809,10 @@ export default {
color: #F56C6C;
}
.ms-req-error-report {
color: #F6972A;
}
.ms-test-running {
color: #6D317C;
}