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());