数据库sql查询支持上下文变量
This commit is contained in:
@@ -5,6 +5,8 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author liangdaliang
|
* @author liangdaliang
|
||||||
@@ -66,6 +68,32 @@ public class MySQLExecutor {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String replaceSqlVariables(String sql, Map<String, String> 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) {
|
// public static void main(String[] args) {
|
||||||
// String url = "jdbc:mysql://47.103.142.5:3306/cmcf-test";
|
// String url = "jdbc:mysql://47.103.142.5:3306/cmcf-test";
|
||||||
// List<String> columnNameList = new ArrayList<>();
|
// List<String> columnNameList = new ArrayList<>();
|
||||||
|
|||||||
@@ -394,7 +394,10 @@ public class TestCaseServiceImpl implements ITestCaseService
|
|||||||
// sql查询特有字段结果存储
|
// sql查询特有字段结果存储
|
||||||
Map<String, String> sqlSpecialResultMap = new HashMap<>();
|
Map<String, String> sqlSpecialResultMap = new HashMap<>();
|
||||||
// 获取所有sql查询集合对象
|
// 获取所有sql查询集合对象
|
||||||
List<Map<String, Object>> 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<Map<String, Object>> resultMapList = MySQLExecutor.executeQuery(sqlCommand, url, testDatasource.getUsername(), testDatasource.getPassword(), columnNameList, sqlSpecialResultMap);
|
||||||
if (!CollectionUtils.isEmpty(resultMapList)) {
|
if (!CollectionUtils.isEmpty(resultMapList)) {
|
||||||
SqlResult sqlResult = new SqlResult();
|
SqlResult sqlResult = new SqlResult();
|
||||||
sqlResult.setColumnNameList(columnNameList);
|
sqlResult.setColumnNameList(columnNameList);
|
||||||
@@ -645,7 +648,10 @@ public class TestCaseServiceImpl implements ITestCaseService
|
|||||||
*/
|
*/
|
||||||
private String dealDataSourceTestCaseStepAssignment(List<Map<String, Object>> resultMapList, Map<String, String> assignmentResultMap, Map<String, String> sqlSpecialResultMap, String assignment) {
|
private String dealDataSourceTestCaseStepAssignment(List<Map<String, Object>> resultMapList, Map<String, String> assignmentResultMap, Map<String, String> sqlSpecialResultMap, String assignment) {
|
||||||
if (!StringUtils.isEmpty(assignment) && !"[]".equals(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);
|
String responseBody = gson.toJson(resultMapList);
|
||||||
Type ruleListType = new TypeToken<List<ExtractionRule>>() {}.getType();
|
Type ruleListType = new TypeToken<List<ExtractionRule>>() {}.getType();
|
||||||
// 将 JSON 字符串解析为 List<ExtractionRule>
|
// 将 JSON 字符串解析为 List<ExtractionRule>
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ public class TestCaseStepServiceImpl implements ITestCaseStepService {
|
|||||||
JmeterRequest jmeterRequest = new JmeterRequest();
|
JmeterRequest jmeterRequest = new JmeterRequest();
|
||||||
jmeterRequest.setId(id);
|
jmeterRequest.setId(id);
|
||||||
jmeterRequest.setUrl(url);
|
jmeterRequest.setUrl(url);
|
||||||
jmeterRequest.setPort(testCaseStep.getApiPort());
|
jmeterRequest.setPort(testCaseStep.getApiPort() == null ? 80 : testCaseStep.getApiPort());
|
||||||
jmeterRequest.setMethod(testCaseStep.getRequestMethod());
|
jmeterRequest.setMethod(testCaseStep.getRequestMethod());
|
||||||
jmeterRequest.setRequestBody(testCaseStep.getRequestBody());
|
jmeterRequest.setRequestBody(testCaseStep.getRequestBody());
|
||||||
jmeterRequest.setRequestParams(testCaseStep.getRequestParams());
|
jmeterRequest.setRequestParams(testCaseStep.getRequestParams());
|
||||||
|
|||||||
Reference in New Issue
Block a user