校验对象增加默认常用选择项
This commit is contained in:
@@ -22,14 +22,17 @@ public class MySQLExecutor {
|
|||||||
* @param user 数据库用户名
|
* @param user 数据库用户名
|
||||||
* @param password 数据库密码
|
* @param password 数据库密码
|
||||||
* @param columnNameList 所有列名集合
|
* @param columnNameList 所有列名集合
|
||||||
|
* @param sqlSpecialResultMap 存储sql特有的响应信息字段结果值
|
||||||
* @return 查询结果(每行数据为一个 Map)
|
* @return 查询结果(每行数据为一个 Map)
|
||||||
*/
|
*/
|
||||||
public static List<Map<String, Object>> executeQuery(String sql, String url, String user, String password, List<String> columnNameList) {
|
public static List<Map<String, Object>> executeQuery(String sql, String url, String user, String password, List<String> columnNameList, Map<String, String> sqlSpecialResultMap) {
|
||||||
List<Map<String, Object>> result = new ArrayList<>();
|
List<Map<String, Object>> result = new ArrayList<>();
|
||||||
try (Connection connection = DriverManager.getConnection(url, user, password);
|
try (Connection connection = DriverManager.getConnection(url, user, password);
|
||||||
Statement statement = connection.createStatement()) {
|
Statement statement = connection.createStatement()) {
|
||||||
// 执行查询,限制最大100行
|
boolean isResultSet = statement.execute(sql.replaceAll(";", ""));
|
||||||
try (ResultSet resultSet = statement.executeQuery(sql.replaceAll(";", "") + " LIMIT 100")) {
|
if (isResultSet) {
|
||||||
|
// 处理查询结果
|
||||||
|
ResultSet resultSet = statement.getResultSet();
|
||||||
// 获取结果集的元数据
|
// 获取结果集的元数据
|
||||||
ResultSetMetaData metaData = resultSet.getMetaData();
|
ResultSetMetaData metaData = resultSet.getMetaData();
|
||||||
int columnCount = metaData.getColumnCount();
|
int columnCount = metaData.getColumnCount();
|
||||||
@@ -52,6 +55,10 @@ public class MySQLExecutor {
|
|||||||
}
|
}
|
||||||
result.add(row);
|
result.add(row);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// 处理非查询语句
|
||||||
|
int rowsAffected = statement.getUpdateCount();
|
||||||
|
sqlSpecialResultMap.put("${AFFECT_ROWS}", String.valueOf(rowsAffected));
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
|
|||||||
@@ -280,8 +280,10 @@ public class TestCaseServiceImpl implements ITestCaseService
|
|||||||
}
|
}
|
||||||
String url = "jdbc:mysql://"+ testDatasource.getHost() +":"+ testDatasource.getPort() +"/" + testDatasource.getDbName();
|
String url = "jdbc:mysql://"+ testDatasource.getHost() +":"+ testDatasource.getPort() +"/" + testDatasource.getDbName();
|
||||||
List<String> columnNameList = new ArrayList<>();
|
List<String> columnNameList = new ArrayList<>();
|
||||||
|
// sql查询特有字段结果存储
|
||||||
|
Map<String, String> sqlSpecialResultMap = new HashMap<>();
|
||||||
// 获取所有sql查询集合对象
|
// 获取所有sql查询集合对象
|
||||||
List<Map<String, Object>> resultMapList = MySQLExecutor.executeQuery(testCaseStep.getSqlCommand(), url, testDatasource.getUsername(), testDatasource.getPassword(), columnNameList);
|
List<Map<String, Object>> resultMapList = MySQLExecutor.executeQuery(testCaseStep.getSqlCommand(), 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);
|
||||||
@@ -293,7 +295,7 @@ public class TestCaseServiceImpl implements ITestCaseService
|
|||||||
testCaseResult.setSqlResult(gson.toJson(sqlResult));
|
testCaseResult.setSqlResult(gson.toJson(sqlResult));
|
||||||
// 处理参数提取
|
// 处理参数提取
|
||||||
Map<String, String> assignmentResultMap = new HashMap<>();
|
Map<String, String> assignmentResultMap = new HashMap<>();
|
||||||
String assignmentResult = this.dealDataSourceTestCaseStepAssignment(resultMapList, assignmentResultMap, assignment);
|
String assignmentResult = this.dealDataSourceTestCaseStepAssignment(resultMapList, assignmentResultMap, sqlSpecialResultMap, assignment);
|
||||||
testCaseResult.setAssignment(assignmentResult);
|
testCaseResult.setAssignment(assignmentResult);
|
||||||
// 根据提取结果处理校验规则
|
// 根据提取结果处理校验规则
|
||||||
String assertionResult = this.dealTestCaseStepAssertion(assignmentResultMap, assertion);
|
String assertionResult = this.dealTestCaseStepAssertion(assignmentResultMap, assertion);
|
||||||
@@ -522,10 +524,11 @@ public class TestCaseServiceImpl implements ITestCaseService
|
|||||||
* 处理数据源响应字段提取
|
* 处理数据源响应字段提取
|
||||||
* @param resultMapList
|
* @param resultMapList
|
||||||
* @param assignmentResultMap
|
* @param assignmentResultMap
|
||||||
|
* @param sqlSpecialResultMap 存储sql特有的响应信息字段结果值
|
||||||
* @param assignment
|
* @param assignment
|
||||||
* @return 处理后的提取结果
|
* @return 处理后的提取结果
|
||||||
*/
|
*/
|
||||||
private String dealDataSourceTestCaseStepAssignment(List<Map<String, Object>> resultMapList, Map<String, String> assignmentResultMap, 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 Gson();
|
||||||
String responseBody = gson.toJson(resultMapList);
|
String responseBody = gson.toJson(resultMapList);
|
||||||
@@ -547,6 +550,20 @@ public class TestCaseServiceImpl implements ITestCaseService
|
|||||||
String value = JMeterUtil.extractFieldValue(responseBody, path);
|
String value = JMeterUtil.extractFieldValue(responseBody, path);
|
||||||
ruleResult.setValue(value);
|
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());
|
assignmentResultMap.put(rule.getName(), ruleResult.getValue());
|
||||||
ruleResultList.add(ruleResult);
|
ruleResultList.add(ruleResult);
|
||||||
@@ -576,6 +593,13 @@ public class TestCaseServiceImpl implements ITestCaseService
|
|||||||
String source = rule.getSource();
|
String source = rule.getSource();
|
||||||
String target = rule.getTarget();
|
String target = rule.getTarget();
|
||||||
String fn = rule.getFn();
|
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);
|
String value = assignmentResultMap.get(source);
|
||||||
ruleResult.setValue(value);
|
ruleResult.setValue(value);
|
||||||
if ("等于".equals(fn)) {
|
if ("等于".equals(fn)) {
|
||||||
|
|||||||
@@ -143,7 +143,10 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="对象">
|
<el-table-column label="对象">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-input placeholder="请输入对象" v-model="form.assertion[scope.$index].source" @input="e => handleTableEdit(e, 'assertion', scope)" clearable/>
|
<el-select v-model="form.assertion[scope.$index].source" style="width: 100%;" filterable allow-create placeholder="请选择对象">
|
||||||
|
<el-option v-for="dict in extract_object" :key="dict.value" :label="dict.label" :value="dict.value" @change="e => handleTableEdit(e, 'assertion', scope)"/>
|
||||||
|
</el-select>
|
||||||
|
<!-- <el-input placeholder="请输入对象" v-model="form.assertion[scope.$index].source" @input="e => handleTableEdit(e, 'assertion', scope)" clearable/>-->
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="条件">
|
<el-table-column label="条件">
|
||||||
|
|||||||
@@ -64,7 +64,10 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="对象">
|
<el-table-column label="对象">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-input placeholder="请输入对象" v-model="form.assertion[scope.$index].source" @input="e => handleTableEdit(e, 'assertion', scope)" clearable/>
|
<el-select v-model="form.assertion[scope.$index].source" style="width: 100%;" filterable allow-create placeholder="请选择对象">
|
||||||
|
<el-option v-for="dict in extract_object" :key="dict.value" :label="dict.label" :value="dict.value" @change="e => handleTableEdit(e, 'assertion', scope)"/>
|
||||||
|
</el-select>
|
||||||
|
<!-- <el-input placeholder="请输入对象" v-model="form.assertion[scope.$index].source" @input="e => handleTableEdit(e, 'assertion', scope)" clearable/>-->
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="条件">
|
<el-table-column label="条件">
|
||||||
@@ -116,6 +119,20 @@ export default {
|
|||||||
extract_object: [{
|
extract_object: [{
|
||||||
value: '${RESULT_DATA}',
|
value: '${RESULT_DATA}',
|
||||||
label: '${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: {
|
resultLog: {
|
||||||
requestHeader: '',
|
requestHeader: '',
|
||||||
|
|||||||
Reference in New Issue
Block a user