diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/ElementUtil.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/ElementUtil.java index 352e6d63d1..1110807513 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/ElementUtil.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/ElementUtil.java @@ -76,7 +76,7 @@ public class ElementUtil { ApiTestEnvironmentService environmentService = CommonBeanFactory.getBean(ApiTestEnvironmentService.class); ApiTestEnvironmentWithBLOBs environment = environmentService.get(environmentId); if (environment != null && environment.getConfig() != null) { - if(StringUtils.isEmpty(projectId)){ + if (StringUtils.isEmpty(projectId)) { projectId = environment.getProjectId(); } if (StringUtils.equals(environment.getName(), MockConfigStaticData.MOCK_EVN_NAME)) { @@ -631,4 +631,55 @@ public class ElementUtil { } } } + + private static final List preOperates = new ArrayList() {{ + this.add("JSR223PreProcessor"); + this.add("JDBCPreProcessor"); + this.add("ConstantTimer"); + }}; + private static final List postOperates = new ArrayList() {{ + this.add("JSR223PostProcessor"); + this.add("JDBCPostProcessor"); + this.add("Extract"); + }}; + + public static List order(List elements) { + List elementList = new LinkedList<>(); + if (CollectionUtils.isNotEmpty(elements)) { + Map> groupMap = new LinkedHashMap<>(); + elements.forEach(item -> { + if ("Assertions".equals(item.getType())) { + if (groupMap.containsKey("Assertions")) { + groupMap.get("Assertions").add(item); + } else { + groupMap.put("Assertions", new LinkedList() {{ + this.add(item); + }}); + } + } else if (preOperates.contains(item.getType())) { + if (groupMap.containsKey("PreOperate")) { + groupMap.get("PreOperate").add(item); + } else { + groupMap.put("PreOperate", new LinkedList() {{ + this.add(item); + }}); + } + } else if (postOperates.contains(item.getType())) { + if (groupMap.containsKey("PostOperate")) { + groupMap.get("PostOperate").add(item); + } else { + groupMap.put("PostOperate", new LinkedList() {{ + this.add(item); + }}); + } + } else { + elementList.add(item); + } + }); + elementList.addAll(groupMap.get("PreOperate").stream().sorted(Comparator.comparing(MsTestElement::getIndex)).collect(Collectors.toList())); + elementList.addAll(groupMap.get("PostOperate").stream().sorted(Comparator.comparing(MsTestElement::getIndex)).collect(Collectors.toList())); + elementList.addAll(groupMap.get("Assertions").stream().sorted(Comparator.comparing(MsTestElement::getIndex)).collect(Collectors.toList())); + } + return elementList; + } } diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/MsJSR223Processor.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/MsJSR223Processor.java index a4d56b7a11..a87e2a61a3 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/MsJSR223Processor.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/MsJSR223Processor.java @@ -60,7 +60,7 @@ public class MsJSR223Processor extends MsTestElement { script = StringUtils.replace(script, RunningParamKeys.API_ENVIRONMENT_ID, "\"" + RunningParamKeys.RUNNING_PARAMS_PREFIX + this.getEnvironmentId() + ".\""); if (config.isOperating()) { - if (script.startsWith("io.metersphere.utils.JMeterVars.addVars")) { + if (StringUtils.isNotEmpty(script) && script.startsWith("io.metersphere.utils.JMeterVars.addVars")) { return; } } diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/post/MsJSR223PostProcessor.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/post/MsJSR223PostProcessor.java index d78de89e33..92ecf61de9 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/post/MsJSR223PostProcessor.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/post/MsJSR223PostProcessor.java @@ -58,7 +58,7 @@ public class MsJSR223PostProcessor extends MsTestElement { script = StringUtils.replace(script, RunningParamKeys.API_ENVIRONMENT_ID, "\"" + RunningParamKeys.RUNNING_PARAMS_PREFIX + this.getEnvironmentId() + ".\""); if(config.isOperating()){ - if (script.startsWith("io.metersphere.utils.JMeterVars.addVars")) { + if (StringUtils.isNotEmpty(script) && script.startsWith("io.metersphere.utils.JMeterVars.addVars")) { return; } } diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/pre/MsJSR223PreProcessor.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/pre/MsJSR223PreProcessor.java index 51951b84c6..25bbfa8bdc 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/pre/MsJSR223PreProcessor.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/pre/MsJSR223PreProcessor.java @@ -64,7 +64,7 @@ public class MsJSR223PreProcessor extends MsTestElement { script = StringUtils.replace(script, RunningParamKeys.API_ENVIRONMENT_ID, "\"" + RunningParamKeys.RUNNING_PARAMS_PREFIX + this.getEnvironmentId() + ".\""); } if (config.isOperating()) { - if (script.startsWith(JMeterVars.class.getCanonicalName())) { + if (StringUtils.isNotEmpty(script) && script.startsWith(JMeterVars.class.getCanonicalName())) { return; } } diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsDubboSampler.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsDubboSampler.java index 8f8a44e0bf..0bb2c9b624 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsDubboSampler.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsDubboSampler.java @@ -98,6 +98,7 @@ public class MsDubboSampler extends MsTestElement { final HashTree testPlanTree = tree.add(dubboSample(config)); if (CollectionUtils.isNotEmpty(hashTree)) { + hashTree = ElementUtil.order(hashTree); hashTree.forEach(el -> { el.toHashTree(testPlanTree, el.getHashTree(), config); }); diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java index 0e2431efd3..74076f85e4 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java @@ -255,6 +255,7 @@ public class MsHTTPSamplerProxy extends MsTestElement { } } if (CollectionUtils.isNotEmpty(hashTree)) { + hashTree = ElementUtil.order(hashTree); for (MsTestElement el : hashTree) { if (el.getEnvironmentId() == null) { if (this.getEnvironmentId() == null) { @@ -683,22 +684,22 @@ public class MsHTTPSamplerProxy extends MsTestElement { list.stream(). filter(KeyValue::isValid). filter(KeyValue::isEnable).forEach(keyValue -> { - try { - String value = StringUtils.isNotEmpty(keyValue.getValue()) && keyValue.getValue().startsWith("@") ? ScriptEngineUtils.buildFunctionCallString(keyValue.getValue()) : keyValue.getValue(); - HTTPArgument httpArgument = new HTTPArgument(keyValue.getName(), value); - if (keyValue.getValue() == null) { - httpArgument.setValue(""); - } - httpArgument.setAlwaysEncoded(keyValue.isUrlEncode()); - if (StringUtils.isNotBlank(keyValue.getContentType())) { - httpArgument.setContentType(keyValue.getContentType()); - } - arguments.addArgument(httpArgument); - } catch (Exception e) { - - } + try { + String value = StringUtils.isNotEmpty(keyValue.getValue()) && keyValue.getValue().startsWith("@") ? ScriptEngineUtils.buildFunctionCallString(keyValue.getValue()) : keyValue.getValue(); + HTTPArgument httpArgument = new HTTPArgument(keyValue.getName(), value); + if (keyValue.getValue() == null) { + httpArgument.setValue(""); } - ); + httpArgument.setAlwaysEncoded(keyValue.isUrlEncode()); + if (StringUtils.isNotBlank(keyValue.getContentType())) { + httpArgument.setContentType(keyValue.getContentType()); + } + arguments.addArgument(httpArgument); + } catch (Exception e) { + + } + } + ); return arguments; } diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsJDBCSampler.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsJDBCSampler.java index 0c7b349425..b73b4abf65 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsJDBCSampler.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsJDBCSampler.java @@ -172,6 +172,7 @@ public class MsJDBCSampler extends MsTestElement { JMeterScriptUtil.setScriptByEnvironmentConfig(envConfig, samplerHashTree, GlobalScriptFilterRequest.JDBC.name(), environmentId, config, false); if (CollectionUtils.isNotEmpty(hashTree)) { + hashTree = ElementUtil.order(hashTree); hashTree.forEach(el -> { el.toHashTree(samplerHashTree, el.getHashTree(), config); }); diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsTCPSampler.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsTCPSampler.java index a69480193e..bfe04251de 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsTCPSampler.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsTCPSampler.java @@ -169,6 +169,7 @@ public class MsTCPSampler extends MsTestElement { HashTreeUtil hashTreeUtil = new HashTreeUtil(); if (CollectionUtils.isNotEmpty(hashTree)) { + hashTree = ElementUtil.order(hashTree); EnvironmentConfig finalEnvConfig = envConfig; hashTree.forEach(el -> { if (el instanceof MsAssertions) { diff --git a/frontend/src/business/components/api/definition/components/step/JmxStep.vue b/frontend/src/business/components/api/definition/components/step/JmxStep.vue index 1619edaee6..026a0848b6 100644 --- a/frontend/src/business/components/api/definition/components/step/JmxStep.vue +++ b/frontend/src/business/components/api/definition/components/step/JmxStep.vue @@ -18,7 +18,7 @@ :value="item.id"> - + {{ $t('api_test.request.assertions.add') }}

@@ -340,6 +340,7 @@ export default { copyRow(row) { let obj = JSON.parse(JSON.stringify(row)); obj.id = getUUID(); + obj.resourceId = getUUID(); const index = this.request.hashTree.findIndex(d => d.id === row.id); if (index !== -1) { this.request.hashTree.splice(index, 0, obj);