From 7dffef5379c5a83b622dd002a32efc6893d6810b Mon Sep 17 00:00:00 2001 From: "Captain.B" Date: Wed, 15 Apr 2020 13:55:54 +0800 Subject: [PATCH] run test error --- .../controller/PerformanceTestController.java | 6 +----- .../engine/docker/DockerTestEngine.java | 3 ++- .../engine/kubernetes/KubernetesTestEngine.java | 3 ++- .../service/PerformanceTestService.java | 14 +++++++------- backend/src/main/resources/i18n/en-US.json | 3 ++- backend/src/main/resources/i18n/zh-CN.json | 3 ++- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/backend/src/main/java/io/metersphere/controller/PerformanceTestController.java b/backend/src/main/java/io/metersphere/controller/PerformanceTestController.java index 0e50956747..a046035ed0 100644 --- a/backend/src/main/java/io/metersphere/controller/PerformanceTestController.java +++ b/backend/src/main/java/io/metersphere/controller/PerformanceTestController.java @@ -4,7 +4,6 @@ import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import io.metersphere.base.domain.FileMetadata; import io.metersphere.commons.constants.RoleConstants; -import io.metersphere.commons.exception.MSException; import io.metersphere.commons.utils.PageUtils; import io.metersphere.commons.utils.Pager; import io.metersphere.controller.request.testplan.*; @@ -86,10 +85,7 @@ public class PerformanceTestController { @PostMapping("/run") public void run(@RequestBody RunTestPlanRequest request) { - boolean started = performanceTestService.run(request); - if (!started) { - MSException.throwException("Start engine error, please check log."); - } + performanceTestService.run(request); } @GetMapping("/file/metadata/{testId}") diff --git a/backend/src/main/java/io/metersphere/engine/docker/DockerTestEngine.java b/backend/src/main/java/io/metersphere/engine/docker/DockerTestEngine.java index 06c7892170..1c208ffc49 100644 --- a/backend/src/main/java/io/metersphere/engine/docker/DockerTestEngine.java +++ b/backend/src/main/java/io/metersphere/engine/docker/DockerTestEngine.java @@ -12,6 +12,7 @@ import io.metersphere.engine.EngineContext; import io.metersphere.engine.EngineFactory; import io.metersphere.engine.docker.request.BaseRequest; import io.metersphere.engine.docker.request.TestRequest; +import io.metersphere.i18n.Translator; import org.springframework.web.client.RestTemplate; import java.util.List; @@ -41,7 +42,7 @@ public class DockerTestEngine extends AbstractEngine { .reduce(Integer::sum) .orElse(0); if (threadNum > totalThreadNum - runningSumThreadNum) { - MSException.throwException("Insufficient resources"); + MSException.throwException(Translator.get("max_thread_insufficient")); } List resourceRatio = resourceList.stream() .filter(r -> ResourceStatusEnum.VALID.name().equals(r.getStatus())) diff --git a/backend/src/main/java/io/metersphere/engine/kubernetes/KubernetesTestEngine.java b/backend/src/main/java/io/metersphere/engine/kubernetes/KubernetesTestEngine.java index dedb5e7a8a..e1e8a3f68d 100644 --- a/backend/src/main/java/io/metersphere/engine/kubernetes/KubernetesTestEngine.java +++ b/backend/src/main/java/io/metersphere/engine/kubernetes/KubernetesTestEngine.java @@ -15,6 +15,7 @@ import io.metersphere.engine.kubernetes.crds.jmeter.Jmeter; import io.metersphere.engine.kubernetes.crds.jmeter.JmeterSpec; import io.metersphere.engine.kubernetes.provider.ClientCredential; import io.metersphere.engine.kubernetes.provider.KubernetesProvider; +import io.metersphere.i18n.Translator; import org.apache.commons.collections.MapUtils; import java.util.HashMap; @@ -43,7 +44,7 @@ public class KubernetesTestEngine extends AbstractEngine { Integer maxConcurrency = clientCredential.getMaxConcurrency(); // 当前测试需要的并发数大于剩余的并发数报错 if (threadNum > maxConcurrency - sumThreadNum) { - MSException.throwException("Insufficient resources"); + MSException.throwException(Translator.get("max_thread_insufficient")); } try { EngineContext context = EngineFactory.createContext(loadTest, threadNum, this.getStartTime(), this.getReportId()); diff --git a/backend/src/main/java/io/metersphere/service/PerformanceTestService.java b/backend/src/main/java/io/metersphere/service/PerformanceTestService.java index fb600c2789..3e6d2be506 100644 --- a/backend/src/main/java/io/metersphere/service/PerformanceTestService.java +++ b/backend/src/main/java/io/metersphere/service/PerformanceTestService.java @@ -169,7 +169,8 @@ public class PerformanceTestService { return request.getId(); } - public boolean run(RunTestPlanRequest request) { + @Transactional(noRollbackFor = MSException.class)// 保存失败的信息 + public void run(RunTestPlanRequest request) { final LoadTestWithBLOBs loadTest = loadTestMapper.selectByPrimaryKey(request.getId()); if (loadTest == null) { MSException.throwException(Translator.get("run_load_test_not_found") + request.getId()); @@ -186,12 +187,12 @@ public class PerformanceTestService { MSException.throwException(String.format("Test cannot be run,test ID:%s", request.getId())); } - return startEngine(loadTest, engine); + startEngine(loadTest, engine); // todo:通过调用stop方法能够停止正在运行的engine,但是如果部署了多个backend实例,页面发送的停止请求如何定位到具体的engine } - private boolean startEngine(LoadTestWithBLOBs loadTest, Engine engine) { + private void startEngine(LoadTestWithBLOBs loadTest, Engine engine) { LoadTestReportWithBLOBs testReport = new LoadTestReportWithBLOBs(); testReport.setId(engine.getReportId()); testReport.setCreateTime(engine.getStartTime()); @@ -208,7 +209,6 @@ public class PerformanceTestService { reportDetail.setReportId(testReport.getId()); loadTestReportDetailMapper.insertSelective(reportDetail); - boolean started = true; try { // 标记running状态 loadTest.setStatus(TestStatus.Starting.name()); @@ -219,18 +219,18 @@ public class PerformanceTestService { extLoadTestReportDetailMapper.appendLine(testReport.getId(), "\n"); // engine.start(); - } catch (Exception e) { + } catch (MSException e) { LogUtil.error(e); - started = false; loadTest.setStatus(TestStatus.Error.name()); + loadTest.setDescription(e.getMessage()); loadTestMapper.updateByPrimaryKeySelective(loadTest); // testReport.setStatus(TestStatus.Error.name()); testReport.setDescription(e.getMessage()); loadTestReportMapper.updateByPrimaryKeySelective(testReport); + throw e; } - return started; } public List recentTestPlans(QueryTestPlanRequest request) { diff --git a/backend/src/main/resources/i18n/en-US.json b/backend/src/main/resources/i18n/en-US.json index b88c742725..c5329f867f 100644 --- a/backend/src/main/resources/i18n/en-US.json +++ b/backend/src/main/resources/i18n/en-US.json @@ -18,5 +18,6 @@ "no_nodes_message": "No node message", "duplicate_node_ip": "Duplicate IPs", "only_one_k8s": "Only one K8s can be added", - "organization_id_is_null": "Organization ID cannot be null" + "organization_id_is_null": "Organization ID cannot be null", + "max_thread_insufficient": "The number of concurrent users exceeds" } \ No newline at end of file diff --git a/backend/src/main/resources/i18n/zh-CN.json b/backend/src/main/resources/i18n/zh-CN.json index 56352f221a..0884b07c0f 100644 --- a/backend/src/main/resources/i18n/zh-CN.json +++ b/backend/src/main/resources/i18n/zh-CN.json @@ -18,5 +18,6 @@ "no_nodes_message": "没有节点信息", "duplicate_node_ip": "节点 IP 重复", "only_one_k8s": "只能添加一个 K8s", - "organization_id_is_null": "组织 ID 不能为空" + "organization_id_is_null": "组织 ID 不能为空", + "max_thread_insufficient": "并发用户数超额" } \ No newline at end of file