fix(接口测试): 修复场景调试状态不更新问题
--bug=1009505 --user=赵勇 【github#9177】接口自动化在调试的时候,状态显示有问题 https://www.tapd.cn/55049933/s/1090303
This commit is contained in:
parent
fe3caea2d9
commit
4504c9a302
|
@ -202,9 +202,8 @@ public class ApiAutomationController {
|
||||||
@MsAuditLog(module = "api_automation", type = OperLogConstants.DEBUG, title = "#request.scenarioName", sourceId = "#request.scenarioId", project = "#request.projectId")
|
@MsAuditLog(module = "api_automation", type = OperLogConstants.DEBUG, title = "#request.scenarioName", sourceId = "#request.scenarioId", project = "#request.projectId")
|
||||||
public void runDebug(@RequestPart("request") RunDefinitionRequest request,
|
public void runDebug(@RequestPart("request") RunDefinitionRequest request,
|
||||||
@RequestPart(value = "bodyFiles", required = false) List<MultipartFile> bodyFiles, @RequestPart(value = "scenarioFiles", required = false) List<MultipartFile> scenarioFiles) {
|
@RequestPart(value = "bodyFiles", required = false) List<MultipartFile> bodyFiles, @RequestPart(value = "scenarioFiles", required = false) List<MultipartFile> scenarioFiles) {
|
||||||
request.setExecuteType(ExecuteType.Debug.name());
|
if (StringUtils.isEmpty(request.getExecuteType())) {
|
||||||
if (request.isSaved()) {
|
request.setExecuteType(ExecuteType.Debug.name());
|
||||||
request.setExecuteType(ExecuteType.Saved.name());
|
|
||||||
}
|
}
|
||||||
apiAutomationService.debugRun(request, bodyFiles, scenarioFiles);
|
apiAutomationService.debugRun(request, bodyFiles, scenarioFiles);
|
||||||
}
|
}
|
||||||
|
|
|
@ -377,21 +377,23 @@ public class ApiScenarioExecuteService {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
MSException.throwException(e.getMessage());
|
MSException.throwException(e.getMessage());
|
||||||
}
|
}
|
||||||
APIScenarioReportResult report = apiScenarioReportService.init(request.getId(), request.getScenarioId(), request.getScenarioName(), ReportTriggerMode.MANUAL.name(), request.getExecuteType(), request.getProjectId(),
|
|
||||||
SessionUtils.getUserId(), request.getConfig(), request.getId());
|
|
||||||
apiScenarioReportMapper.insert(report);
|
|
||||||
if (request.isSaved()) {
|
if (request.isSaved()) {
|
||||||
ApiScenarioWithBLOBs scenario = apiScenarioMapper.selectByPrimaryKey(request.getScenarioId());
|
APIScenarioReportResult report = apiScenarioReportService.init(request.getId(), request.getScenarioId(), request.getScenarioName(), ReportTriggerMode.MANUAL.name(), request.getExecuteType(), request.getProjectId(),
|
||||||
apiScenarioReportStructureService.save(scenario, report.getId(), request.getConfig() != null ? request.getConfig().getReportType() : null);
|
SessionUtils.getUserId(), request.getConfig(), request.getId());
|
||||||
} else {
|
apiScenarioReportMapper.insert(report);
|
||||||
if (request.getTestElement() != null && CollectionUtils.isNotEmpty(request.getTestElement().getHashTree())) {
|
ApiScenarioWithBLOBs scenarioWithBLOBs = apiScenarioMapper.selectByPrimaryKey(request.getScenarioId());
|
||||||
ApiScenarioWithBLOBs scenario = new ApiScenarioWithBLOBs();
|
if (scenarioWithBLOBs != null) {
|
||||||
scenario.setId(request.getScenarioId());
|
apiScenarioReportStructureService.save(scenarioWithBLOBs, report.getId(), request.getConfig() != null ? request.getConfig().getReportType() : null);
|
||||||
MsTestElement testElement = request.getTestElement().getHashTree().get(0).getHashTree().get(0);
|
} else {
|
||||||
if (testElement != null) {
|
if (request.getTestElement() != null && CollectionUtils.isNotEmpty(request.getTestElement().getHashTree())) {
|
||||||
scenario.setName(testElement.getName());
|
ApiScenarioWithBLOBs scenario = new ApiScenarioWithBLOBs();
|
||||||
scenario.setScenarioDefinition(JSON.toJSONString(testElement));
|
scenario.setId(request.getScenarioId());
|
||||||
apiScenarioReportStructureService.save(scenario, report.getId(), request.getConfig() != null ? request.getConfig().getReportType() : null);
|
MsTestElement testElement = request.getTestElement().getHashTree().get(0).getHashTree().get(0);
|
||||||
|
if (testElement != null) {
|
||||||
|
scenario.setName(testElement.getName());
|
||||||
|
scenario.setScenarioDefinition(JSON.toJSONString(testElement));
|
||||||
|
apiScenarioReportStructureService.save(scenario, report.getId(), request.getConfig() != null ? request.getConfig().getReportType() : null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,16 +78,8 @@ public class ApiScenarioReportStructureService {
|
||||||
JSONObject element = JSON.parseObject(apiScenario.getScenarioDefinition());
|
JSONObject element = JSON.parseObject(apiScenario.getScenarioDefinition());
|
||||||
StepTreeDTO dto = null;
|
StepTreeDTO dto = null;
|
||||||
if (element != null && element.getBoolean("enable")) {
|
if (element != null && element.getBoolean("enable")) {
|
||||||
String referenced = element.getString("referenced");
|
element = getRefElement(element);
|
||||||
String type = element.getString("type");
|
String type = element.getString("type");
|
||||||
if (StringUtils.equals(referenced, MsTestElementConstants.REF.name())) {
|
|
||||||
if (StringUtils.equals(element.getString("type"), "scenario")) {
|
|
||||||
ApiScenarioWithBLOBs scenarioWithBLOBs = CommonBeanFactory.getBean(ApiScenarioMapper.class).selectByPrimaryKey(element.getString("id"));
|
|
||||||
if (scenarioWithBLOBs != null) {
|
|
||||||
element = JSON.parseObject(scenarioWithBLOBs.getScenarioDefinition());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
String resourceId = "JSR223Processor".equals(type) ? element.getString("resourceId") : element.getString("id");
|
String resourceId = "JSR223Processor".equals(type) ? element.getString("resourceId") : element.getString("id");
|
||||||
if (StringUtils.equals(reportType, RunModeConstants.SET_REPORT.toString())) {
|
if (StringUtils.equals(reportType, RunModeConstants.SET_REPORT.toString())) {
|
||||||
if (StringUtils.isNotEmpty(resourceId) && StringUtils.isNotEmpty(apiScenario.getId()) && !resourceId.contains(apiScenario.getId())) {
|
if (StringUtils.isNotEmpty(resourceId) && StringUtils.isNotEmpty(apiScenario.getId()) && !resourceId.contains(apiScenario.getId())) {
|
||||||
|
@ -104,19 +96,24 @@ public class ApiScenarioReportStructureService {
|
||||||
return dto;
|
return dto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static JSONObject getRefElement(JSONObject element) {
|
||||||
|
String referenced = element.getString("referenced");
|
||||||
|
if (StringUtils.equals(referenced, MsTestElementConstants.REF.name())) {
|
||||||
|
if (StringUtils.equals(element.getString("type"), "scenario")) {
|
||||||
|
ApiScenarioWithBLOBs scenarioWithBLOBs = CommonBeanFactory.getBean(ApiScenarioMapper.class).selectByPrimaryKey(element.getString("id"));
|
||||||
|
if (scenarioWithBLOBs != null) {
|
||||||
|
return JSON.parseObject(scenarioWithBLOBs.getScenarioDefinition());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
public static void dataFormatting(JSONArray hashTree, StepTreeDTO dto, String id, String reportType) {
|
public static void dataFormatting(JSONArray hashTree, StepTreeDTO dto, String id, String reportType) {
|
||||||
for (int i = 0; i < hashTree.size(); i++) {
|
for (int i = 0; i < hashTree.size(); i++) {
|
||||||
JSONObject element = hashTree.getJSONObject(i);
|
JSONObject element = hashTree.getJSONObject(i);
|
||||||
if (element != null && element.getBoolean("enable")) {
|
if (element != null && element.getBoolean("enable")) {
|
||||||
String referenced = element.getString("referenced");
|
element = getRefElement(element);
|
||||||
if (StringUtils.equals(referenced, MsTestElementConstants.REF.name())) {
|
|
||||||
if (StringUtils.equals(element.getString("type"), "scenario")) {
|
|
||||||
ApiScenarioWithBLOBs scenarioWithBLOBs = CommonBeanFactory.getBean(ApiScenarioMapper.class).selectByPrimaryKey(element.getString("id"));
|
|
||||||
if (scenarioWithBLOBs != null) {
|
|
||||||
element = JSON.parseObject(scenarioWithBLOBs.getScenarioDefinition());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
String type = element.getString("type");
|
String type = element.getString("type");
|
||||||
String resourceId = "JSR223Processor".equals(type) ? element.getString("resourceId") : element.getString("id");
|
String resourceId = "JSR223Processor".equals(type) ? element.getString("resourceId") : element.getString("id");
|
||||||
if (StringUtils.equals(reportType, RunModeConstants.SET_REPORT.toString())) {
|
if (StringUtils.equals(reportType, RunModeConstants.SET_REPORT.toString())) {
|
||||||
|
@ -217,6 +214,11 @@ public class ApiScenarioReportStructureService {
|
||||||
dto.setErrorCode(reportResults.get(0).getErrorCode());
|
dto.setErrorCode(reportResults.get(0).getErrorCode());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (StringUtils.isNotEmpty(dto.getType()) && requests.contains(dto.getType()) && dto.getValue() == null) {
|
||||||
|
RequestResult requestResult = new RequestResult();
|
||||||
|
requestResult.setName(dto.getLabel());
|
||||||
|
dto.setValue(requestResult);
|
||||||
|
}
|
||||||
if (CollectionUtils.isNotEmpty(dto.getChildren())) {
|
if (CollectionUtils.isNotEmpty(dto.getChildren())) {
|
||||||
reportFormatting(dto.getChildren(), maps);
|
reportFormatting(dto.getChildren(), maps);
|
||||||
if (StringUtils.isEmpty(dto.getErrorCode())) {
|
if (StringUtils.isEmpty(dto.getErrorCode())) {
|
||||||
|
|
|
@ -283,7 +283,7 @@
|
||||||
:dialog-title="$t('test_track.case.batch_edit_case')"/>
|
:dialog-title="$t('test_track.case.batch_edit_case')"/>
|
||||||
<batch-move @refresh="search" @moveSave="moveSave" ref="testBatchMove"/>
|
<batch-move @refresh="search" @moveSave="moveSave" ref="testBatchMove"/>
|
||||||
<ms-run-mode @handleRunBatch="handleRunBatch" :request="runRequest" ref="runMode"/>
|
<ms-run-mode @handleRunBatch="handleRunBatch" :request="runRequest" ref="runMode"/>
|
||||||
<ms-run :debug="true" :environment="projectEnvMap" @runRefresh="runRefresh" :reportId="reportId" :saved="true"
|
<ms-run :debug="true" :environment="projectEnvMap" @runRefresh="runRefresh" :reportId="reportId" :saved="true" :executeType="'Saved'"
|
||||||
:environment-type="environmentType" :environment-group-id="envGroupId"
|
:environment-type="environmentType" :environment-group-id="envGroupId"
|
||||||
:run-data="debugData" ref="runTest"/>
|
:run-data="debugData" ref="runTest"/>
|
||||||
<ms-task-center ref="taskCenter" :show-menu="false"/>
|
<ms-task-center ref="taskCenter" :show-menu="false"/>
|
||||||
|
|
|
@ -12,6 +12,7 @@ export default {
|
||||||
components: {},
|
components: {},
|
||||||
props: {
|
props: {
|
||||||
environment: Map,
|
environment: Map,
|
||||||
|
executeType: String,
|
||||||
runMode: String,
|
runMode: String,
|
||||||
debug: Boolean,
|
debug: Boolean,
|
||||||
reportId: String,
|
reportId: String,
|
||||||
|
@ -70,7 +71,7 @@ export default {
|
||||||
testPlan.hashTree.push(threadGroup);
|
testPlan.hashTree.push(threadGroup);
|
||||||
this.sort(testPlan.hashTree);
|
this.sort(testPlan.hashTree);
|
||||||
let reqObj = {
|
let reqObj = {
|
||||||
id: this.reportId, reportId: this.reportId, scenarioName: this.runData.name, saved: this.saved, runMode: this.runMode,
|
id: this.reportId, reportId: this.reportId, scenarioName: this.runData.name, saved: this.saved, runMode: this.runMode, executeType: this.executeType,
|
||||||
scenarioId: this.runData.id, testElement: testPlan, projectId: getCurrentProjectID(), environmentMap: strMapToObj(map),
|
scenarioId: this.runData.id, testElement: testPlan, projectId: getCurrentProjectID(), environmentMap: strMapToObj(map),
|
||||||
environmentType: this.environmentType, environmentGroupId: this.environmentGroupId, environmentJson: JSON.stringify(strMapToObj(map))
|
environmentType: this.environmentType, environmentGroupId: this.environmentGroupId, environmentJson: JSON.stringify(strMapToObj(map))
|
||||||
};
|
};
|
||||||
|
|
|
@ -268,7 +268,7 @@
|
||||||
<api-environment-config v-if="type!=='detail'" ref="environmentConfig" @close="environmentConfigClose"/>
|
<api-environment-config v-if="type!=='detail'" ref="environmentConfig" @close="environmentConfigClose"/>
|
||||||
|
|
||||||
<!--执行组件-->
|
<!--执行组件-->
|
||||||
<ms-run :debug="true" v-if="type!=='detail'" :environment="projectEnvMap" :reportId="reportId" :saved="!debug"
|
<ms-run :debug="true" v-if="type!=='detail'" :environment="projectEnvMap" :reportId="reportId" :saved="saved"
|
||||||
:run-data="debugData" :environment-type="environmentType" :environment-group-id="envGroupId"
|
:run-data="debugData" :environment-type="environmentType" :environment-group-id="envGroupId"
|
||||||
@runRefresh="runRefresh" @errorRefresh="errorRefresh" ref="runTest"/>
|
@runRefresh="runRefresh" @errorRefresh="errorRefresh" ref="runTest"/>
|
||||||
<!-- 调试结果 -->
|
<!-- 调试结果 -->
|
||||||
|
@ -488,6 +488,7 @@ export default {
|
||||||
loading: false
|
loading: false
|
||||||
},
|
},
|
||||||
debug: false,
|
debug: false,
|
||||||
|
saved: false,
|
||||||
debugLoading: false,
|
debugLoading: false,
|
||||||
reqTotal: 0,
|
reqTotal: 0,
|
||||||
reqSuccess: 0,
|
reqSuccess: 0,
|
||||||
|
@ -1201,6 +1202,7 @@ export default {
|
||||||
this.clearResult(this.scenarioDefinition);
|
this.clearResult(this.scenarioDefinition);
|
||||||
this.clearNodeStatus(this.$refs.stepTree.root.childNodes);
|
this.clearNodeStatus(this.$refs.stepTree.root.childNodes);
|
||||||
this.sort();
|
this.sort();
|
||||||
|
this.saved = runScenario && runScenario.stepScenario ? false : true;
|
||||||
/*触发执行操作*/
|
/*触发执行操作*/
|
||||||
this.$refs.currentScenario.validate(async (valid) => {
|
this.$refs.currentScenario.validate(async (valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
|
|
|
@ -342,6 +342,7 @@ export default {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
forStatus() {
|
forStatus() {
|
||||||
|
this.reqSuccess = true;
|
||||||
if (this.request.result && this.request.result.length > 0) {
|
if (this.request.result && this.request.result.length > 0) {
|
||||||
this.request.result.forEach(item => {
|
this.request.result.forEach(item => {
|
||||||
item.requestResult.forEach(req => {
|
item.requestResult.forEach(req => {
|
||||||
|
|
|
@ -193,6 +193,7 @@ export default {
|
||||||
this.scenario.run = true;
|
this.scenario.run = true;
|
||||||
let runScenario = JSON.parse(JSON.stringify(this.scenario));
|
let runScenario = JSON.parse(JSON.stringify(this.scenario));
|
||||||
runScenario.hashTree = [this.scenario];
|
runScenario.hashTree = [this.scenario];
|
||||||
|
runScenario.stepScenario = true;
|
||||||
this.$emit('runScenario', runScenario);
|
this.$emit('runScenario', runScenario);
|
||||||
},
|
},
|
||||||
formatResult(map, scenarios) {
|
formatResult(map, scenarios) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<ms-run :debug="true" :environment="envMap" :reportId="reportId" :runMode="'DEFINITION'" :run-data="debugData" @runRefresh="runRefresh" ref="runTest"/>
|
<ms-run :debug="true" :environment="envMap" :reportId="reportId" :saved="false" :runMode="'DEFINITION'" :run-data="debugData" @runRefresh="runRefresh" ref="runTest"/>
|
||||||
<api-base-component :if-from-variable-advance="ifFromVariableAdvance" @copy="copyRow" @active="active(controller)" @remove="remove" :data="controller" :draggable="draggable" :is-max="isMax" :show-btn="showBtn" color="#02A7F0" background-color="#F4F4F5" :title="$t('api_test.automation.loop_controller')" v-loading="loading">
|
<api-base-component :if-from-variable-advance="ifFromVariableAdvance" @copy="copyRow" @active="active(controller)" @remove="remove" :data="controller" :draggable="draggable" :is-max="isMax" :show-btn="showBtn" color="#02A7F0" background-color="#F4F4F5" :title="$t('api_test.automation.loop_controller')" v-loading="loading">
|
||||||
|
|
||||||
<template v-slot:headerLeft>
|
<template v-slot:headerLeft>
|
||||||
|
@ -305,7 +305,7 @@ export default {
|
||||||
if (item.type === "HTTPSamplerProxy" || item.type === "DubboSampler" || item.type === "JDBCSampler" || item.type === "TCPSampler") {
|
if (item.type === "HTTPSamplerProxy" || item.type === "DubboSampler" || item.type === "JDBCSampler" || item.type === "TCPSampler") {
|
||||||
item.activeName = "0";
|
item.activeName = "0";
|
||||||
item.active = true;
|
item.active = true;
|
||||||
item.requestResult = this.requestResult.get(item.resourceId);
|
item.requestResult = this.requestResult.get(item.id);
|
||||||
}
|
}
|
||||||
if (item.hashTree && item.hashTree.length > 0) {
|
if (item.hashTree && item.hashTree.length > 0) {
|
||||||
this.setResult(item.hashTree);
|
this.setResult(item.hashTree);
|
||||||
|
|
Loading…
Reference in New Issue