Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
kt-keystone
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Matrix
kt-keystone
Commits
5320067f
提交
5320067f
authored
3月 17, 2022
作者:
黄夏豪
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(base): 修复了一些执行器会异常终端的BUG
fix(base): 修改了执行器的返回值 fix(base): 修改了日志的发送格式
上级
a207f824
隐藏空白字符变更
内嵌
并排
正在显示
18 个修改的文件
包含
239 行增加
和
97 行删除
+239
-97
BaseTime.java
.../src/main/java/org/matrix/actuators/usecase/BaseTime.java
+37
-0
CaseActuator.java
.../main/java/org/matrix/actuators/usecase/CaseActuator.java
+106
-62
RunCaseResult.java
...main/java/org/matrix/actuators/usecase/RunCaseResult.java
+6
-4
TestCaseReport.java
...ain/java/org/matrix/actuators/usecase/TestCaseReport.java
+37
-0
TestDataExecuteResult.java
...a/org/matrix/actuators/usecase/TestDataExecuteResult.java
+16
-1
TestController.java
...n/java/org/matrix/database/controller/TestController.java
+3
-3
ExecutionHistory.java
...ain/java/org/matrix/database/entity/ExecutionHistory.java
+2
-0
ExecutionHistoryMapper.java
...va/org/matrix/database/mapper/ExecutionHistoryMapper.java
+2
-0
IExecutionRecordService.java
.../org/matrix/database/service/IExecutionRecordService.java
+2
-1
ExecutionRecordImpl.java
...org/matrix/database/service/impl/ExecutionRecordImpl.java
+2
-1
ExecutionHistoryVo.java
.../main/java/org/matrix/database/vo/ExecutionHistoryVo.java
+2
-0
ExecutionSocketHandler.java
...c/main/java/org/matrix/socket/ExecutionSocketHandler.java
+0
-1
LogQueueRuntime.java
...rc/main/java/org/matrix/socket/queue/LogQueueRuntime.java
+10
-7
CaseExecuteVo.java
...ase/src/main/java/org/matrix/socket/vo/CaseExecuteVo.java
+2
-0
ReporterData.java
...in/java/org/matrix/testNg/xml/reportXml/ReporterData.java
+6
-6
TestXml.java
.../src/main/java/org/matrix/testNg/xml/testXml/TestXml.java
+0
-5
ReporterUtils.java
kt-base/src/main/java/org/matrix/util/ReporterUtils.java
+3
-3
CaseActuatorTest.java
...test/java/org/matrix/actuators/http/CaseActuatorTest.java
+3
-3
没有找到文件。
kt-base/src/main/java/org/matrix/actuators/usecase/BaseTime.java
0 → 100644
浏览文件 @
5320067f
package
org
.
matrix
.
actuators
.
usecase
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
/**
* 为其他需要计算时间的类提供公共服务
*
* @author huangxiahao
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
BaseTime
{
LocalDateTime
startTime
;
LocalDateTime
endTime
;
public
Long
getDurationTimeMillis
()
{
Duration
duration
=
Duration
.
between
(
startTime
,
endTime
);
return
duration
.
toMillis
();
}
public
String
getDurationTimeStr
()
{
Duration
duration
=
Duration
.
between
(
startTime
,
endTime
);
long
days
=
duration
.
toDays
();
long
hours
=
duration
.
toHours
();
long
minutes
=
duration
.
toMinutes
();
long
millis
=
duration
.
toMillis
();
return
days
+
"天:"
+
hours
+
" 小时:"
+
minutes
+
" 分钟:"
+
millis
+
" 毫秒:"
;
}
}
kt-base/src/main/java/org/matrix/actuators/usecase/CaseActuator.java
浏览文件 @
5320067f
package
org
.
matrix
.
actuators
.
usecase
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
...
...
@@ -66,7 +67,7 @@ public class CaseActuator implements Actuator {
* @param envId 环境ID
* 执行测试用例,这个方法对内使用,由其他执行器调用
*/
public
Test
Case
ExecuteResult
executeTestCase
(
TestCaseBTO
testCaseBto
,
Long
envId
,
Long
projectId
)
{
public
Test
Data
ExecuteResult
executeTestCase
(
TestCaseBTO
testCaseBto
,
Long
envId
,
Long
projectId
)
{
try
{
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"开始执行用例!!"
);
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
String
.
format
(
"当前正在执行用例ID: %s 用例名: %s"
,
testCaseBto
.
getTestCase
().
getId
(),
testCaseBto
.
getTestCase
().
getName
()));
...
...
@@ -75,6 +76,7 @@ public class CaseActuator implements Actuator {
,
envId
,
projectId
,
null
,
MoveStrategy
.
PRE_MOVE
);
//向线程中设置当前正在执行的DataId
LogQueueRuntime
.
setTestData
(
testCaseBto
.
getTestData
().
getId
());
LocalDateTime
dataStartTime
=
LocalDateTime
.
now
();
//执行测试用例的本体内容
HttpResponseDetail
baseTestCaseResponseDetail
=
getHttpResponseDetail
(
envId
,
...
...
@@ -93,15 +95,18 @@ public class CaseActuator implements Actuator {
//执行后置动作
executeMove
(
testCaseBto
.
getTestCase
().
getMoveAfterTest
()
,
envId
,
projectId
,
baseTestCaseResponseDetail
.
getResponseBody
(),
MoveStrategy
.
AFT_MOVE
);
TestCaseExecuteResult
testCaseExecuteResult
=
new
TestCaseExecuteResult
(
TestDataExecuteResult
testDataExecuteResult
=
new
TestDataExecuteResult
(
dataStartTime
,
LocalDateTime
.
now
(),
true
,
testCaseBto
.
getTestCase
().
getId
(),
testCaseBto
.
getTestData
().
getId
(),
baseTestCaseResponseDetail
,
checkPointResult
);
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
JSON
.
toJSONString
(
test
Case
ExecuteResult
));
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
JSON
.
toJSONString
(
test
Data
ExecuteResult
));
//将线程中正在执行的DataId清除
LogQueueRuntime
.
clearTestData
();
return
test
Case
ExecuteResult
;
return
test
Data
ExecuteResult
;
}
finally
{
LogQueueRuntime
.
remove
(
ThreadUtil
.
currentThreadId
());
}
...
...
@@ -111,53 +116,73 @@ public class CaseActuator implements Actuator {
/**
* 执行一条测试用例的多条测试数据
*/
public
List
<
TestCaseExecuteResult
>
executeTestCases
(
TestCaseListDataBto
testCaseBto
,
Long
envId
,
Long
projectId
)
{
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"开始执行用例!!"
);
public
List
<
TestDataExecuteResult
>
executeTestCases
(
TestCaseListDataBto
testCaseBto
,
Long
envId
,
Long
projectId
)
{
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"[用例执行器] 开始执行用例!!"
);
List
<
TestDataExecuteResult
>
resultList
=
new
ArrayList
<>();
try
{
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
String
.
format
(
"
当前正在执行用例ID: %s 用例名: %s"
,
testCaseBto
.
getTestCase
().
getId
(),
testCaseBto
.
getTestCase
().
getName
()));
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
String
.
format
(
"[用例执行器]
当前正在执行用例ID: %s 用例名: %s"
,
testCaseBto
.
getTestCase
().
getId
(),
testCaseBto
.
getTestCase
().
getName
()));
//执行前置动作
executeMove
(
testCaseBto
.
getTestCase
().
getMoveAfterCase
()
,
envId
,
projectId
,
null
,
MoveStrategy
.
PRE_MOVE
);
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"
开始执行前置动作!!"
);
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"[用例执行器]
开始执行前置动作!!"
);
//执行测试用例的本体内容
List
<
TestCaseExecuteResult
>
resultList
=
new
ArrayList
<>();
for
(
TestData
testData
:
testCaseBto
.
getTestDataList
())
{
LocalDateTime
dataStartTime
=
LocalDateTime
.
now
();
//向线程中设置当前正在执行的DataId
LogQueueRuntime
.
setTestData
(
testData
.
getId
());
changeExecutionHistoryStatus
(
ExecutionHistoryStatus
.
RUN
);
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"开始执行数据组ID:"
+
testData
.
getId
());
HttpResponseDetail
baseTestCaseResponseDetail
=
getHttpResponseDetail
(
envId
,
projectId
,
testCaseBto
.
getTestCase
(),
testData
);
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"即将开始执行中置动作333"
);
//执行中置动作
executeMove
(
testCaseBto
.
getTestCase
().
getMoveAfterTest
()
,
envId
,
projectId
,
baseTestCaseResponseDetail
.
getResponseBody
(),
MoveStrategy
.
MID_MOVE
);
CheckPointResult
checkPointResult
=
getCheckPointResult
(
testCaseBto
.
getTestCase
(),
testData
,
envId
,
projectId
,
baseTestCaseResponseDetail
);
TestCaseExecuteResult
testCaseExecuteResult
=
new
TestCaseExecuteResult
(
testCaseBto
.
getTestCase
().
getId
(),
testData
.
getId
(),
baseTestCaseResponseDetail
,
checkPointResult
);
resultList
.
add
(
testCaseExecuteResult
);
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"用例执行结果:"
+
JSON
.
toJSONString
(
testCaseExecuteResult
));
//执行后置动作
executeMove
(
testCaseBto
.
getTestCase
().
getMoveAfterTest
()
,
envId
,
projectId
,
baseTestCaseResponseDetail
.
getResponseBody
(),
MoveStrategy
.
AFT_MOVE
);
changeExecutionHistoryStatus
(
ExecutionHistoryStatus
.
FINISH
);
//try catch 一下避免发生错误后导致循环进行不下去
try
{
changeExecutionHistoryStatus
(
ExecutionHistoryStatus
.
RUN
);
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"[用例执行器] 开始执行数据组ID:"
+
testData
.
getId
());
HttpResponseDetail
baseTestCaseResponseDetail
=
getHttpResponseDetail
(
envId
,
projectId
,
testCaseBto
.
getTestCase
(),
testData
);
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"[用例执行器] 即将开始执行中置动作"
);
//执行中置动作
executeMove
(
testCaseBto
.
getTestCase
().
getMoveAfterTest
()
,
envId
,
projectId
,
baseTestCaseResponseDetail
.
getResponseBody
(),
MoveStrategy
.
MID_MOVE
);
CheckPointResult
checkPointResult
=
getCheckPointResult
(
testCaseBto
.
getTestCase
(),
testData
,
envId
,
projectId
,
baseTestCaseResponseDetail
);
TestDataExecuteResult
testDataExecuteResult
=
new
TestDataExecuteResult
(
dataStartTime
,
LocalDateTime
.
now
(),
true
,
testCaseBto
.
getTestCase
().
getId
(),
testData
.
getId
(),
baseTestCaseResponseDetail
,
checkPointResult
);
resultList
.
add
(
testDataExecuteResult
);
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
"用例执行结果:"
+
JSON
.
toJSONString
(
testDataExecuteResult
));
//执行后置动作
executeMove
(
testCaseBto
.
getTestCase
().
getMoveAfterTest
()
,
envId
,
projectId
,
baseTestCaseResponseDetail
.
getResponseBody
(),
MoveStrategy
.
AFT_MOVE
);
changeExecutionHistoryStatus
(
ExecutionHistoryStatus
.
FINISH
);
}
catch
(
Exception
e
){
e
.
printStackTrace
();
TestDataExecuteResult
testDataExecuteResult
=
new
TestDataExecuteResult
(
dataStartTime
,
LocalDateTime
.
now
(),
true
,
testCaseBto
.
getTestCase
().
getId
(),
testData
.
getId
(),
null
,
null
);
resultList
.
add
(
testDataExecuteResult
);
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
String
.
format
(
"[用例执行器] 执行数据组ID:%s 数据组名称:%s 产生错误:%s"
,
testData
.
getId
(),
testData
.
getName
(),
e
.
getMessage
()));
}
}
return
resultList
;
}
finally
{
//将线程中正在执行的DataId清除
LogQueueRuntime
.
clearTestData
();
}
return
resultList
;
}
/**
...
...
@@ -172,13 +197,16 @@ public class CaseActuator implements Actuator {
private
void
executeMove
(
String
moveString
,
Long
envId
,
Long
projectId
,
String
caseResultData
,
MoveStrategy
strategy
)
{
String
[]
moveIds
=
StringUtils
.
isEmpty
(
moveString
)
?
new
String
[]{}
:
moveString
.
split
(
","
);
for
(
String
moveId
:
moveIds
)
{
getMoveActuator
().
runMove
(
Long
.
valueOf
(
moveId
),
envId
,
projectId
,
caseResultData
,
strategy
);
if
(!
StringUtils
.
isEmpty
(
moveId
)){
getMoveActuator
().
runMove
(
Long
.
valueOf
(
moveId
),
envId
,
projectId
,
caseResultData
,
strategy
);
}
}
}
...
...
@@ -228,11 +256,16 @@ public class CaseActuator implements Actuator {
* 外界如果执行测试用例的话请走这个接口,执行TestCase,并控制运行态日志池,进行日志的生成。
*/
public
RunCaseResult
runTestCase
(
WebSocketSession
session
,
CaseExecuteVo
caseExecuteVo
)
{
String
uniqueKey
=
UUID
.
randomUUID
().
toString
();
caseExecuteVo
.
setUniqueKey
(
uniqueKey
);
RunCaseResult
runCaseResult
=
new
RunCaseResult
();
runCaseResult
.
setStartTime
(
LocalDateTime
.
now
());
runCaseResult
.
setJobId
(
caseExecuteVo
.
getJobId
());
String
uniqueKey
=
UUID
.
randomUUID
().
toString
();
Long
currentThreadId
=
ThreadUtil
.
currentThreadId
();
try
{
if
(
session
!=
null
&&
session
.
isOpen
()){
session
.
sendMessage
(
new
TextMessage
(
JSONObject
.
toJSONString
(
caseExecuteVo
)));
}
//将websocketSession 加入到socket池子中
TestCaseExecuteSocketPool
.
add
(
currentThreadId
,
session
);
List
<
TestCaseListDataBto
>
testCaseListDataBtoList
=
caseExecuteVo
.
getTestCaseListDataBtoList
();
...
...
@@ -244,30 +277,40 @@ public class CaseActuator implements Actuator {
}
//建立执行历史(ExecutionHistory)
insertExecutionHistory
(
uniqueKey
,
caseExecuteVo
);
Map
<
Long
,
List
<
TestCaseExecuteResult
>>
resultMap
=
new
HashMap
<>();
for
(
TestCaseListDataBto
testCaseListDataBto
:
testCaseListDataBtoList
)
{
LogQueueRuntime
.
initTestCaseLog
(
caseExecuteVo
.
getJobId
(),
caseExecuteVo
.
getUserId
()
,
testCaseListDataBto
.
getTestCase
().
getId
()
,
caseExecuteVo
.
getType
()
,
uniqueKey
LocalDateTime
caseStartTime
=
LocalDateTime
.
now
();
try
{
LogQueueRuntime
.
initTestCaseLog
(
caseExecuteVo
.
getJobId
(),
caseExecuteVo
.
getUserId
()
,
testCaseListDataBto
.
getTestCase
().
getId
()
,
caseExecuteVo
.
getType
()
,
uniqueKey
);
//执行测试用例
if
(
testCaseListDataBto
.
getTestDataList
()!=
null
&&
testCaseListDataBto
.
getTestDataList
().
size
()>
0
){
List
<
TestDataExecuteResult
>
resultList
=
executeTestCases
(
testCaseListDataBto
,
caseExecuteVo
.
getEnvId
(),
caseExecuteVo
.
getProjectId
());
TestCaseReport
testCaseReport
=
new
TestCaseReport
(
caseStartTime
,
LocalDateTime
.
now
(),
testCaseListDataBto
.
getTestCase
().
getId
(),
true
,
resultList
);
//执行测试用例
if
(
testCaseListDataBto
.
getTestDataList
()!=
null
&&
testCaseListDataBto
.
getTestDataList
().
size
()>
0
){
List
<
TestCaseExecuteResult
>
resultList
=
executeTestCases
(
testCaseListDataBto
,
caseExecuteVo
.
getEnvId
(),
caseExecuteVo
.
getProjectId
());
resultMap
.
put
(
testCaseListDataBto
.
getTestCase
().
getId
(),
resultList
);
runCaseResult
.
setExecutionMap
(
resultMap
);
runCaseResult
.
getCaseReports
().
add
(
testCaseReport
);
}
}
catch
(
Exception
e
){
TestCaseReport
testCaseReport
=
new
TestCaseReport
(
caseStartTime
,
LocalDateTime
.
now
(),
testCaseListDataBto
.
getTestCase
().
getId
(),
false
,
null
);
runCaseResult
.
getCaseReports
().
add
(
testCaseReport
);
}
}
}
catch
(
GlobalException
e
)
{
}
catch
(
GlobalException
|
IOException
e
)
{
e
.
printStackTrace
();
try
{
if
(
session
!=
null
&&
session
.
isOpen
())
{
TestExecuteLog
currentTestExecute
=
LogQueueRuntime
.
getCurrentTestExecute
(
ThreadUtil
.
currentThreadId
());
if
(
currentTestExecute
!=
null
){
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
e
.
getMessage
());
LogQueueRuntime
.
addNewLog
(
this
.
getClass
(),
CASE_ACTUATOR
,
e
.
getMessage
());
}
else
{
//这里加-1.-1.-1是用来表明这里发出去的数据是不属于任何执行中的用例的
session
.
sendMessage
(
new
TextMessage
(
String
.
format
(
"-1.-1.-1.%s"
,
e
.
getMessage
())));
...
...
@@ -277,6 +320,7 @@ public class CaseActuator implements Actuator {
ioException
.
printStackTrace
();
}
}
finally
{
runCaseResult
.
setEndTime
(
LocalDateTime
.
now
());
//将数据库中的执行历史状态设置为完成
endExecutionHistory
();
//将本次产生的数据清除
...
...
@@ -284,7 +328,7 @@ public class CaseActuator implements Actuator {
//将本次产生的日志从执行状态设为停止状态
LogQueueRuntime
.
remove
(
currentThreadId
);
}
return
null
;
return
runCaseResult
;
}
public
void
insertExecutionHistory
(
String
uniqueKey
,
CaseExecuteVo
caseExecuteVo
)
{
...
...
kt-base/src/main/java/org/matrix/actuators/usecase/RunCaseResult.java
浏览文件 @
5320067f
package
org
.
matrix
.
actuators
.
usecase
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.util.HashMap
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
/**
* 当用户执行了一组测试用例后,会返回这个对象
* @author huangxiahao
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@Data
public
class
RunCaseResult
{
public
class
RunCaseResult
extends
BaseTime
{
private
Long
jobId
;
/**
* Key为caseId,List为case下的每一个执行结果
*/
private
Map
<
Long
,
List
<
TestCaseExecuteResult
>>
executionMap
=
new
HashMap
<>();
private
List
<
TestCaseReport
>
caseReports
=
new
ArrayList
<>();
}
kt-base/src/main/java/org/matrix/actuators/usecase/TestCaseReport.java
0 → 100644
浏览文件 @
5320067f
package
org
.
matrix
.
actuators
.
usecase
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
/**
* 当用户执行了一组测试用例后,会返回这个对象
* @author huangxiahao
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@Data
public
class
TestCaseReport
extends
BaseTime
{
private
Long
caseId
;
/**
* 执行状态
*/
private
Boolean
status
;
/**
* case下的每一个执行结果
*/
private
List
<
TestDataExecuteResult
>
dataExecuteResults
=
new
ArrayList
<>();
public
TestCaseReport
(
LocalDateTime
startTime
,
LocalDateTime
endTime
,
Long
caseId
,
Boolean
status
,
List
<
TestDataExecuteResult
>
dataExecuteResults
)
{
super
(
startTime
,
endTime
);
this
.
caseId
=
caseId
;
this
.
status
=
status
;
this
.
dataExecuteResults
=
dataExecuteResults
;
}
}
kt-base/src/main/java/org/matrix/actuators/usecase/Test
Case
ExecuteResult.java
→
kt-base/src/main/java/org/matrix/actuators/usecase/Test
Data
ExecuteResult.java
浏览文件 @
5320067f
...
...
@@ -2,16 +2,22 @@ package org.matrix.actuators.usecase;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.NoArgsConstructor
;
import
org.matrix.actuators.checkpoint.CheckPointResult
;
import
java.time.LocalDateTime
;
/**
* @author huangxiahao
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
TestCaseExecuteResult
{
public
class
TestDataExecuteResult
extends
BaseTime
{
private
Boolean
executionStatus
;
private
Long
caseId
;
...
...
@@ -21,4 +27,13 @@ public class TestCaseExecuteResult {
private
CheckPointResult
checkPointResult
;
public
TestDataExecuteResult
(
LocalDateTime
startTime
,
LocalDateTime
endTime
,
Boolean
executionStatus
,
Long
caseId
,
Long
dataId
,
BaseTestCaseResponseDetail
baseTestCaseRequestDetail
,
CheckPointResult
checkPointResult
)
{
super
(
startTime
,
endTime
);
this
.
executionStatus
=
executionStatus
;
this
.
caseId
=
caseId
;
this
.
dataId
=
dataId
;
this
.
baseTestCaseRequestDetail
=
baseTestCaseRequestDetail
;
this
.
checkPointResult
=
checkPointResult
;
}
}
kt-base/src/main/java/org/matrix/database/controller/TestController.java
浏览文件 @
5320067f
...
...
@@ -2,7 +2,7 @@ package org.matrix.database.controller;
import
com.alibaba.fastjson.JSONObject
;
import
org.matrix.actuators.usecase.CaseActuator
;
import
org.matrix.actuators.usecase.Test
Case
ExecuteResult
;
import
org.matrix.actuators.usecase.Test
Data
ExecuteResult
;
import
org.matrix.database.entity.ExecutionRecord
;
import
org.matrix.database.entity.TestCase
;
import
org.matrix.database.entity.TestCaseBTO
;
...
...
@@ -133,7 +133,7 @@ public class TestController {
TestCaseBTO
testCaseBTO
=
new
TestCaseBTO
();
testCaseBTO
.
setTestCase
(
testCase
);
testCaseBTO
.
setTestData
(
testData
);
Test
CaseExecuteResult
testCase
ExecuteResult
=
caseActuator
.
executeTestCase
(
testCaseBTO
,
1L
,
1L
);
System
.
out
.
println
(
test
Case
ExecuteResult
);
Test
DataExecuteResult
testData
ExecuteResult
=
caseActuator
.
executeTestCase
(
testCaseBTO
,
1L
,
1L
);
System
.
out
.
println
(
test
Data
ExecuteResult
);
}
}
kt-base/src/main/java/org/matrix/database/entity/ExecutionHistory.java
浏览文件 @
5320067f
...
...
@@ -40,6 +40,8 @@ public class ExecutionHistory extends BaseEntity {
private
Long
executionKey
;
private
String
url
;
private
ExecutionHistoryStatus
status
=
ExecutionHistoryStatus
.
READY
;
/**
...
...
kt-base/src/main/java/org/matrix/database/mapper/ExecutionHistoryMapper.java
浏览文件 @
5320067f
...
...
@@ -38,6 +38,7 @@ public interface ExecutionHistoryMapper extends BaseMapper<ExecutionHistory> {
"\tkeh.data_id dataId,\n"
+
"\tkeh.job_id jobId,\n"
+
"\tkeh.execution_key executionKey,\n"
+
"\tkeh.url url,\n"
+
"\tIF(MIN( keh.`status` )= 0 or MIN( keh.`status` ) = 1,1,MAX(keh.`status`)) `status`,\n"
+
"\tktc.`name` caseName,\n"
+
"\tktd.`name` dataName,"
+
...
...
@@ -79,6 +80,7 @@ public interface ExecutionHistoryMapper extends BaseMapper<ExecutionHistory> {
"\tkeh.case_id caseId,\n"
+
"\tkeh.data_id dataId,\n"
+
"\tkeh.job_id jobId,\n"
+
"\tkeh.url url,\n"
+
"\tkeh.execution_key executionKey,\n"
+
"IF\n"
+
"\t(\n"
+
...
...
kt-base/src/main/java/org/matrix/database/service/IExecutionRecordService.java
浏览文件 @
5320067f
...
...
@@ -29,8 +29,9 @@ public interface IExecutionRecordService extends IService<ExecutionRecord> {
* 新增执行记录日志
* @param testExecuteLog 用例日志临时存储对象
* @param log 日志内容
* @return 刚才新增的东西
*/
voi
d
addExecutionRecord
(
TestExecuteLog
testExecuteLog
,
String
log
);
ExecutionRecor
d
addExecutionRecord
(
TestExecuteLog
testExecuteLog
,
String
log
);
/**
* 根据uniqueKey将对应的执行记录修改为目标状态
...
...
kt-base/src/main/java/org/matrix/database/service/impl/ExecutionRecordImpl.java
浏览文件 @
5320067f
...
...
@@ -25,11 +25,12 @@ public class ExecutionRecordImpl extends ServiceImpl<ExecutionRecordMapper, Exec
IDataSourceService
iDataSourceService
;
@Override
public
voi
d
addExecutionRecord
(
TestExecuteLog
testExecuteLog
,
String
log
)
{
public
ExecutionRecor
d
addExecutionRecord
(
TestExecuteLog
testExecuteLog
,
String
log
)
{
ExecutionRecord
executionRecord
=
new
ExecutionRecord
();
BeanUtils
.
copyProperties
(
testExecuteLog
,
executionRecord
);
executionRecord
.
setLog
(
log
);
this
.
save
(
executionRecord
);
return
executionRecord
;
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
...
kt-base/src/main/java/org/matrix/database/vo/ExecutionHistoryVo.java
浏览文件 @
5320067f
...
...
@@ -27,4 +27,6 @@ public class ExecutionHistoryVo extends ExecutionHistory {
private
LocalDateTime
endTime
;
private
String
url
;
}
kt-base/src/main/java/org/matrix/socket/ExecutionSocketHandler.java
浏览文件 @
5320067f
...
...
@@ -94,7 +94,6 @@ public class ExecutionSocketHandler extends TextWebSocketHandler {
if
(
testCaseList
.
size
()>
0
){
caseExecuteVo
.
setProjectId
(
testCaseList
.
get
(
0
).
getProjectId
());
}
session
.
sendMessage
(
new
TextMessage
(
JSONObject
.
toJSONString
(
caseExecuteVo
)));
caseActuator
.
runTestCase
(
session
,
caseExecuteVo
);
}
else
if
(
SocketType
.
TEST_CASE_MONITOR
.
equals
(
socketVo
.
getSocketType
()))
{
ExecuteMonitorVo
caseExecuteVo
=
JSON
.
parseObject
(
payload
,
ExecuteMonitorVo
.
class
);
...
...
kt-base/src/main/java/org/matrix/socket/queue/LogQueueRuntime.java
浏览文件 @
5320067f
...
...
@@ -5,6 +5,7 @@ import cn.hutool.log.level.Level;
import
com.alibaba.fastjson.JSONObject
;
import
org.matrix.actuators.sql.SqlExpActuator
;
import
org.matrix.actuators.util.ThreadUtil
;
import
org.matrix.database.entity.ExecutionRecord
;
import
org.matrix.database.service.IExecutionRecordService
;
import
org.matrix.enums.ModuleType
;
import
org.matrix.exception.GlobalException
;
...
...
@@ -41,8 +42,8 @@ public class LogQueueRuntime {
return
EXECUTION_RECORD_SERVICE
;
}
public
static
voi
d
addExecutionRecord
(
TestExecuteLog
testExecuteLog
,
String
log
){
getExecutionRecordService
().
addExecutionRecord
(
testExecuteLog
,
log
);
public
static
ExecutionRecor
d
addExecutionRecord
(
TestExecuteLog
testExecuteLog
,
String
log
){
return
getExecutionRecordService
().
addExecutionRecord
(
testExecuteLog
,
log
);
}
...
...
@@ -71,8 +72,9 @@ public class LogQueueRuntime {
TestExecuteLog
testExecuteLog
=
LOG_MAP
.
get
(
currentThreadId
);
if
(
testExecuteLog
!=
null
){
testExecuteLog
.
addLog
(
logMsg
);
sendMessage
(
currentThreadId
,
testExecuteLog
.
getUniqueKey
(),
logMsg
);
addExecutionRecord
(
testExecuteLog
,
logString
);
String
messageToDb
=
JSONObject
.
toJSONString
(
logMsg
);
ExecutionRecord
executionRecord
=
addExecutionRecord
(
testExecuteLog
,
messageToDb
);
sendMessage
(
currentThreadId
,
testExecuteLog
.
getUniqueKey
(),
executionRecord
.
getId
(),
messageToDb
);
}
else
{
throw
new
GlobalException
(
"该线程中的TestCaseLog对象未初始化,请先调用put方法初始化对象"
);
}
...
...
@@ -82,18 +84,19 @@ public class LogQueueRuntime {
LOG_MAP
.
remove
(
threadId
);
}
public
static
void
sendMessage
(
Long
threadId
,
String
uniqueKey
,
Object
log
)
{
public
static
void
sendMessage
(
Long
threadId
,
String
uniqueKey
,
Long
logId
,
String
log
)
{
try
{
TestExecuteLog
testExecuteLog
=
LOG_MAP
.
get
(
threadId
);
// 测试任务ID.测试用例ID.测试数据ID
String
message
=
JSONObject
.
toJSONString
(
log
);
String
logMessage
=
String
.
format
(
"%s.%s.%s.%s"
"%s.%s.%s.%s
.%s
"
,
testExecuteLog
.
getTestJobId
()
,
testExecuteLog
.
getTestCaseId
()
,
testExecuteLog
.
getTestDataId
()
,
message
.
substring
(
1
,
message
.
length
()-
1
)
,
logId
,
message
);
//如果uniqueKey中存在监听的socket则向该socket发送消息
List
<
WebSocketSession
>
webSocketSessions
=
ExecutionSocketHandler
.
EXECUTE_MONITOR_SOCKET_POOL
.
get
(
uniqueKey
);
...
...
kt-base/src/main/java/org/matrix/socket/vo/CaseExecuteVo.java
浏览文件 @
5320067f
...
...
@@ -25,5 +25,7 @@ public class CaseExecuteVo extends SocketVo {
private
Long
jobId
=
-
1L
;
private
String
uniqueKey
;
private
List
<
TestCaseListDataBto
>
testCaseListDataBtoList
=
new
ArrayList
<>();
}
kt-base/src/main/java/org/matrix/testNg/xml/reportXml/ReporterData.java
浏览文件 @
5320067f
...
...
@@ -2,7 +2,7 @@ package org.matrix.testNg.xml.reportXml;
import
lombok.extern.slf4j.Slf4j
;
import
org.matrix.actuators.checkpoint.CheckPointResult
;
import
org.matrix.actuators.usecase.Test
Case
ExecuteResult
;
import
org.matrix.actuators.usecase.Test
Data
ExecuteResult
;
import
org.matrix.database.entity.TestCase
;
import
org.matrix.database.service.ITestCaseService
;
import
org.matrix.exception.GlobalException
;
...
...
@@ -71,18 +71,18 @@ public class ReporterData {
//工具类
ReportUnits
units
=
new
ReportUnits
();
for
(
ITestResult
result
:
sortByTime
(
map
.
getAllResults
()))
{
List
<
Test
CaseExecuteResult
>
testCase
ExecuteResults
;
Map
<
Long
,
List
<
Test
Case
ExecuteResult
>>
longListMap
=
ReporterUtils
.
userResultMap
.
get
(
1L
);
List
<
Test
DataExecuteResult
>
testData
ExecuteResults
;
Map
<
Long
,
List
<
Test
Data
ExecuteResult
>>
longListMap
=
ReporterUtils
.
userResultMap
.
get
(
1L
);
Set
<
Long
>
longs
=
longListMap
.
keySet
();
for
(
Long
caseId
:
longs
)
{
TestCase
testCase
=
java
.
util
.
Optional
.
of
(
testCaseService
.
getById
(
caseId
))
.
orElseThrow
(()
->
new
GlobalException
(
String
.
format
(
"没有找到id = %d 的TestCase"
,
caseId
)));
test
Case
ExecuteResults
=
ReporterUtils
.
resultMap
.
get
(
caseId
);
for
(
Test
CaseExecuteResult
testCaseExecuteResult
:
testCase
ExecuteResults
)
{
test
Data
ExecuteResults
=
ReporterUtils
.
resultMap
.
get
(
caseId
);
for
(
Test
DataExecuteResult
testDataExecuteResult
:
testData
ExecuteResults
)
{
data
.
setDuration
(
units
.
formatDuration
(
result
.
getEndMillis
()
-
result
.
getStartMillis
()));
data
.
setParams
(
units
.
getParams
(
result
));
CheckPointResult
checkPointResult
=
test
Case
ExecuteResult
.
getCheckPointResult
();
CheckPointResult
checkPointResult
=
test
Data
ExecuteResult
.
getCheckPointResult
();
data
.
setTestCaseName
(
testCase
.
getName
());
data
.
setOutput
(
Reporter
.
getOutput
(
result
));
data
.
setDependMethod
(
units
.
getDependMethods
(
result
));
...
...
kt-base/src/main/java/org/matrix/testNg/xml/testXml/TestXml.java
浏览文件 @
5320067f
...
...
@@ -6,8 +6,6 @@ import org.matrix.BaseBootApplication;
import
org.matrix.actuators.checkpoint.CheckPointActuator
;
import
org.matrix.actuators.httpclient.HttpClientActuator
;
import
org.matrix.actuators.usecase.CaseActuator
;
import
org.matrix.actuators.usecase.RunCaseResult
;
import
org.matrix.actuators.usecase.TestCaseExecuteResult
;
import
org.matrix.database.entity.TestCase
;
import
org.matrix.database.entity.TestCaseListDataBto
;
import
org.matrix.database.entity.TestData
;
...
...
@@ -15,7 +13,6 @@ import org.matrix.database.service.ITestCaseService;
import
org.matrix.database.service.ITestDataService
;
import
org.matrix.exception.GlobalException
;
import
org.matrix.socket.vo.CaseExecuteVo
;
import
org.matrix.util.ReporterUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.test.context.SpringBootTest
;
...
...
@@ -30,8 +27,6 @@ import java.util.Iterator;
import
java.util.List
;
import
java.util.Map
;
import
static
org
.
matrix
.
util
.
ReporterUtils
.
resultMap
;
/**
* 执行xml测试
...
...
kt-base/src/main/java/org/matrix/util/ReporterUtils.java
浏览文件 @
5320067f
package
org
.
matrix
.
util
;
import
org.matrix.actuators.usecase.Test
Case
ExecuteResult
;
import
org.matrix.actuators.usecase.Test
Data
ExecuteResult
;
import
org.matrix.testNg.web.entity.DataBeansJobVo
;
import
org.matrix.testNg.web.entity.DataBeansVo
;
...
...
@@ -13,9 +13,9 @@ import java.util.Map;
*/
public
class
ReporterUtils
{
public
static
Map
<
Long
,
Map
<
Long
,
List
<
Test
Case
ExecuteResult
>>>
userResultMap
=
new
HashMap
<>();
public
static
Map
<
Long
,
Map
<
Long
,
List
<
Test
Data
ExecuteResult
>>>
userResultMap
=
new
HashMap
<>();
public
static
Map
<
Long
,
List
<
Test
Case
ExecuteResult
>>
resultMap
=
new
HashMap
<>();
public
static
Map
<
Long
,
List
<
Test
Data
ExecuteResult
>>
resultMap
=
new
HashMap
<>();
public
static
Map
<
String
,
DataBeansVo
>
map
=
new
HashMap
<>();
...
...
kt-base/src/test/java/org/matrix/actuators/http/CaseActuatorTest.java
浏览文件 @
5320067f
...
...
@@ -6,7 +6,7 @@ import org.junit.jupiter.api.Test;
import
org.junit.runner.RunWith
;
import
org.matrix.actuators.usecase.CaseActuator
;
import
org.matrix.actuators.usecase.Test
Case
ExecuteResult
;
import
org.matrix.actuators.usecase.Test
Data
ExecuteResult
;
import
org.matrix.database.entity.TestCase
;
import
org.matrix.database.entity.TestCaseBTO
;
import
org.matrix.database.entity.TestData
;
...
...
@@ -103,8 +103,8 @@ class CaseActuatorTest {
TestCaseBTO
testCaseBTO
=
new
TestCaseBTO
();
testCaseBTO
.
setTestCase
(
testCase
);
testCaseBTO
.
setTestData
(
testData
);
Test
CaseExecuteResult
testCase
ExecuteResult
=
caseActuator
.
executeTestCase
(
testCaseBTO
,
1L
,
1L
);
System
.
out
.
println
(
test
Case
ExecuteResult
);
Test
DataExecuteResult
testData
ExecuteResult
=
caseActuator
.
executeTestCase
(
testCaseBTO
,
1L
,
1L
);
System
.
out
.
println
(
test
Data
ExecuteResult
);
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论