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; }