From efa41a72175458873d2dffefca93c46211f3609a Mon Sep 17 00:00:00 2001 From: liangdaliang Date: Mon, 16 Jun 2025 17:04:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93sql=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=94=AF=E6=8C=81=E4=B8=8A=E4=B8=8B=E6=96=87=E5=8F=98?= =?UTF-8?q?=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/test/common/utils/MySQLExecutor.java | 28 +++++++++++++++++++ .../service/impl/TestCaseServiceImpl.java | 10 +++++-- .../service/impl/TestCaseStepServiceImpl.java | 2 +- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/test-common/src/main/java/com/test/common/utils/MySQLExecutor.java b/test-common/src/main/java/com/test/common/utils/MySQLExecutor.java index d43da20..0678dc6 100644 --- a/test-common/src/main/java/com/test/common/utils/MySQLExecutor.java +++ b/test-common/src/main/java/com/test/common/utils/MySQLExecutor.java @@ -5,6 +5,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @author liangdaliang @@ -66,6 +68,32 @@ public class MySQLExecutor { return result; } + public static String replaceSqlVariables(String sql, Map params) { + if (sql == null || params == null) { + return sql; + } + // 正则匹配 ${variable_name} + Pattern pattern = Pattern.compile("\\$\\{([^}]*)\\}"); + Matcher matcher = pattern.matcher(sql); + + StringBuilder sb = new StringBuilder(); + + while (matcher.find()) { + String key = matcher.group(1).trim(); // 获取变量名 + String replacement = params.get(key); // 从 map 中获取对应值 + + if (replacement != null) { + // 如果值存在,替换并加上单引号(适用于字符串) + // 如果你需要支持数字不加引号,请自行判断类型 + replacement = "'" + replacement.replace("'", "''") + "'"; + matcher.appendReplacement(sb, replacement); + } + } + + matcher.appendTail(sb); + return sb.toString(); + } + // public static void main(String[] args) { // String url = "jdbc:mysql://47.103.142.5:3306/cmcf-test"; // List columnNameList = new ArrayList<>(); diff --git a/test-test/src/main/java/com/test/test/service/impl/TestCaseServiceImpl.java b/test-test/src/main/java/com/test/test/service/impl/TestCaseServiceImpl.java index 0c778aa..c631955 100644 --- a/test-test/src/main/java/com/test/test/service/impl/TestCaseServiceImpl.java +++ b/test-test/src/main/java/com/test/test/service/impl/TestCaseServiceImpl.java @@ -394,7 +394,10 @@ public class TestCaseServiceImpl implements ITestCaseService // sql查询特有字段结果存储 Map sqlSpecialResultMap = new HashMap<>(); // 获取所有sql查询集合对象 - List> resultMapList = MySQLExecutor.executeQuery(testCaseStep.getSqlCommand(), url, testDatasource.getUsername(), testDatasource.getPassword(), columnNameList, sqlSpecialResultMap); + String sqlCommand = testCaseStep.getSqlCommand(); + sqlCommand = MySQLExecutor.replaceSqlVariables(sqlCommand, testCase.getContextResultMap()); + log.info("{}###Replace value sqlCommand:{}", testCase.getContextResultMap().keySet(), sqlCommand); + List> resultMapList = MySQLExecutor.executeQuery(sqlCommand, url, testDatasource.getUsername(), testDatasource.getPassword(), columnNameList, sqlSpecialResultMap); if (!CollectionUtils.isEmpty(resultMapList)) { SqlResult sqlResult = new SqlResult(); sqlResult.setColumnNameList(columnNameList); @@ -645,7 +648,10 @@ public class TestCaseServiceImpl implements ITestCaseService */ private String dealDataSourceTestCaseStepAssignment(List> resultMapList, Map assignmentResultMap, Map sqlSpecialResultMap, String assignment) { if (!StringUtils.isEmpty(assignment) && !"[]".equals(assignment)) { - Gson gson = new Gson(); + Gson gson = new GsonBuilder() + .registerTypeAdapter(Byte.class, new TinyIntTypeAdapter()) + .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeConverter()) + .create(); String responseBody = gson.toJson(resultMapList); Type ruleListType = new TypeToken>() {}.getType(); // 将 JSON 字符串解析为 List diff --git a/test-test/src/main/java/com/test/test/service/impl/TestCaseStepServiceImpl.java b/test-test/src/main/java/com/test/test/service/impl/TestCaseStepServiceImpl.java index 2694885..657af7a 100644 --- a/test-test/src/main/java/com/test/test/service/impl/TestCaseStepServiceImpl.java +++ b/test-test/src/main/java/com/test/test/service/impl/TestCaseStepServiceImpl.java @@ -216,7 +216,7 @@ public class TestCaseStepServiceImpl implements ITestCaseStepService { JmeterRequest jmeterRequest = new JmeterRequest(); jmeterRequest.setId(id); jmeterRequest.setUrl(url); - jmeterRequest.setPort(testCaseStep.getApiPort()); + jmeterRequest.setPort(testCaseStep.getApiPort() == null ? 80 : testCaseStep.getApiPort()); jmeterRequest.setMethod(testCaseStep.getRequestMethod()); jmeterRequest.setRequestBody(testCaseStep.getRequestBody()); jmeterRequest.setRequestParams(testCaseStep.getRequestParams());