From 8db039e1b798b3709979d633df46ae9049fdb463 Mon Sep 17 00:00:00 2001 From: "Captain.B" Date: Fri, 25 Dec 2020 13:30:35 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Drps=20index=20?= =?UTF-8?q?=E8=B6=8A=E7=95=8C=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xml/reader/jmx/JmeterDocumentParser.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/backend/src/main/java/io/metersphere/performance/parse/xml/reader/jmx/JmeterDocumentParser.java b/backend/src/main/java/io/metersphere/performance/parse/xml/reader/jmx/JmeterDocumentParser.java index c81ceb1b0a..fe1f20966f 100644 --- a/backend/src/main/java/io/metersphere/performance/parse/xml/reader/jmx/JmeterDocumentParser.java +++ b/backend/src/main/java/io/metersphere/performance/parse/xml/reader/jmx/JmeterDocumentParser.java @@ -878,6 +878,24 @@ public class JmeterDocumentParser implements DocumentParser { } private void processVariableThroughputTimer(Element variableThroughputTimer) { + Object durations = context.getProperty("duration"); + Integer duration; + if (durations instanceof List) { + Object o = ((List) durations).get(0); + duration = (Integer) o; + ((List) durations).remove(0); + } else { + duration = (Integer) durations; + } + Object rpsLimits = context.getProperty("rpsLimit"); + String rpsLimit; + if (rpsLimits instanceof List) { + Object o = ((List) rpsLimits).get(0); + ((List) rpsLimits).remove(0); + rpsLimit = o.toString(); + } else { + rpsLimit = rpsLimits.toString(); + } if (variableThroughputTimer.getChildNodes().getLength() > 0) { final NodeList childNodes = variableThroughputTimer.getChildNodes(); for (int i = 0; i < childNodes.getLength(); i++) { @@ -903,27 +921,9 @@ public class JmeterDocumentParser implements DocumentParser { stringPropCount++; } else { stringPropCount = 0; - Object durations = context.getProperty("duration");// 传入的是分钟数, 需要转化成秒数 - Integer duration; - if (durations instanceof List) { - Object o = ((List) durations).get(0); - duration = (Integer) o; - ((List) durations).remove(0); - } else { - duration = (Integer) durations; - } prop.getFirstChild().setNodeValue(String.valueOf(duration)); continue; } - Object rpsLimits = context.getProperty("rpsLimit"); - String rpsLimit; - if (rpsLimits instanceof List) { - Object o = ((List) rpsLimits).get(0); - ((List) rpsLimits).remove(0); - rpsLimit = o.toString(); - } else { - rpsLimit = rpsLimits.toString(); - } prop.getFirstChild().setNodeValue(rpsLimit); } } From 6e3139d24ff0dc7da2c00c7279a2c0ecb17f9853 Mon Sep 17 00:00:00 2001 From: "Captain.B" Date: Fri, 25 Dec 2020 13:31:00 +0800 Subject: [PATCH 2/4] chore: Sync --- backend/src/main/java/io/metersphere/xpack | 2 +- frontend/src/business/components/xpack | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/io/metersphere/xpack b/backend/src/main/java/io/metersphere/xpack index 9f4a9bbf46..79343a2763 160000 --- a/backend/src/main/java/io/metersphere/xpack +++ b/backend/src/main/java/io/metersphere/xpack @@ -1 +1 @@ -Subproject commit 9f4a9bbf46fc1333dbcccea21f83e27e3ec10b1f +Subproject commit 79343a2763b014355f91fc21b2356a95ae437973 diff --git a/frontend/src/business/components/xpack b/frontend/src/business/components/xpack index 010ad7a5f0..8cda5c873c 160000 --- a/frontend/src/business/components/xpack +++ b/frontend/src/business/components/xpack @@ -1 +1 @@ -Subproject commit 010ad7a5f072a5e9d368c756a2473bbd20781433 +Subproject commit 8cda5c873cd9985c97adb34efacf507167fa4182 From 7645026dae709f530ed2b516cbf5c5c57ae4d03c Mon Sep 17 00:00:00 2001 From: fit2-zhao Date: Fri, 25 Dec 2020 13:57:36 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix(=E6=8E=A5=E5=8F=A3=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8C=96):=20=E4=BF=AE=E5=A4=8D=E7=8E=AF=E5=A2=83=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/definition/request/MsScenario.java | 4 ++-- .../dto/definition/request/MsTestElement.java | 22 ++++++++++++++++++- .../request/sampler/MsHTTPSamplerProxy.java | 5 +++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/MsScenario.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/MsScenario.java index 7e2a886767..19097a14bf 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/MsScenario.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/MsScenario.java @@ -82,14 +82,14 @@ public class MsScenario extends MsTestElement { ex.printStackTrace(); } } - // 场景变量 + // 场景变量和环境变量 tree.add(arguments(config)); + if (CollectionUtils.isNotEmpty(hashTree)) { for (MsTestElement el : hashTree) { el.toHashTree(tree, el.getHashTree(), config); } } - } private Arguments arguments(ParameterConfig config) { diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/MsTestElement.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/MsTestElement.java index e6906195aa..51bbf47d72 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/MsTestElement.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/MsTestElement.java @@ -20,13 +20,17 @@ import io.metersphere.api.dto.definition.request.sampler.MsHTTPSamplerProxy; import io.metersphere.api.dto.definition.request.sampler.MsJDBCSampler; import io.metersphere.api.dto.definition.request.sampler.MsTCPSampler; import io.metersphere.api.dto.definition.request.timer.MsConstantTimer; +import io.metersphere.api.dto.scenario.KeyValue; import io.metersphere.api.service.ApiDefinitionService; import io.metersphere.base.domain.ApiDefinitionWithBLOBs; import io.metersphere.commons.utils.CommonBeanFactory; import io.metersphere.commons.utils.LogUtil; import lombok.Data; +import org.apache.commons.collections.CollectionUtils; +import org.apache.jmeter.config.Arguments; import org.apache.jmeter.protocol.http.control.AuthManager; import org.apache.jmeter.save.SaveService; +import org.apache.jmeter.testelement.TestElement; import org.apache.jorphan.collections.HashTree; import org.apache.jorphan.collections.ListedHashTree; @@ -77,7 +81,7 @@ public abstract class MsTestElement { @JSONField(ordinal = 8) private boolean enable = true; @JSONField(ordinal = 9) - private String refType ; + private String refType; @JSONField(ordinal = 10) private LinkedList hashTree; @@ -133,6 +137,22 @@ public abstract class MsTestElement { ex.printStackTrace(); } } + + public Arguments addArguments(ParameterConfig config) { + if (config != null && config.getConfig() != null && config.getConfig().getCommonConfig() != null + && CollectionUtils.isNotEmpty(config.getConfig().getCommonConfig().getVariables())) { + Arguments arguments = new Arguments(); + arguments.setEnabled(true); + arguments.setName(name + "Variables"); + arguments.setProperty(TestElement.TEST_CLASS, Arguments.class.getName()); + arguments.setProperty(TestElement.GUI_CLASS, SaveService.aliasToClass("ArgumentsPanel")); + config.getConfig().getCommonConfig().getVariables().stream().filter(KeyValue::isValid).filter(KeyValue::isEnable).forEach(keyValue -> + arguments.addArgument(keyValue.getName(), keyValue.getValue(), "=") + ); + return arguments; + } + return null; + } } 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 44c7cbdea7..aa1e965ab6 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 @@ -114,6 +114,11 @@ public class MsHTTPSamplerProxy extends MsTestElement { config.setConfig(JSONObject.parseObject(environment.getConfig(), EnvironmentConfig.class)); } } + // 添加环境中的公共变量 + Arguments arguments = this.addArguments(config); + if (arguments != null) { + tree.add(this.addArguments(config)); + } try { if (config != null && config.getConfig() != null) { String url = config.getConfig().getHttpConfig().getProtocol() + "://" + config.getConfig().getHttpConfig().getSocket(); From bc79ae48f3142db587cae372a11e32f9ed534491 Mon Sep 17 00:00:00 2001 From: fit2-zhao Date: Fri, 25 Dec 2020 14:31:39 +0800 Subject: [PATCH 4/4] =?UTF-8?q?fix(=E6=8E=A5=E5=8F=A3=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8C=96):=20=E6=89=A7=E8=A1=8C=E5=9C=BA=E6=99=AF=E9=9D=9E?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E7=9A=84=E5=8F=82=E6=95=B0=E4=B8=8D=E5=81=9A?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../request/sampler/MsHTTPSamplerProxy.java | 22 +++++++++++++++---- .../api/service/ApiDefinitionService.java | 1 - 2 files changed, 18 insertions(+), 5 deletions(-) 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 aa1e965ab6..b3f5c2aedc 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 @@ -143,7 +143,7 @@ public class MsHTTPSamplerProxy extends MsTestElement { envPath += this.getPath(); } if (CollectionUtils.isNotEmpty(this.getRest()) && this.isRest()) { - envPath = getRestParameters(URLDecoder.decode(envPath, "UTF-8"), config); + envPath = getRestParameters(URLDecoder.decode(envPath, "UTF-8")); sampler.setPath(envPath); } if (CollectionUtils.isNotEmpty(this.getArguments())) { @@ -160,7 +160,7 @@ public class MsHTTPSamplerProxy extends MsTestElement { sampler.setProtocol(urlObject.getProtocol()); if (CollectionUtils.isNotEmpty(this.getRest()) && this.isRest()) { - sampler.setPath(getRestParameters(URLDecoder.decode(urlObject.getPath(), "UTF-8"), config)); + sampler.setPath(getRestParameters(URLDecoder.decode(urlObject.getPath(), "UTF-8"))); } if (CollectionUtils.isNotEmpty(this.getArguments())) { sampler.setPath(getPostQueryParameters(URLDecoder.decode(urlObject.getPath(), "UTF-8"))); @@ -203,7 +203,19 @@ public class MsHTTPSamplerProxy extends MsTestElement { } } - private String getRestParameters(String path, ParameterConfig config) { + private boolean isVariable(String path, String value) { + Pattern p = Pattern.compile("(\\$\\{)([\\w]+)(\\})"); + Matcher m = p.matcher(path); + while (m.find()) { + String group = m.group(2); + if (group.equals(value)) { + return true; + } + } + return false; + } + + private String getRestParameters(String path) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(path); stringBuffer.append("/"); @@ -216,7 +228,9 @@ public class MsHTTPSamplerProxy extends MsTestElement { Matcher m = p.matcher(path); while (m.find()) { String group = m.group(2); - path = path.replace("{" + group + "}", keyValueMap.get(group)); + if (!isVariable(path, group)) { + path = path.replace("{" + group + "}", keyValueMap.get(group)); + } } } catch (Exception ex) { ex.printStackTrace(); diff --git a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java index c5e699704d..736a653dd2 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java @@ -296,7 +296,6 @@ public class ApiDefinitionService { if (StringUtils.isNotBlank(request.getType()) && StringUtils.equals(request.getType(), ApiRunMode.API_PLAN.name())) { runMode = ApiRunMode.API_PLAN.name(); } - request.getTestElement().getJmx(hashTree); // 调用执行方法 jMeterService.runDefinition(request.getId(), hashTree, request.getReportId(), runMode); return request.getId();