From 4d5b02c4cfa9457efad71e0ef0712a1549235446 Mon Sep 17 00:00:00 2001 From: liangdaliang Date: Wed, 19 Mar 2025 18:16:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=AF=B9=E8=B1=A1=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=BB=98=E8=AE=A4=E5=B8=B8=E7=94=A8=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/test/common/utils/MySQLExecutor.java | 13 ++++++-- .../service/impl/TestCaseServiceImpl.java | 30 +++++++++++++++++-- test-ui/src/views/test/case/detail/page1.vue | 5 +++- test-ui/src/views/test/case/detail/page2.vue | 19 +++++++++++- 4 files changed, 59 insertions(+), 8 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 c50bcf5..d43da20 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 @@ -22,14 +22,17 @@ public class MySQLExecutor { * @param user 数据库用户名 * @param password 数据库密码 * @param columnNameList 所有列名集合 + * @param sqlSpecialResultMap 存储sql特有的响应信息字段结果值 * @return 查询结果(每行数据为一个 Map) */ - public static List> executeQuery(String sql, String url, String user, String password, List columnNameList) { + public static List> executeQuery(String sql, String url, String user, String password, List columnNameList, Map sqlSpecialResultMap) { List> result = new ArrayList<>(); try (Connection connection = DriverManager.getConnection(url, user, password); Statement statement = connection.createStatement()) { - // 执行查询,限制最大100行 - try (ResultSet resultSet = statement.executeQuery(sql.replaceAll(";", "") + " LIMIT 100")) { + boolean isResultSet = statement.execute(sql.replaceAll(";", "")); + if (isResultSet) { + // 处理查询结果 + ResultSet resultSet = statement.getResultSet(); // 获取结果集的元数据 ResultSetMetaData metaData = resultSet.getMetaData(); int columnCount = metaData.getColumnCount(); @@ -52,6 +55,10 @@ public class MySQLExecutor { } result.add(row); } + } else { + // 处理非查询语句 + int rowsAffected = statement.getUpdateCount(); + sqlSpecialResultMap.put("${AFFECT_ROWS}", String.valueOf(rowsAffected)); } } catch (SQLException e) { throw new RuntimeException(e); 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 ba51654..a467b1d 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 @@ -280,8 +280,10 @@ public class TestCaseServiceImpl implements ITestCaseService } String url = "jdbc:mysql://"+ testDatasource.getHost() +":"+ testDatasource.getPort() +"/" + testDatasource.getDbName(); List columnNameList = new ArrayList<>(); + // sql查询特有字段结果存储 + Map sqlSpecialResultMap = new HashMap<>(); // 获取所有sql查询集合对象 - List> resultMapList = MySQLExecutor.executeQuery(testCaseStep.getSqlCommand(), url, testDatasource.getUsername(), testDatasource.getPassword(), columnNameList); + List> resultMapList = MySQLExecutor.executeQuery(testCaseStep.getSqlCommand(), url, testDatasource.getUsername(), testDatasource.getPassword(), columnNameList, sqlSpecialResultMap); if (!CollectionUtils.isEmpty(resultMapList)) { SqlResult sqlResult = new SqlResult(); sqlResult.setColumnNameList(columnNameList); @@ -293,7 +295,7 @@ public class TestCaseServiceImpl implements ITestCaseService testCaseResult.setSqlResult(gson.toJson(sqlResult)); // 处理参数提取 Map assignmentResultMap = new HashMap<>(); - String assignmentResult = this.dealDataSourceTestCaseStepAssignment(resultMapList, assignmentResultMap, assignment); + String assignmentResult = this.dealDataSourceTestCaseStepAssignment(resultMapList, assignmentResultMap, sqlSpecialResultMap, assignment); testCaseResult.setAssignment(assignmentResult); // 根据提取结果处理校验规则 String assertionResult = this.dealTestCaseStepAssertion(assignmentResultMap, assertion); @@ -522,10 +524,11 @@ public class TestCaseServiceImpl implements ITestCaseService * 处理数据源响应字段提取 * @param resultMapList * @param assignmentResultMap + * @param sqlSpecialResultMap 存储sql特有的响应信息字段结果值 * @param assignment * @return 处理后的提取结果 */ - private String dealDataSourceTestCaseStepAssignment(List> resultMapList, Map assignmentResultMap, String assignment) { + private String dealDataSourceTestCaseStepAssignment(List> resultMapList, Map assignmentResultMap, Map sqlSpecialResultMap, String assignment) { if (!StringUtils.isEmpty(assignment) && !"[]".equals(assignment)) { Gson gson = new Gson(); String responseBody = gson.toJson(resultMapList); @@ -547,6 +550,20 @@ public class TestCaseServiceImpl implements ITestCaseService String value = JMeterUtil.extractFieldValue(responseBody, path); ruleResult.setValue(value); } + } else if ("${RESULT_DATA_LENGTH}".equals(content)) { + if (!CollectionUtils.isEmpty(resultMapList)) { + String value = String.valueOf(resultMapList.size()); + ruleResult.setValue(value); + } else { + ruleResult.setValue("0"); + } + } else if ("${AFFECT_ROWS}".equals(content) || "${CHANGE_ROWS}".equals(content)) { + String affectRows = sqlSpecialResultMap.get("${AFFECT_ROWS}"); + if (affectRows == null) { + ruleResult.setValue("0"); + } else { + ruleResult.setValue(affectRows); + } } assignmentResultMap.put(rule.getName(), ruleResult.getValue()); ruleResultList.add(ruleResult); @@ -576,6 +593,13 @@ public class TestCaseServiceImpl implements ITestCaseService String source = rule.getSource(); String target = rule.getTarget(); String fn = rule.getFn(); + if (source.equals("${RESPONSE_BODY}")) { + source = "responseBody"; + } else if (source.equals("${RESPONSE_CODE}")) { + source = "responseCode"; + } else if (source.equals("${RESPONSE_HEADER}")) { + source = "responseHeader"; + } String value = assignmentResultMap.get(source); ruleResult.setValue(value); if ("等于".equals(fn)) { diff --git a/test-ui/src/views/test/case/detail/page1.vue b/test-ui/src/views/test/case/detail/page1.vue index c22ef36..c8faa0a 100644 --- a/test-ui/src/views/test/case/detail/page1.vue +++ b/test-ui/src/views/test/case/detail/page1.vue @@ -143,7 +143,10 @@ diff --git a/test-ui/src/views/test/case/detail/page2.vue b/test-ui/src/views/test/case/detail/page2.vue index c234cd0..301590c 100644 --- a/test-ui/src/views/test/case/detail/page2.vue +++ b/test-ui/src/views/test/case/detail/page2.vue @@ -64,7 +64,10 @@ @@ -116,6 +119,20 @@ export default { extract_object: [{ value: '${RESULT_DATA}', label: '${RESULT_DATA}' + },{ + value: '${RESULT_DATA_LENGTH}', + label: '${RESULT_DATA_LENGTH}' + }, + // { + // value: '${INSERT_ID}', + // label: '${INSERT_ID}' + // }, + { + value: '${AFFECT_ROWS}', + label: '${AFFECT_ROWS}' + },{ + value: '${CHANGE_ROWS}', + label: '${CHANGE_ROWS}' }], resultLog: { requestHeader: '',