diff --git a/Dockerfile b/Dockerfile index 16209e91abc213786fe3fe351126358c23c77416..705770d65988d30853fcd802c047848b1adb0e23 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,11 +6,11 @@ ARG MS_VERSION=dev RUN mkdir -p /opt/apps && mkdir -p /opt/jmeter -ADD backend/target/backend-1.0.jar /opt/apps +ADD backend/target/backend-1.1.jar /opt/apps ADD backend/target/classes/jmeter/ /opt/jmeter/ -ENV JAVA_APP_JAR=/opt/apps/backend-1.0.jar +ENV JAVA_APP_JAR=/opt/apps/backend-1.1.jar ENV AB_OFF=true diff --git a/backend/pom.xml b/backend/pom.xml index a5ba9df9a00f68d40395b79f77876cc42b77f01b..430247e92ec64ab7d65c77a6a69e75ae1bac537c 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -7,7 +7,7 @@ metersphere-server io.metersphere - 1.0 + 1.1 4.0.0 @@ -376,4 +376,4 @@ https://maven.pkg.github.com/metersphere/jmeter-plugins-for-apache-dubbo - \ No newline at end of file + diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.java b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.java index 7ad9f0e5aa19f5938ca18594f40a841c9987bead..6c3461bf731155d720faeb80477600645de25deb 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.java +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.java @@ -3,6 +3,7 @@ package io.metersphere.base.mapper.ext; import io.metersphere.base.domain.TestCase; import io.metersphere.track.request.testcase.QueryTestCaseRequest; import io.metersphere.track.dto.TestCaseDTO; +import io.metersphere.track.request.testcase.TestCaseBatchRequest; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -15,7 +16,7 @@ public interface ExtTestCaseMapper { List listByMethod(@Param("request") QueryTestCaseRequest request); - List listBytestCaseIds(@Param("request") QueryTestCaseRequest request); + List listBytestCaseIds(@Param("request") TestCaseBatchRequest request); TestCase getMaxNumByProjectId(@Param("projectId") String projectId); diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml index 7d0296396434425baa27992da263634579121b36..8949c82d2fe3ea8f4891fcf634d66c2a22752b67 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml @@ -202,9 +202,9 @@ select test_case.*,api_test.name as apiName,load_test.name AS performName from test_case left join api_test on test_case.test_id=api_test.id left join load_test on test_case.test_id=load_test.id - + and test_case.id in - + #{id} diff --git a/backend/src/main/java/io/metersphere/performance/controller/PerformanceReportController.java b/backend/src/main/java/io/metersphere/performance/controller/PerformanceReportController.java index b3d806ef859829bdbadd96e1f3b1ac0137ba5017..178b6304f6ab73929f408ab42a35370b1ae309ca 100644 --- a/backend/src/main/java/io/metersphere/performance/controller/PerformanceReportController.java +++ b/backend/src/main/java/io/metersphere/performance/controller/PerformanceReportController.java @@ -15,12 +15,11 @@ import io.metersphere.performance.controller.request.ReportRequest; import io.metersphere.performance.service.ReportService; import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.RequiresRoles; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.OutputStream; import java.util.List; @RestController @@ -112,11 +111,15 @@ public class PerformanceReportController { } @GetMapping("log/download/{reportId}/{resourceId}") - public ResponseEntity downloadLog(@PathVariable String reportId, @PathVariable String resourceId) { - byte[] bytes = reportService.downloadLog(reportId, resourceId); - return ResponseEntity.ok() - .contentType(MediaType.parseMediaType("application/octet-stream")) - .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"jmeter.log\"") - .body(bytes); + public void downloadLog(@PathVariable String reportId, @PathVariable String resourceId, HttpServletResponse response) throws Exception { + try (OutputStream outputStream = response.getOutputStream()) { + List content = reportService.downloadLog(reportId, resourceId); + response.setContentType("application/x-download"); + response.addHeader("Content-Disposition", "attachment;filename=jmeter.log"); + for (String log : content) { + outputStream.write(log.getBytes()); + } + outputStream.flush(); + } } } diff --git a/backend/src/main/java/io/metersphere/performance/service/ReportService.java b/backend/src/main/java/io/metersphere/performance/service/ReportService.java index 96bde66a53dbe9e68e315fc94d49b716a0a907cc..ff5ec96f9eac6e47d8a78a329806822e4ee68eb5 100644 --- a/backend/src/main/java/io/metersphere/performance/service/ReportService.java +++ b/backend/src/main/java/io/metersphere/performance/service/ReportService.java @@ -25,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; @Service @Transactional(rollbackFor = Exception.class) @@ -210,14 +211,13 @@ public class ReportService { return loadTestReportLogMapper.selectByExampleWithBLOBs(example); } - public byte[] downloadLog(String reportId, String resourceId) { + public List downloadLog(String reportId, String resourceId) { LoadTestReportLogExample example = new LoadTestReportLogExample(); example.createCriteria().andReportIdEqualTo(reportId).andResourceIdEqualTo(resourceId); example.setOrderByClause("part desc"); List loadTestReportLogs = loadTestReportLogMapper.selectByExampleWithBLOBs(example); - String content = loadTestReportLogs.stream().map(LoadTestReportLog::getContent).reduce("", (a, b) -> a + b); - return content.getBytes(); + return loadTestReportLogs.stream().map(LoadTestReportLog::getContent).collect(Collectors.toList()); } public LoadTestReport getReport(String reportId) { diff --git a/backend/src/main/java/io/metersphere/track/controller/TestCaseController.java b/backend/src/main/java/io/metersphere/track/controller/TestCaseController.java index b6b519c0ae2325b2b3fd258de7a7997ab244c27f..d3a79acb5459fcea318b35d13b577769d9e9c8de 100644 --- a/backend/src/main/java/io/metersphere/track/controller/TestCaseController.java +++ b/backend/src/main/java/io/metersphere/track/controller/TestCaseController.java @@ -110,9 +110,9 @@ public class TestCaseController { public void testCaseTemplateExport(HttpServletResponse response){ testCaseService.testCaseTemplateExport(response); } - @GetMapping("/export/testCase/{testCaseIds}") + @PostMapping("/export/testcase") @RequiresRoles(value = {RoleConstants.TEST_USER, RoleConstants.TEST_MANAGER}, logical = Logical.OR) - public void testCaseExport(HttpServletResponse response,QueryTestCaseRequest request){ + public void testCaseExport( HttpServletResponse response,@RequestBody TestCaseBatchRequest request){ testCaseService.testCaseExport(response,request); } diff --git a/backend/src/main/java/io/metersphere/track/service/TestCaseService.java b/backend/src/main/java/io/metersphere/track/service/TestCaseService.java index 477fc7eb7a474399b09f0cad370eb0896aeba071..a2e3d6040fe6cd00792127d6fe9d27b50213a13d 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestCaseService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestCaseService.java @@ -310,7 +310,7 @@ public class TestCaseService { return list; } - public void testCaseExport(HttpServletResponse response, QueryTestCaseRequest request) { + public void testCaseExport(HttpServletResponse response, TestCaseBatchRequest request) { EasyExcelExporter easyExcelExporter = null; try { easyExcelExporter = new EasyExcelExporter(TestCaseExcelData.class); @@ -323,7 +323,7 @@ public class TestCaseService { } } - private List generateTestCaseExcel(QueryTestCaseRequest request) { + private List generateTestCaseExcel(TestCaseBatchRequest request) { List TestCaseList = extTestCaseMapper.listBytestCaseIds(request); List list = new ArrayList<>(); SessionUser user = SessionUtils.getUser(); diff --git a/frontend/pom.xml b/frontend/pom.xml index e78f03d58c1ac2a4c85206e9911409bd424209ec..fad8d9c5c0b874b3f8ea0c411010a1b33c5fb945 100644 --- a/frontend/pom.xml +++ b/frontend/pom.xml @@ -7,7 +7,7 @@ metersphere-server io.metersphere - 1.0 + 1.1 4.0.0 diff --git a/frontend/src/business/components/track/case/components/TestCaseList.vue b/frontend/src/business/components/track/case/components/TestCaseList.vue index 2bcc6ed7820440cc6ea37fafc65115be34b57233..d36227613a506b520fdccfcf385909f90fe2e4c5 100644 --- a/frontend/src/business/components/track/case/components/TestCaseList.vue +++ b/frontend/src/business/components/track/case/components/TestCaseList.vue @@ -292,9 +292,10 @@ }, exportTestCase() { let config = { - url: '/test/case/export/testCase/' + [...this.selectIds], - method: 'get', - responseType: 'blob' + url: '/test/case/export/testcase', + method: 'post', + responseType: 'blob', + data: {ids: [...this.selectIds]} }; this.result = this.$request(config).then(response => { const filename = this.$t('test_track.case.test_case') + ".xlsx"; diff --git a/pom.xml b/pom.xml index 7277be513f874bb6c7672570de57526b577fb30f..d6a5c89a3effc70e8bfdc2df3b2e33774ff8e601 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 io.metersphere metersphere-server - 1.0 + 1.1 pom