From aae13f0342e6ad730afa77058cdc2a77e161ad5d Mon Sep 17 00:00:00 2001 From: wenyann Date: Mon, 19 Apr 2021 19:30:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:Jenkins=E9=A3=9E=E4=B9=A6=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E9=80=9A=E7=9F=A5-=E6=89=A7=E8=A1=8C=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E4=B8=AD=E7=9A=84=E6=80=A7=E8=83=BD=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=BB=93=E6=9E=9C=E6=9C=AA=E9=80=9A=E7=9F=A5=EF=BC=8C?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=AE=8C=E6=B5=8B=E8=AF=95=E8=AE=A1=E5=88=92?= =?UTF-8?q?=EF=BC=8C=E8=B4=9F=E8=B4=A3=E4=BA=BA=E6=98=AF=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/jmeter/APIBackendListenerClient.java | 65 +++++++++++++++++-- .../ApiDefinitionExecResultService.java | 5 +- .../api/service/ApiTestCaseService.java | 25 +++++-- .../metersphere/notice/util/LarkClient.java | 4 +- .../notice/PerformanceNoticeEvent.java | 3 +- .../track/service/TestPlanApiCaseService.java | 6 ++ .../track/plan/components/TestPlanList.vue | 2 +- 7 files changed, 92 insertions(+), 18 deletions(-) diff --git a/backend/src/main/java/io/metersphere/api/jmeter/APIBackendListenerClient.java b/backend/src/main/java/io/metersphere/api/jmeter/APIBackendListenerClient.java index d8aea168e5..e1af4342e4 100644 --- a/backend/src/main/java/io/metersphere/api/jmeter/APIBackendListenerClient.java +++ b/backend/src/main/java/io/metersphere/api/jmeter/APIBackendListenerClient.java @@ -14,6 +14,7 @@ import io.metersphere.i18n.Translator; import io.metersphere.notice.sender.NoticeModel; import io.metersphere.notice.service.NoticeSendService; import io.metersphere.service.SystemParameterService; +import io.metersphere.track.service.TestPlanApiCaseService; import io.metersphere.track.service.TestPlanReportService; import io.metersphere.track.service.TestPlanTestCaseService; import org.apache.commons.collections4.CollectionUtils; @@ -62,6 +63,8 @@ public class APIBackendListenerClient extends AbstractBackendListenerClient impl private ApiAutomationService apiAutomationService; + private TestPlanApiCaseService testPlanApiCaseService; + public String runMode = ApiRunMode.RUN.name(); // 测试ID @@ -122,6 +125,10 @@ public class APIBackendListenerClient extends AbstractBackendListenerClient impl if (apiAutomationService == null) { LogUtil.error("apiAutomationService is required"); } + testPlanApiCaseService = CommonBeanFactory.getBean(TestPlanApiCaseService.class); + if (testPlanApiCaseService == null) { + LogUtil.error("testPlanApiCaseService is required"); + } super.setupTest(context); } @@ -195,16 +202,60 @@ public class APIBackendListenerClient extends AbstractBackendListenerClient impl } else if (StringUtils.equals(this.runMode, ApiRunMode.JENKINS.name())) { apiDefinitionService.addResult(testResult); apiDefinitionExecResultService.saveApiResult(testResult, ApiRunMode.DEFINITION.name()); + ApiTestCaseWithBLOBs apiTestCaseWithBLOBs = apiTestCaseService.getInfoJenkins(testResult.getTestId()); + ApiDefinitionExecResult apiResult = apiDefinitionExecResultService.getInfo(apiTestCaseWithBLOBs.getLastResultId()); + //环境 + String name = apiAutomationService.get(debugReportId).getName(); + //时间 + Long time = apiTestCaseWithBLOBs.getUpdateTime(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String executionTime = null; + String time_ = String.valueOf(time); + if (!time_.equals("null")) { + executionTime = sdf.format(new Date(Long.parseLong(time_))); + } + + //执行人 + String userName = apiAutomationService.getUser(apiTestCaseWithBLOBs.getCreateUserId()).getName(); + + //报告内容 + reportTask = new ApiTestReportVariable(); + reportTask.setStatus(apiResult.getStatus()); + reportTask.setId(apiResult.getId()); + reportTask.setTriggerMode("API"); + reportTask.setName(apiTestCaseWithBLOBs.getName()); + reportTask.setExecutor(userName); + reportTask.setExecutionTime(executionTime); + reportTask.setExecutionEnvironment(name); } else if (StringUtils.equals(this.runMode, ApiRunMode.JENKINS_API_PLAN.name())) { apiDefinitionService.addResult(testResult); apiDefinitionExecResultService.saveApiResult(testResult, ApiRunMode.API_PLAN.name()); - ApiDefinitionExecResult result = new ApiDefinitionExecResult(); - result = apiDefinitionService.getResultByJenkins(debugReportId, ApiRunMode.API_PLAN.name()); - report = new ApiTestReport(); - report.setStatus(result.getStatus()); - report.setId(result.getId()); - report.setTriggerMode(ApiRunMode.API.name()); - report.setName(apiDefinitionService.getApiCaseInfo(testId).getName()); + ApiTestCaseWithBLOBs apiTestCaseWithBLOBs = apiTestCaseService.getInfoJenkins(testResult.getTestId()); + ApiDefinitionExecResult apiResult = apiDefinitionExecResultService.getInfo(apiTestCaseWithBLOBs.getLastResultId()); + //环境 + TestPlanApiCase testPlanApiCase = testPlanApiCaseService.getInfo(testResult.getTestId(), debugReportId); + String name = apiAutomationService.get(testPlanApiCase.getEnvironmentId()).getName(); + //时间 + Long time = apiTestCaseWithBLOBs.getUpdateTime(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String executionTime = null; + String time_ = String.valueOf(time); + if (!time_.equals("null")) { + executionTime = sdf.format(new Date(Long.parseLong(time_))); + } + + //执行人 + String userName = apiAutomationService.getUser(apiTestCaseWithBLOBs.getCreateUserId()).getName(); + + //报告内容 + reportTask = new ApiTestReportVariable(); + reportTask.setStatus(apiResult.getStatus()); + reportTask.setId(apiResult.getId()); + reportTask.setTriggerMode("API"); + reportTask.setName(apiTestCaseWithBLOBs.getName()); + reportTask.setExecutor(userName); + reportTask.setExecutionTime(executionTime); + reportTask.setExecutionEnvironment(name); } else if (StringUtils.equalsAny(this.runMode, ApiRunMode.API_PLAN.name(), ApiRunMode.SCHEDULE_API_PLAN.name())) { apiDefinitionService.addResult(testResult); diff --git a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionExecResultService.java b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionExecResultService.java index 4d2b25bfa9..1a48ce63ca 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionExecResultService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionExecResultService.java @@ -41,10 +41,13 @@ public class ApiDefinitionExecResultService { private ApiTestCaseMapper apiTestCaseMapper; @Resource private TestCaseReviewApiCaseService testCaseReviewApiCaseService; - @Resource SqlSessionFactory sqlSessionFactory; + public ApiDefinitionExecResult getInfo(String id) { + return apiDefinitionExecResultMapper.selectByPrimaryKey(id); + } + public void saveApiResult(TestResult result, String type) { if (CollectionUtils.isNotEmpty(result.getScenarios())) { SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); diff --git a/backend/src/main/java/io/metersphere/api/service/ApiTestCaseService.java b/backend/src/main/java/io/metersphere/api/service/ApiTestCaseService.java index 64b5ef1642..61de23c35f 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiTestCaseService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiTestCaseService.java @@ -81,12 +81,18 @@ public class ApiTestCaseService { private static final String BODY_FILE_DIR = FileUtils.BODY_FILE_DIR; + //查询测试用例详情 + public ApiTestCaseWithBLOBs getInfoJenkins(String id) { + ApiTestCaseWithBLOBs apiTest = apiTestCaseMapper.selectByPrimaryKey(id); + return apiTest; + } + public List list(ApiTestCaseRequest request) { request.setOrders(ServiceUtils.getDefaultOrder(request.getOrders())); List returnList = extApiTestCaseMapper.list(request); for (ApiTestCaseResult res : returnList) { - if(StringUtils.equalsIgnoreCase(res.getApiMethod(),"esb")){ + if (StringUtils.equalsIgnoreCase(res.getApiMethod(), "esb")) { esbApiParamService.handleApiEsbParams(res); } } @@ -558,14 +564,21 @@ public class ApiTestCaseService { } public String run(RunCaseRequest request) { - ApiTestCaseWithBLOBs testCaseWithBLOBs=new ApiTestCaseWithBLOBs(); - if(StringUtils.equals(request.getRunMode(), ApiRunMode.JENKINS_API_PLAN.name())){ - testCaseWithBLOBs= apiTestCaseMapper.selectByPrimaryKey(request.getReportId()); + ApiTestCaseWithBLOBs testCaseWithBLOBs = new ApiTestCaseWithBLOBs(); + if (StringUtils.equals(request.getRunMode(), ApiRunMode.JENKINS_API_PLAN.name())) { + testCaseWithBLOBs = apiTestCaseMapper.selectByPrimaryKey(request.getReportId()); request.setCaseId(request.getReportId()); - }else{ - testCaseWithBLOBs= apiTestCaseMapper.selectByPrimaryKey(request.getCaseId()); + } else { + testCaseWithBLOBs = apiTestCaseMapper.selectByPrimaryKey(request.getCaseId()); } + if (StringUtils.equals(request.getRunMode(), ApiRunMode.JENKINS.name())) { + request.setReportId(request.getEnvironmentId()); + } + if (StringUtils.equals(request.getRunMode(), ApiRunMode.JENKINS_API_PLAN.name())) { + //通过测试计划id查询环境 + request.setReportId(request.getTestPlanId()); + } // 多态JSON普通转换会丢失内容,需要通过 ObjectMapper 获取 if (testCaseWithBLOBs != null && StringUtils.isNotEmpty(testCaseWithBLOBs.getRequest())) { try { diff --git a/backend/src/main/java/io/metersphere/notice/util/LarkClient.java b/backend/src/main/java/io/metersphere/notice/util/LarkClient.java index 9d6e75c625..3b2bd1e855 100644 --- a/backend/src/main/java/io/metersphere/notice/util/LarkClient.java +++ b/backend/src/main/java/io/metersphere/notice/util/LarkClient.java @@ -33,14 +33,14 @@ public class LarkClient { httpPost.setEntity(entity); // 执行http请求 response = httpClient.execute(httpPost); - if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + /* if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { String result = EntityUtils.toString(response.getEntity()); JSONObject obj = JSONObject.parseObject(result); Integer errcode = obj.getInteger("errcode"); sendResult.setErrorCode(errcode); sendResult.setErrorMsg(obj.getString("errmsg")); sendResult.setIsSuccess(errcode.equals(0)); - } + }*/ } catch (Exception e) { e.printStackTrace(); } finally { diff --git a/backend/src/main/java/io/metersphere/performance/notice/PerformanceNoticeEvent.java b/backend/src/main/java/io/metersphere/performance/notice/PerformanceNoticeEvent.java index d0f2cf2b83..459561ca45 100644 --- a/backend/src/main/java/io/metersphere/performance/notice/PerformanceNoticeEvent.java +++ b/backend/src/main/java/io/metersphere/performance/notice/PerformanceNoticeEvent.java @@ -26,6 +26,7 @@ public class PerformanceNoticeEvent implements LoadTestFinishEvent { private NoticeSendService noticeSendService; public void sendNotice(LoadTestReport loadTestReport) { + BaseSystemConfigDTO baseSystemConfigDTO = systemParameterService.getBaseInfo(); String url = baseSystemConfigDTO.getUrl() + "/#/performance/report/view/" + loadTestReport.getId(); String successContext = ""; @@ -71,7 +72,7 @@ public class PerformanceNoticeEvent implements LoadTestFinishEvent { @Override public void execute(LoadTestReport loadTestReport) { - LogUtil.info("PerformanceNoticeEvent OVER:" + loadTestReport.getTriggerMode()+";"+loadTestReport.getStatus()); + LogUtil.info("PerformanceNoticeEvent OVER:" + loadTestReport.getTriggerMode() + ";" + loadTestReport.getStatus() + ";" + loadTestReport.getName()); if (StringUtils.equals(ReportTriggerMode.API.name(), loadTestReport.getTriggerMode()) || StringUtils.equals(ReportTriggerMode.SCHEDULE.name(), loadTestReport.getTriggerMode())) { if (StringUtils.equalsAny(loadTestReport.getStatus(), diff --git a/backend/src/main/java/io/metersphere/track/service/TestPlanApiCaseService.java b/backend/src/main/java/io/metersphere/track/service/TestPlanApiCaseService.java index c6748744db..d906761e34 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestPlanApiCaseService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestPlanApiCaseService.java @@ -44,6 +44,12 @@ public class TestPlanApiCaseService { @Resource ApiDefinitionExecResultService apiDefinitionExecResultService; + public TestPlanApiCase getInfo(String caseId, String testPlanId) { + TestPlanApiCaseExample example = new TestPlanApiCaseExample(); + example.createCriteria().andApiCaseIdEqualTo(caseId).andTestPlanIdEqualTo(testPlanId); + return testPlanApiCaseMapper.selectByExample(example).get(0); + } + public List list(ApiTestCaseRequest request) { request.setProjectId(null); request.setOrders(ServiceUtils.getDefaultOrder(request.getOrders())); diff --git a/frontend/src/business/components/track/plan/components/TestPlanList.vue b/frontend/src/business/components/track/plan/components/TestPlanList.vue index 0d4aa41d4c..137c1b2398 100644 --- a/frontend/src/business/components/track/plan/components/TestPlanList.vue +++ b/frontend/src/business/components/track/plan/components/TestPlanList.vue @@ -26,7 +26,7 @@