提交 5320067f authored 作者: 黄夏豪's avatar 黄夏豪

fix(base): 修复了一些执行器会异常终端的BUG

fix(base): 修改了执行器的返回值 fix(base): 修改了日志的发送格式
上级 a207f824
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 + " 毫秒:";
}
}
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 TestCaseExecuteResult executeTestCase(TestCaseBTO testCaseBto, Long envId, Long projectId) {
public TestDataExecuteResult 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(testCaseExecuteResult));
LogQueueRuntime.addNewLog(this.getClass(),CASE_ACTUATOR, JSON.toJSONString(testDataExecuteResult));
//将线程中正在执行的DataId清除
LogQueueRuntime.clearTestData();
return testCaseExecuteResult;
return testDataExecuteResult;
} 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) {
......
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<>();
}
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;
}
}
......@@ -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;
}
}
......@@ -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.TestCaseExecuteResult;
import org.matrix.actuators.usecase.TestDataExecuteResult;
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);
TestCaseExecuteResult testCaseExecuteResult = caseActuator.executeTestCase(testCaseBTO, 1L, 1L);
System.out.println(testCaseExecuteResult);
TestDataExecuteResult testDataExecuteResult = caseActuator.executeTestCase(testCaseBTO, 1L, 1L);
System.out.println(testDataExecuteResult);
}
}
......@@ -40,6 +40,8 @@ public class ExecutionHistory extends BaseEntity {
private Long executionKey;
private String url;
private ExecutionHistoryStatus status = ExecutionHistoryStatus.READY;
/**
......
......@@ -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" +
......
......@@ -29,8 +29,9 @@ public interface IExecutionRecordService extends IService<ExecutionRecord> {
* 新增执行记录日志
* @param testExecuteLog 用例日志临时存储对象
* @param log 日志内容
* @return 刚才新增的东西
*/
void addExecutionRecord(TestExecuteLog testExecuteLog,String log);
ExecutionRecord addExecutionRecord(TestExecuteLog testExecuteLog,String log);
/**
* 根据uniqueKey将对应的执行记录修改为目标状态
......
......@@ -25,11 +25,12 @@ public class ExecutionRecordImpl extends ServiceImpl<ExecutionRecordMapper, Exec
IDataSourceService iDataSourceService;
@Override
public void addExecutionRecord(TestExecuteLog testExecuteLog,String log) {
public ExecutionRecord 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)
......
......@@ -27,4 +27,6 @@ public class ExecutionHistoryVo extends ExecutionHistory {
private LocalDateTime endTime;
private String url;
}
......@@ -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);
......
......@@ -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 void addExecutionRecord(TestExecuteLog testExecuteLog,String log){
getExecutionRecordService().addExecutionRecord(testExecuteLog,log);
public static ExecutionRecord 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);
......
......@@ -25,5 +25,7 @@ public class CaseExecuteVo extends SocketVo {
private Long jobId = -1L ;
private String uniqueKey;
private List<TestCaseListDataBto> testCaseListDataBtoList = new ArrayList<>();
}
......@@ -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.TestCaseExecuteResult;
import org.matrix.actuators.usecase.TestDataExecuteResult;
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<TestCaseExecuteResult> testCaseExecuteResults;
Map<Long, List<TestCaseExecuteResult>> longListMap = ReporterUtils.userResultMap.get(1L);
List<TestDataExecuteResult> testDataExecuteResults;
Map<Long, List<TestDataExecuteResult>> 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)));
testCaseExecuteResults = ReporterUtils.resultMap.get(caseId);
for (TestCaseExecuteResult testCaseExecuteResult : testCaseExecuteResults) {
testDataExecuteResults = ReporterUtils.resultMap.get(caseId);
for (TestDataExecuteResult testDataExecuteResult : testDataExecuteResults) {
data.setDuration(units.formatDuration(result.getEndMillis()
- result.getStartMillis()));
data.setParams(units.getParams(result));
CheckPointResult checkPointResult = testCaseExecuteResult.getCheckPointResult();
CheckPointResult checkPointResult = testDataExecuteResult.getCheckPointResult();
data.setTestCaseName(testCase.getName());
data.setOutput(Reporter.getOutput(result));
data.setDependMethod(units.getDependMethods(result));
......
......@@ -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测试
......
package org.matrix.util;
import org.matrix.actuators.usecase.TestCaseExecuteResult;
import org.matrix.actuators.usecase.TestDataExecuteResult;
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<TestCaseExecuteResult>>> userResultMap = new HashMap<>();
public static Map<Long, Map<Long, List<TestDataExecuteResult>>> userResultMap = new HashMap<>();
public static Map<Long, List<TestCaseExecuteResult>> resultMap = new HashMap<>();
public static Map<Long, List<TestDataExecuteResult>> resultMap = new HashMap<>();
public static Map<String, DataBeansVo> map = new HashMap<>();
......
......@@ -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.TestCaseExecuteResult;
import org.matrix.actuators.usecase.TestDataExecuteResult;
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);
TestCaseExecuteResult testCaseExecuteResult = caseActuator.executeTestCase(testCaseBTO,1L,1L);
System.out.println(testCaseExecuteResult);
TestDataExecuteResult testDataExecuteResult = caseActuator.executeTestCase(testCaseBTO,1L,1L);
System.out.println(testDataExecuteResult);
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论