Merge branch 'master' of https://github.com/metersphere/metersphere
This commit is contained in:
commit
2802c2ccbb
|
@ -0,0 +1,5 @@
|
||||||
|
package io.metersphere.commons.constants;
|
||||||
|
|
||||||
|
public enum TestPlanReportStatus {
|
||||||
|
RUNNING, COMPLETED, SUCCESS, FAILED
|
||||||
|
}
|
|
@ -29,6 +29,7 @@ import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.lang.reflect.Array;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
|
@ -78,6 +79,13 @@ public class TestPlanReportService {
|
||||||
return returnList;
|
return returnList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成测试计划
|
||||||
|
* @param planId
|
||||||
|
* @param userId
|
||||||
|
* @param triggerMode
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public TestPlanReport genTestPlanReport(String planId, String userId,String triggerMode) {
|
public TestPlanReport genTestPlanReport(String planId, String userId,String triggerMode) {
|
||||||
TestPlan testPlan = testPlanMapper.selectByPrimaryKey(planId);
|
TestPlan testPlan = testPlanMapper.selectByPrimaryKey(planId);
|
||||||
|
|
||||||
|
@ -101,6 +109,7 @@ public class TestPlanReportService {
|
||||||
TestPlanReport testPlanReport = new TestPlanReport();
|
TestPlanReport testPlanReport = new TestPlanReport();
|
||||||
testPlanReport.setTestPlanId(planId);
|
testPlanReport.setTestPlanId(planId);
|
||||||
testPlanReport.setId(testPlanReportID);
|
testPlanReport.setId(testPlanReportID);
|
||||||
|
testPlanReport.setStatus(APITestStatus.Starting.name());
|
||||||
testPlanReport.setCreateTime(System.currentTimeMillis());
|
testPlanReport.setCreateTime(System.currentTimeMillis());
|
||||||
testPlanReport.setUpdateTime(System.currentTimeMillis());
|
testPlanReport.setUpdateTime(System.currentTimeMillis());
|
||||||
try {
|
try {
|
||||||
|
@ -244,13 +253,13 @@ public class TestPlanReportService {
|
||||||
component.afterBuild(testCaseReportMetricDTO);
|
component.afterBuild(testCaseReportMetricDTO);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.update(testPlanReport);
|
|
||||||
|
|
||||||
TestPlanReportDataExample example = new TestPlanReportDataExample();
|
TestPlanReportDataExample example = new TestPlanReportDataExample();
|
||||||
example.createCriteria().andTestPlanReportIdEqualTo(planReportId);
|
example.createCriteria().andTestPlanReportIdEqualTo(planReportId);
|
||||||
List<TestPlanReportDataWithBLOBs> testPlanReportDataList = testPlanReportDataMapper.selectByExampleWithBLOBs(example);
|
List<TestPlanReportDataWithBLOBs> testPlanReportDataList = testPlanReportDataMapper.selectByExampleWithBLOBs(example);
|
||||||
|
|
||||||
|
TestPlanReportDataWithBLOBs testPlanReportData = null;
|
||||||
if (!testPlanReportDataList.isEmpty()) {
|
if (!testPlanReportDataList.isEmpty()) {
|
||||||
TestPlanReportDataWithBLOBs testPlanReportData = testPlanReportDataList.get(0);
|
testPlanReportData = testPlanReportDataList.get(0);
|
||||||
testPlanReportData.setExecuteResult(JSONObject.toJSONString(testCaseReportMetricDTO.getExecuteResult()));
|
testPlanReportData.setExecuteResult(JSONObject.toJSONString(testCaseReportMetricDTO.getExecuteResult()));
|
||||||
testPlanReportData.setFailurTestCases(JSONObject.toJSONString(testCaseReportMetricDTO.getFailureTestCases()));
|
testPlanReportData.setFailurTestCases(JSONObject.toJSONString(testCaseReportMetricDTO.getFailureTestCases()));
|
||||||
testPlanReportData.setModuleExecuteResult(JSONArray.toJSONString(testCaseReportMetricDTO.getModuleExecuteResult()));
|
testPlanReportData.setModuleExecuteResult(JSONArray.toJSONString(testCaseReportMetricDTO.getModuleExecuteResult()));
|
||||||
|
@ -260,8 +269,49 @@ public class TestPlanReportService {
|
||||||
testPlanReportDataMapper.updateByPrimaryKeyWithBLOBs(testPlanReportData);
|
testPlanReportDataMapper.updateByPrimaryKeyWithBLOBs(testPlanReportData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String testPlanStatus = this.getTestPlanReportStatus(testPlanReport,testPlanReportData);
|
||||||
|
testPlanReport.setStatus(testPlanStatus);
|
||||||
|
this.update(testPlanReport);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算测试计划的状态
|
||||||
|
* @param testPlanReport
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private String getTestPlanReportStatus(TestPlanReport testPlanReport, TestPlanReportDataWithBLOBs testPlanReportData) {
|
||||||
|
String status = TestPlanReportStatus.COMPLETED.name();
|
||||||
|
if(testPlanReport!=null){
|
||||||
|
if(testPlanReport.getIsApiCaseExecuting() || testPlanReport.getIsPerformanceExecuting() || testPlanReport.getIsScenarioExecuting()){
|
||||||
|
status = TestPlanReportStatus.RUNNING.name();
|
||||||
|
}else {
|
||||||
|
if(testPlanReportData == null){
|
||||||
|
String failCaseString = testPlanReportData.getFailurTestCases();
|
||||||
|
status = TestPlanReportStatus.SUCCESS.name();
|
||||||
|
try {
|
||||||
|
JSONObject failurCaseObject = JSONObject.parseObject(failCaseString);
|
||||||
|
if(failurCaseObject.containsKey("apiTestCases")&&failurCaseObject.getJSONArray("apiTestCases").size()>=0){
|
||||||
|
status = TestPlanReportStatus.FAILED.name();
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
if(failurCaseObject.containsKey("loadTestCases")&&failurCaseObject.getJSONArray("loadTestCases").size()>=0){
|
||||||
|
status = TestPlanReportStatus.FAILED.name();
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
if(failurCaseObject.containsKey("scenarioTestCases")&&failurCaseObject.getJSONArray("scenarioTestCases").size()>=0){
|
||||||
|
status = TestPlanReportStatus.FAILED.name();
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
}catch (Exception e){
|
||||||
|
status = TestPlanReportStatus.FAILED.name();
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
status = TestPlanReportStatus.COMPLETED.name();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
public void update(TestPlanReport report) {
|
public void update(TestPlanReport report) {
|
||||||
if (!report.getIsApiCaseExecuting() && !report.getIsPerformanceExecuting() && !report.getIsScenarioExecuting()) {
|
if (!report.getIsApiCaseExecuting() && !report.getIsPerformanceExecuting() && !report.getIsScenarioExecuting()) {
|
||||||
|
@ -295,26 +345,26 @@ public class TestPlanReportService {
|
||||||
String subject = "";
|
String subject = "";
|
||||||
String event = "";
|
String event = "";
|
||||||
|
|
||||||
successContext = "接口测试定时任务通知:'" + testPlan.getName() + "'执行成功" + "\n" + "请点击下面链接进入测试报告页面" + "\n" + url;
|
successContext = "测试计划定时任务通知:'" + testPlan.getName() + "'执行成功" + "\n" + "请点击下面链接进入测试报告页面" + "\n" + url;
|
||||||
failedContext = "接口测试定时任务通知:'" + testPlan.getName() + "'执行失败" + "\n" + "请点击下面链接进入测试报告页面" + "\n" + url;
|
failedContext = "测试计划定时任务通知:'" + testPlan.getName() + "'执行失败" + "\n" + "请点击下面链接进入测试报告页面" + "\n" + url;
|
||||||
subject = Translator.get("task_notification");
|
subject = Translator.get("task_notification");
|
||||||
|
|
||||||
if (StringUtils.equals("Success", testPlanReport.getStatus())) {
|
if (StringUtils.equals(TestPlanReportStatus.FAILED.name(), testPlanReport.getStatus())) {
|
||||||
event = NoticeConstants.Event.EXECUTE_SUCCESSFUL;
|
|
||||||
} else {
|
|
||||||
event = NoticeConstants.Event.EXECUTE_FAILED;
|
event = NoticeConstants.Event.EXECUTE_FAILED;
|
||||||
|
} else {
|
||||||
|
event = NoticeConstants.Event.EXECUTE_SUCCESSFUL;
|
||||||
}
|
}
|
||||||
Map<String, Object> paramMap = new HashMap<>();
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
paramMap.put("testName", testPlan.getName());
|
paramMap.put("testName", testPlan.getName());
|
||||||
paramMap.put("id", testPlanReport.getId());
|
paramMap.put("id", testPlanReport.getId());
|
||||||
paramMap.put("type", "api");
|
paramMap.put("type", "testPlan");
|
||||||
paramMap.put("url", url);
|
paramMap.put("url", url);
|
||||||
paramMap.put("status", testPlanReport.getStatus());
|
paramMap.put("status", testPlanReport.getStatus());
|
||||||
NoticeModel noticeModel = NoticeModel.builder()
|
NoticeModel noticeModel = NoticeModel.builder()
|
||||||
.successContext(successContext)
|
.successContext(successContext)
|
||||||
.successMailTemplate("ApiSuccessfulNotification")
|
.successMailTemplate("TestPlanSuccessfulNotification")
|
||||||
.failedContext(failedContext)
|
.failedContext(failedContext)
|
||||||
.failedMailTemplate("ApiFailedNotification")
|
.failedMailTemplate("TestPlanFailedNotification")
|
||||||
.testId(testPlan.getId())
|
.testId(testPlan.getId())
|
||||||
.status(testPlanReport.getStatus())
|
.status(testPlanReport.getStatus())
|
||||||
.event(event)
|
.event(event)
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>MeterSphere</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<div style="text-align: left">
|
||||||
|
<p>尊敬的用户:</p>
|
||||||
|
<p style="margin-left: 60px">您好:
|
||||||
|
</div>
|
||||||
|
<div style="margin-left: 100px">
|
||||||
|
<p>您所执行的 ${testName} 测试计划运行失败<br/>
|
||||||
|
请点击下面链接进入测试报告页面</p>
|
||||||
|
<a href="${url}/#/${type}/report/view/${id}">${url}/#/${type}/report/view/${id}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,18 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>MeterSphere</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div style="text-align: left">
|
||||||
|
<p>尊敬的用户:</p>
|
||||||
|
<p style="margin-left: 60px">您好:
|
||||||
|
</div>
|
||||||
|
<div style="margin-left: 100px">
|
||||||
|
<p>您所执行的 ${testName} 测试计划运行成功<br/>
|
||||||
|
请点击下面链接进入测试报告页面</p>
|
||||||
|
<a href="${url}/#/${type}/report/view/${id}">${url}/#/${type}/report/view/${id}</a>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue