diff --git a/test-common/src/main/java/com/test/common/utils/JMeterGroupUtil.java b/test-common/src/main/java/com/test/common/utils/JMeterGroupUtil.java index 0177759..e762b58 100644 --- a/test-common/src/main/java/com/test/common/utils/JMeterGroupUtil.java +++ b/test-common/src/main/java/com/test/common/utils/JMeterGroupUtil.java @@ -283,6 +283,9 @@ public class JMeterGroupUtil { threadGroup.setDelay(0); if (executeType == 1) { threadGroup.setDuration(pressureSecond); + threadGroup.setProperty(new TestElementProperty(ThreadGroup.MAIN_CONTROLLER, createLoopController(-1))); + threadGroup.setProperty(new StringProperty(ThreadGroup.SCHEDULER, "true")); + threadGroup.setProperty(new StringProperty(ThreadGroup.IS_SAME_USER_ON_NEXT_ITERATION, "true")); } else { threadGroup.setProperty(new TestElementProperty(ThreadGroup.MAIN_CONTROLLER, createLoopController(loops))); } diff --git a/test-test/src/main/java/com/test/test/controller/PerformanceTestController.java b/test-test/src/main/java/com/test/test/controller/PerformanceTestController.java index 280956b..f7e8e07 100644 --- a/test-test/src/main/java/com/test/test/controller/PerformanceTestController.java +++ b/test-test/src/main/java/com/test/test/controller/PerformanceTestController.java @@ -1,8 +1,12 @@ package com.test.test.controller; -import java.util.List; - +import com.test.common.annotation.Log; +import com.test.common.core.controller.BaseController; +import com.test.common.core.domain.AjaxResult; +import com.test.common.core.page.TableDataInfo; +import com.test.common.enums.BusinessType; import com.test.common.utils.StringUtils; +import com.test.common.utils.poi.ExcelUtil; import com.test.test.domain.PerformanceTest; import com.test.test.domain.TestCase; import com.test.test.domain.qo.PerformanceTestQO; @@ -13,16 +17,12 @@ import com.test.test.service.ITestCaseService; import com.test.test.task.DynamicTaskManager; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; -import com.test.common.annotation.Log; -import com.test.common.core.controller.BaseController; -import com.test.common.core.domain.AjaxResult; -import com.test.common.enums.BusinessType; -import com.test.common.utils.poi.ExcelUtil; -import com.test.common.core.page.TableDataInfo; + +import java.util.List; +import java.util.concurrent.CompletableFuture; /** * 性能测试Controller @@ -134,8 +134,12 @@ public class PerformanceTestController extends BaseController { } // 执行性能测试 try { - Long l1 = performanceTestCaseReportService.executePerformanceTestAndReport(l, jmeterHomePath, 2); - return success(l1); + CompletableFuture.runAsync(() -> { + performanceTestCaseReportService.executePerformanceTestAndReport(l, jmeterHomePath, 2); + }); + return toAjax(true); +// Long l1 = performanceTestCaseReportService.executePerformanceTestAndReport(l, jmeterHomePath, 2); +// return success(l1); } catch (Exception e) { log.error("执行失败!", e); return error("执行失败!"); @@ -195,8 +199,12 @@ public class PerformanceTestController extends BaseController { dynamicTaskManager.updateTask(entity); } try { - Long l1 = performanceTestCaseReportService.executePerformanceTestAndReport(l, jmeterHomePath, 2); - return success(l1); + CompletableFuture.runAsync(() -> { + performanceTestCaseReportService.executePerformanceTestAndReport(l, jmeterHomePath, 2); + }); + return toAjax(true); +// Long l1 = performanceTestCaseReportService.executePerformanceTestAndReport(l, jmeterHomePath, 2); +// return success(l1); } catch (Exception e) { log.error("执行失败!", e); return error("执行失败!"); @@ -224,7 +232,11 @@ public class PerformanceTestController extends BaseController { // @PreAuthorize("@ss.hasPermi('system:test:remove')") @GetMapping("/executeNow") public AjaxResult executeNow(@RequestParam Long id) { - Long l1 = performanceTestCaseReportService.executePerformanceTestAndReport(id, jmeterHomePath, 2); - return success(l1); + CompletableFuture.runAsync(() -> { + performanceTestCaseReportService.executePerformanceTestAndReport(id, jmeterHomePath, 2); + }); + return toAjax(true); +// Long l1 = performanceTestCaseReportService.executePerformanceTestAndReport(id, jmeterHomePath, 2); +// return success(l1); } } diff --git a/test-ui/src/api/performance/index.js b/test-ui/src/api/performance/index.js index 59e0f21..d248bb1 100644 --- a/test-ui/src/api/performance/index.js +++ b/test-ui/src/api/performance/index.js @@ -74,6 +74,6 @@ export function editAndExecuteTest(data) { export function executeTest(query) { return request({ url: '/test/performanceTest/executeNow?id=' + query, - method: 'get', + method: 'get' }) } diff --git a/test-ui/src/views/test/performance/performanceEdit.vue b/test-ui/src/views/test/performance/performanceEdit.vue index 4de8c62..ce5678b 100644 --- a/test-ui/src/views/test/performance/performanceEdit.vue +++ b/test-ui/src/views/test/performance/performanceEdit.vue @@ -5,7 +5,7 @@
测试名称
-
+
保存 保存并执行 立即执行 @@ -166,6 +166,7 @@ export default { crontabStatus: '0', // 定时任务状态:0关闭,1开启,默认0 loopCount: '0', // 迭代次数,默认0 }, + loading: false, activeName: 'first', sceneList: [], // 场景列表 dialogVisible: false, // 场景列表 @@ -247,6 +248,7 @@ export default { this.$message({ message: '请输入Crontab表达式', type: 'warning' }) return } + this.loading = true; editAndExecuteTest(this.addForm).then(res => { if (res.code === 200) { this.$message({ message: '编辑成功', type: 'success' }) @@ -254,17 +256,22 @@ export default { } else { this.$message({ message: '编辑失败', type: 'error' }) } + }).finally(() => { + this.loading = false; }) }, // 立即执行 handleWithExecute() { + this.loading = true; executeTest(this.$route.query.id).then(res => { if (res.code === 200) { this.$message({ message: '执行成功', type: 'success' }) - this.$tab.closeOpenPage({ path: "/performance/performance" }); + // this.$tab.closeOpenPage({ path: "/performance/performance" }); } else { this.$message({ message: '执行失败', type: 'error' }) } + }).finally(() => { + this.loading = false; }) }, // 取消 diff --git a/test-ui/src/views/test/testplan/execute/caseExecute.vue b/test-ui/src/views/test/testplan/execute/caseExecute.vue index 9be9c6d..539fec1 100644 --- a/test-ui/src/views/test/testplan/execute/caseExecute.vue +++ b/test-ui/src/views/test/testplan/execute/caseExecute.vue @@ -145,9 +145,9 @@ export default { this.getList(); }, relateCaseVue() { - this.open = true; - this.reset(); - this.$refs.relateCase.getList() + // this.open = true; + // this.reset(); + // this.$refs.relateCase.getList() }, /** 查询列表 */ getList() { @@ -176,7 +176,9 @@ export default { return runTestPlanCase(queryParams); }).then((res) => { this.$modal.msgSuccess("提交执行成功"); - this.open = true; + // this.open = true; + this.loading = false; + }).finally(() => { this.loading = false; }); },