Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
kt-keystone
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Matrix
kt-keystone
Commits
e82e62c2
提交
e82e62c2
authored
3月 23, 2022
作者:
黄夏豪
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(base): 修复了case执行器,如果前端不给detail会出现空指针的情况
上级
05d9a191
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
80 行增加
和
11 行删除
+80
-11
MoveActuator.java
...src/main/java/org/matrix/actuators/move/MoveActuator.java
+3
-1
CaseActuator.java
.../main/java/org/matrix/actuators/usecase/CaseActuator.java
+18
-10
JsonFormatUtil.java
kt-base/src/main/java/org/matrix/util/JsonFormatUtil.java
+59
-0
没有找到文件。
kt-base/src/main/java/org/matrix/actuators/move/MoveActuator.java
浏览文件 @
e82e62c2
package
org
.
matrix
.
actuators
.
move
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.google.common.collect.Lists
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
...
...
@@ -23,6 +24,7 @@ import org.matrix.enums.MoveType;
import
org.matrix.exception.GlobalException
;
import
org.matrix.socket.queue.LogQueueRuntime
;
import
org.matrix.util.BeanFlattener
;
import
org.matrix.util.JsonFormatUtil
;
import
org.springframework.stereotype.Component
;
import
java.util.*
;
...
...
@@ -207,7 +209,7 @@ public class MoveActuator implements Actuator {
LogQueueRuntime
.
addNewLog
(
getClass
(),
MOVE_ACTUATOR
,
String
.
format
(
"当前执行的行为策略 = %s, 行为名 = %s, 动作名 = %s , 动作id = %d , 动作池里的变量 = %s"
,
strategy
.
getDes
(),
move
.
getName
(),
action
.
getName
(),
action
.
getId
(),
res
));
strategy
.
getDes
(),
move
.
getName
(),
action
.
getName
(),
action
.
getId
(),
JsonFormatUtil
.
formatJson
(
JSONObject
.
toJSONString
(
res
))
));
log
.
info
(
"[动作执行器] 动作执行完毕"
);
}
...
...
kt-base/src/main/java/org/matrix/actuators/usecase/CaseActuator.java
浏览文件 @
e82e62c2
...
...
@@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import
org.apache.commons.lang3.StringUtils
;
import
org.matrix.actuators.Actuator
;
import
org.matrix.actuators.checkpoint.CheckPointActuator
;
import
org.matrix.actuators.datasource.DataSourceDTO
;
import
org.matrix.actuators.datasource.IDataSourceService
;
import
org.matrix.actuators.httpclient.HttpClientActuator
;
import
org.matrix.actuators.move.MoveActuator
;
...
...
@@ -29,6 +28,7 @@ import org.matrix.socket.pool.TestCaseExecuteSocketPool;
import
org.matrix.socket.queue.LogQueueRuntime
;
import
org.matrix.socket.vo.CaseExecuteVo
;
import
org.matrix.socket.vo.TestExecuteLog
;
import
org.matrix.util.JsonFormatUtil
;
import
org.matrix.util.SpringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
...
...
@@ -86,11 +86,9 @@ public class CaseActuator implements Actuator {
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"[用例执行器] 开始执行前置动作!!"
);
executeMove
(
testCaseBto
.
getTestCase
().
getMoveBefore
()
,
envId
,
projectId
,
null
,
MoveStrategy
.
PRE_MOVE
);
//向线程中设置当前正在执行的DataId
LogQueueRuntime
.
setTestData
(
testCaseBto
.
getTestData
().
getId
());
LocalDateTime
dataStartTime
=
LocalDateTime
.
now
();
//执行测试用例的本体内容
HttpResponseDetail
baseTestCaseResponseDetail
=
getHttpRespon
seDetail
(
HttpResponseDetail
baseTestCaseResponseDetail
=
executionCa
seDetail
(
envId
,
projectId
,
testCaseBto
.
getTestCase
(),
...
...
@@ -116,8 +114,6 @@ public class CaseActuator implements Actuator {
baseTestCaseResponseDetail
,
checkPointResult
);
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
JSON
.
toJSONString
(
testDataExecuteResult
));
//将线程中正在执行的DataId清除
LogQueueRuntime
.
clearTestData
();
return
testDataExecuteResult
;
}
...
...
@@ -142,7 +138,7 @@ public class CaseActuator implements Actuator {
try
{
changeExecutionHistoryStatus
(
ExecutionHistoryStatus
.
RUN
);
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"[用例执行器] 开始执行数据组ID:"
+
testData
.
getId
());
HttpResponseDetail
baseTestCaseResponseDetail
=
getHttpRespon
seDetail
(
HttpResponseDetail
baseTestCaseResponseDetail
=
executionCa
seDetail
(
envId
,
projectId
,
testCaseBto
.
getTestCase
(),
...
...
@@ -166,7 +162,7 @@ public class CaseActuator implements Actuator {
checkPointResult
);
resultList
.
add
(
testDataExecuteResult
);
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"用例执行结果:"
+
J
SON
.
toJSONString
(
testDataExecuteResult
));
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"用例执行结果:"
+
J
sonFormatUtil
.
formatJson
(
JSONObject
.
toJSONString
(
testDataExecuteResult
)
));
//执行后置动作
executeMove
(
testCaseBto
.
getTestCase
().
getMoveAfterCase
()
,
envId
,
projectId
,
baseTestCaseResponseDetail
!=
null
?
baseTestCaseResponseDetail
.
getResponseBody
():
null
,
MoveStrategy
.
AFT_MOVE
);
...
...
@@ -246,13 +242,25 @@ public class CaseActuator implements Actuator {
return
new
CheckPointResult
();
}
private
HttpResponseDetail
getHttpResponseDetail
(
/**
* 根据Case的Detail进行Case的核心部分执行
* @param envId
* @param projectId
* @param testCase
* @param testData
* @return
*/
private
HttpResponseDetail
executionCaseDetail
(
Long
envId
,
Long
projectId
,
TestCase
testCase
,
TestData
testData
)
{
if
(
testCase
.
getType
().
equals
(
TestCaseTypeEnum
.
HTTP
.
getValue
()))
{
HttpRequestDetail
httpRequestDetail
=
JSON
.
parseObject
(
testData
.
getDetail
(),
HttpRequestDetail
.
class
);
if
(
httpRequestDetail
==
null
||
httpRequestDetail
.
getMethod
()==
null
||
httpRequestDetail
.
getRequestType
()==
null
){
throw
new
GlobalException
(
"HTTP请求发送失败,测试数据组中不存在请求数据"
);
}
return
httpClientActuator
.
sendHttpRequest
(
httpRequestDetail
,
envId
,
projectId
);
}
else
{
throw
new
GlobalException
(
"不支持当前测试用例的类型"
);
}
return
null
;
}
private
CheckPoint
getCheckPointEntity
(
TestData
testData
)
{
...
...
kt-base/src/main/java/org/matrix/util/JsonFormatUtil.java
0 → 100644
浏览文件 @
e82e62c2
package
org
.
matrix
.
util
;
import
com.alibaba.fastjson.JSONObject
;
/**
* 对JSON进行格式化
* @author huangxiahao
*/
public
class
JsonFormatUtil
{
public
static
String
formatJson
(
String
jsonString
)
{
//json 字符串
int
level
=
0
;
//存放格式化的json字符串
StringBuffer
jsonForMatStr
=
new
StringBuffer
();
//将字符串中的字符逐个按行输出
for
(
int
index
=
0
;
index
<
jsonString
.
length
();
index
++)
{
//获取s中的每个字符
char
c
=
jsonString
.
charAt
(
index
);
//level大于0并且jsonForMatStr中的最后一个字符为\n,jsonForMatStr加入
if
(
level
>
0
&&
'\n'
==
jsonForMatStr
.
charAt
(
jsonForMatStr
.
length
()
-
1
))
{
jsonForMatStr
.
append
(
getLevelStr
(
level
));
}
//遇到"{"和"["要增加空格和换行,遇到"}"和"]"要减少空格,以对应,遇到","要换行
switch
(
c
)
{
case
'{'
:
case
'['
:
jsonForMatStr
.
append
(
c
+
"\n"
);
level
++;
break
;
case
','
:
jsonForMatStr
.
append
(
c
+
"\n"
);
break
;
case
'}'
:
case
']'
:
jsonForMatStr
.
append
(
"\n"
);
level
--;
jsonForMatStr
.
append
(
getLevelStr
(
level
));
jsonForMatStr
.
append
(
c
);
break
;
default
:
jsonForMatStr
.
append
(
c
);
break
;
}
}
return
jsonForMatStr
.
toString
();
}
private
static
String
getLevelStr
(
int
level
)
{
StringBuffer
levelStr
=
new
StringBuffer
();
for
(
int
levelI
=
0
;
levelI
<
level
;
levelI
++)
{
levelStr
.
append
(
"\t"
);
}
return
levelStr
.
toString
();
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论