From a1b67bff16a977db611c723c3bcf6de115847d7a Mon Sep 17 00:00:00 2001
From: wxg0103 <727495428@qq.com>
Date: Mon, 15 Apr 2024 17:39:41 +0800
Subject: [PATCH] =?UTF-8?q?refactor(=E6=8E=A5=E5=8F=A3=E6=B5=8B=E8=AF=95):?=
=?UTF-8?q?=20=E4=BC=98=E5=8C=96=E5=89=8D=E5=90=8E=E7=BD=AEsql=E6=8F=90?=
=?UTF-8?q?=E5=8F=96=E7=94=9F=E6=88=90=E8=84=9A=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../api/mapper/ExtApiReportMapper.xml | 2 +-
.../api/mapper/ExtApiScenarioReportMapper.xml | 2 +-
.../processor/SqlProcessorConverter.java | 66 ++++++++++++-------
3 files changed, 43 insertions(+), 27 deletions(-)
diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiReportMapper.xml b/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiReportMapper.xml
index a757aeed1f..ec95355226 100644
--- a/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiReportMapper.xml
+++ b/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiReportMapper.xml
@@ -138,7 +138,7 @@
and api_report.create_user in
-
+
and api_report.update_user in
diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiScenarioReportMapper.xml b/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiScenarioReportMapper.xml
index 04473e2008..d389a3015d 100644
--- a/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiScenarioReportMapper.xml
+++ b/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiScenarioReportMapper.xml
@@ -264,7 +264,7 @@
and api_scenario_report.create_user in
-
+
and api_scenario_report.update_user in
diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/parser/jmeter/processor/SqlProcessorConverter.java b/backend/services/api-test/src/main/java/io/metersphere/api/parser/jmeter/processor/SqlProcessorConverter.java
index 5423ca9022..a1c3708148 100644
--- a/backend/services/api-test/src/main/java/io/metersphere/api/parser/jmeter/processor/SqlProcessorConverter.java
+++ b/backend/services/api-test/src/main/java/io/metersphere/api/parser/jmeter/processor/SqlProcessorConverter.java
@@ -13,8 +13,10 @@ import io.metersphere.sdk.util.LogUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.jmeter.extractor.JSR223PostProcessor;
+import org.apache.jmeter.modifiers.JSR223PreProcessor;
import org.apache.jmeter.protocol.jdbc.config.DataSourceElement;
import org.apache.jmeter.protocol.jdbc.processor.AbstractJDBCProcessor;
+import org.apache.jmeter.protocol.jdbc.processor.JDBCPreProcessor;
import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jorphan.collections.HashTree;
@@ -53,39 +55,53 @@ public abstract class SqlProcessorConverter extends MsProcessorConverter extractParams = sqlProcessor.getExtractParams()
+ .stream()
+ .filter(KeyValueParam::isValid)
+ .toList();
+ // 添加提取的变量
+ TestElement jdbcPostProcessor;
+ if (jdbcProcessor instanceof JDBCPreProcessor) {
+ jdbcPostProcessor = getJdbcProcessor(sqlProcessor.getName(), extractParams, JSR223PreProcessor.class);
+ } else {
+ jdbcPostProcessor = getJdbcProcessor(sqlProcessor.getName(), extractParams, JSR223PostProcessor.class);
+ }
+ if (jdbcPostProcessor != null) {
+ hashTree.add(jdbcPostProcessor);
+ }
+
} catch (Exception e) {
LogUtils.error(e);
}
-
- List extractParams = sqlProcessor.getExtractParams()
- .stream()
- .filter(KeyValueParam::isValid)
- .toList();
- // 添加提取的变量
- JSR223PostProcessor jdbcPostProcessor = getJdbcPostProcessor(sqlProcessor.getName(), extractParams);
- if (jdbcPostProcessor != null ) {
- hashTree.add(jdbcPostProcessor);
- }
}
- public JSR223PostProcessor getJdbcPostProcessor(String name, List extractParams) {
+ public T getJdbcProcessor(String name, List extractParams, Class elementType) {
if (CollectionUtils.isNotEmpty(extractParams)) {
- JSR223PostProcessor jsr223PostProcessor = new JSR223PostProcessor();
- jsr223PostProcessor.setName(name);
- jsr223PostProcessor.setProperty(TestElement.TEST_CLASS, jsr223PostProcessor.getClass().getSimpleName());
- jsr223PostProcessor.setProperty(TestElement.GUI_CLASS, SaveService.aliasToClass(JmeterAlias.TEST_BEAN_GUI));
- jsr223PostProcessor.setProperty(JmeterProperty.SCRIPT_LANGUAGE, ScriptLanguageType.BEANSHELL.name().toLowerCase());
+ T processor;
+ try {
+ processor = elementType.getDeclaredConstructor().newInstance();
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Failed to create processor: " + elementType.getSimpleName(), e);
+ }
+
+ processor.setName(name);
+ processor.setProperty(TestElement.TEST_CLASS, elementType.getName());
+ processor.setProperty(TestElement.GUI_CLASS, SaveService.aliasToClass(JmeterAlias.TEST_BEAN_GUI));
+ processor.setProperty(JmeterProperty.SCRIPT_LANGUAGE, ScriptLanguageType.BEANSHELL.name().toLowerCase());
+
StringBuilder scriptBuilder = new StringBuilder();
- extractParams.stream().filter(KeyValueParam::isValid)
- .forEach(keyValue -> {
- String script = """
- vars.put("%s","${%s}");
- """;
- scriptBuilder.append(String.format(script, keyValue.getKey(), keyValue.getValue()));
- });
- jsr223PostProcessor.setProperty(JmeterProperty.SCRIPT, scriptBuilder.toString());
- return jsr223PostProcessor;
+ for (KeyValueParam keyValue : extractParams) {
+ if (keyValue.isValid()) {
+ String script = "vars.put(\"%s\", \"%s\");\n";
+ scriptBuilder.append(String.format(script, keyValue.getKey(), keyValue.getValue()));
+ }
+ }
+
+ processor.setProperty(JmeterProperty.SCRIPT, scriptBuilder.toString());
+
+ return processor;
}
+
return null;
}