提交 adab7aee authored 作者: Matrix's avatar Matrix

feat(SQL执行器): 将单引号去掉,由输入者来填写

上级 2766b230
...@@ -148,6 +148,7 @@ public class HttpClientActuator implements Actuator { ...@@ -148,6 +148,7 @@ public class HttpClientActuator implements Actuator {
endTime.getTime() - startTime.getTime() endTime.getTime() - startTime.getTime()
); );
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace();
throw new HttpRequestException(String.format("解析返回值失败,本次请求详细参数如下: %s ",httpRequestDetail)); throw new HttpRequestException(String.format("解析返回值失败,本次请求详细参数如下: %s ",httpRequestDetail));
} finally { } finally {
//关闭请求request //关闭请求request
......
...@@ -73,8 +73,8 @@ public class SqlExpActuator implements Actuator { ...@@ -73,8 +73,8 @@ public class SqlExpActuator implements Actuator {
if (varList.size() == 1) { if (varList.size() == 1) {
SqlRegularObject sqlReg = varList.get(0); SqlRegularObject sqlReg = varList.get(0);
DynamicVariable variable = varService.getByName(sqlReg.getVarName(), projectId) DynamicVariable variable = varService.getByName(sqlReg.getVarName(), projectId)
.orElseThrow(() -> new GlobalException("没有找到name = " + sqlReg.getVarName() + " 的动态变量")) .map(DynamicVariable::parseSqlDetail)
.parseSqlDetail(); .orElseThrow(() -> new GlobalException("没有找到name = " + sqlReg.getVarName() + " 的动态变量"));
return parseVar(envId, sqlReg.getIndex(), projectId, variable); return parseVar(envId, sqlReg.getIndex(), projectId, variable);
} else { } else {
throw new GlobalException("varNameString 参数请一次只输入一个动态变量! 你的提供的参数为: " + varNameString); throw new GlobalException("varNameString 参数请一次只输入一个动态变量! 你的提供的参数为: " + varNameString);
...@@ -91,15 +91,16 @@ public class SqlExpActuator implements Actuator { ...@@ -91,15 +91,16 @@ public class SqlExpActuator implements Actuator {
*/ */
public String parseVarById(Long varId, Long envId, Long projectId) { public String parseVarById(Long varId, Long envId, Long projectId) {
DynamicVariable dynamicVar = Optional.of(varService.getById(varId)) DynamicVariable dynamicVar = Optional.of(varService.getById(varId))
.orElseThrow(() -> new GlobalException(String.format("没有找到ID = %d 的动态变量", varId))) .map(DynamicVariable::parseSqlDetail)
.parseSqlDetail(); .orElseThrow(() -> new GlobalException(String.format("没有找到ID = %d 的动态变量", varId)));
return parseVar(envId, 0, projectId, dynamicVar); return parseVar(envId, 0, projectId, dynamicVar);
} }
/** /**
* 依据不同的变量类型调用不同的解析Handler * 依据不同的变量类型调用不同的解析Handler
* @param envId 环境ID - 环境共享变量需要 *
* @param envId 环境ID - 环境共享变量需要
* @param takenIndex 使用的结果集下标,递归传递 * @param takenIndex 使用的结果集下标,递归传递
* @param projectId 项目id,防止SQL表达式中带的嵌合动态变量名字重复 * @param projectId 项目id,防止SQL表达式中带的嵌合动态变量名字重复
* @param dynamicVar {@link DynamicVariable} * @param dynamicVar {@link DynamicVariable}
...@@ -116,7 +117,7 @@ public class SqlExpActuator implements Actuator { ...@@ -116,7 +117,7 @@ public class SqlExpActuator implements Actuator {
} else if (varType == HTTP_VARIABLE) { } else if (varType == HTTP_VARIABLE) {
return httpVarHandler(envId, projectId, dynamicVar); return httpVarHandler(envId, projectId, dynamicVar);
} else if (varType == CASE_VARIABLE) { } else if (varType == CASE_VARIABLE) {
return usecaseHandler(envId, projectId, dynamicVar); return caseHandler(envId, projectId, dynamicVar);
} else { } else {
throw new GlobalException("不支持的动态变量类型: " + varType); throw new GlobalException("不支持的动态变量类型: " + varType);
} }
...@@ -130,7 +131,7 @@ public class SqlExpActuator implements Actuator { ...@@ -130,7 +131,7 @@ public class SqlExpActuator implements Actuator {
* @param dynamicVar {@link DynamicVariable} * @param dynamicVar {@link DynamicVariable}
* @return 解析后的字符串 * @return 解析后的字符串
*/ */
private String usecaseHandler(Long envId, Long projectId, DynamicVariable dynamicVar) { private String caseHandler(Long envId, Long projectId, DynamicVariable dynamicVar) {
CaseActuator caseActuator = new CaseActuator(envId, projectId); CaseActuator caseActuator = new CaseActuator(envId, projectId);
long caseId = Long.parseLong(dynamicVar.getDetail()); long caseId = Long.parseLong(dynamicVar.getDetail());
TestCase testCase = Optional.of(caseService.getById(caseId)) TestCase testCase = Optional.of(caseService.getById(caseId))
...@@ -172,11 +173,11 @@ public class SqlExpActuator implements Actuator { ...@@ -172,11 +173,11 @@ public class SqlExpActuator implements Actuator {
// 如果还存在动态变量,则继续递归解析 // 如果还存在动态变量,则继续递归解析
for (SqlRegularObject sqlRegular : dynamicVarList) { for (SqlRegularObject sqlRegular : dynamicVarList) {
DynamicVariable recVar = varService.getByName(sqlRegular.getVarName(), projectId) DynamicVariable recVar = varService.getByName(sqlRegular.getVarName(), projectId)
.map(DynamicVariable::parseSqlDetail)
.orElseThrow(() -> new GlobalException( .orElseThrow(() -> new GlobalException(
String.format("没有找到项目id = %d 下,name = %s的变量", projectId, sqlRegular.getVarName()))) String.format("没有找到项目id = %d 下,name = %s的变量", projectId, sqlRegular.getVarName())));
.parseSqlDetail();
String calculatedValue = parseVar(envId, sqlRegular.getIndex(), projectId, recVar); String calculatedValue = parseVar(envId, sqlRegular.getIndex(), projectId, recVar);
sqlExp = sqlExp.replaceAll(String.format(REPLACE_VAR_EXP, sqlRegular.getVarName()), "'" + calculatedValue + "'"); sqlExp = sqlExp.replaceAll(String.format(REPLACE_VAR_EXP, sqlRegular.getVarName()), calculatedValue);
dynamicVar.getSqlExpDetail().setSqlExp(sqlExp); dynamicVar.getSqlExpDetail().setSqlExp(sqlExp);
} }
} }
......
package org.matrix.database.controller;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* TestController. 用于测试的控制器
*
* @author Matrix <xhyrzldf@gmail.com>
* @since 2022/1/21 at 4:53 PM
* Suffering is the most powerful teacher of life.
*/
@RestController
@RequestMapping("/test")
public class TestController {
/**
* 获得表名,用于测试http执行器的调用
*/
@GetMapping("/tableName")
public ResponseEntity<String> getTableName(@RequestParam String tableName) {
return ResponseEntity.ok(tableName);
}
}
...@@ -8,7 +8,6 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -8,7 +8,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.*; import lombok.*;
import org.matrix.actuators.sql.SqlExpDetail; import org.matrix.actuators.sql.SqlExpDetail;
import org.matrix.enums.DynamicVarType; import org.matrix.enums.DynamicVarType;
import org.matrix.exception.GlobalException;
/** /**
* <p> * <p>
...@@ -52,11 +51,8 @@ public class DynamicVariable extends BaseEntity { ...@@ -52,11 +51,8 @@ public class DynamicVariable extends BaseEntity {
public DynamicVariable parseSqlDetail() { public DynamicVariable parseSqlDetail() {
if (type == DynamicVarType.SQL_VARIABLE) { if (type == DynamicVarType.SQL_VARIABLE) {
this.sqlExpDetail = JSON.parseObject(this.detail, SqlExpDetail.class); this.sqlExpDetail = JSON.parseObject(this.detail, SqlExpDetail.class);
return this;
} else {
throw new GlobalException("只有SQL类型的变量才能解析详细内容");
} }
return this;
} }
......
...@@ -22,7 +22,7 @@ public class HttpClientActuatorTest { ...@@ -22,7 +22,7 @@ public class HttpClientActuatorTest {
1l 1l
); );
String json = "{\n" + String json = "{\n" +
" \"url\": \"http://127.0.0.1:13245/test/tableName\",\n" + " \"url\": \"http://127.0.0.1:8080/test/tableName\",\n" +
" \"method\": \"GET\",\n" + " \"method\": \"GET\",\n" +
" \"requestType\": \"QUERY\",\n" + " \"requestType\": \"QUERY\",\n" +
" \"requestBodies\": [\n" + " \"requestBodies\": [\n" +
......
...@@ -25,6 +25,7 @@ class SqlExpActuatorTest { ...@@ -25,6 +25,7 @@ class SqlExpActuatorTest {
void parseVarByName() { void parseVarByName() {
// todo 这里的递归校验要多写一点 // todo 这里的递归校验要多写一点
String result = sqlExpActuator.parseVarByName("${componentName}[2]", 1L, 1L); String result = sqlExpActuator.parseVarByName("${componentName}[2]", 1L, 1L);
System.out.println(result);
Assertions.assertNotNull(result); Assertions.assertNotNull(result);
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论