From d6459dfa73d67689fe17d390c80ff6c8376f5a85 Mon Sep 17 00:00:00 2001 From: q4speed Date: Mon, 7 Sep 2020 13:20:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=8E=A5=E5=8F=A3=E6=B5=8B=E8=AF=95):=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=9C=BA=E6=99=AF=E6=8B=BC=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/controller/APITestController.java | 11 +- .../api/dto/QueryAPITestRequest.java | 2 + .../api/dto/scenario/Scenario.java | 1 + .../dto/scenario/request/DubboRequest.java | 2 + .../api/dto/scenario/request/HttpRequest.java | 2 + .../api/service/APITestService.java | 11 +- .../base/mapper/ext/ExtApiTestMapper.java | 2 + .../base/mapper/ext/ExtApiTestMapper.xml | 16 + backend/src/main/java/io/metersphere/xpack | 2 +- .../components/api/test/ApiTestConfig.vue | 45 +- .../api/test/components/ApiScenarioConfig.vue | 429 ++++++++++-------- .../api/test/components/ApiScenarioForm.vue | 11 +- .../api/test/components/ApiScenarioSelect.vue | 128 ++++++ .../components/ApiScenarioSelectSubTable.vue | 58 +++ .../components/request/ApiHttpRequestForm.vue | 12 +- .../api/test/model/ScenarioModel.js | 24 +- frontend/src/business/components/xpack | 2 +- frontend/src/i18n/en-US.js | 14 +- frontend/src/i18n/zh-CN.js | 16 +- frontend/src/i18n/zh-TW.js | 10 +- 20 files changed, 573 insertions(+), 225 deletions(-) create mode 100644 frontend/src/business/components/api/test/components/ApiScenarioSelect.vue create mode 100644 frontend/src/business/components/api/test/components/ApiScenarioSelectSubTable.vue diff --git a/backend/src/main/java/io/metersphere/api/controller/APITestController.java b/backend/src/main/java/io/metersphere/api/controller/APITestController.java index 01d6fb3e53..4ddbf28531 100644 --- a/backend/src/main/java/io/metersphere/api/controller/APITestController.java +++ b/backend/src/main/java/io/metersphere/api/controller/APITestController.java @@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; + import java.util.List; @RestController @@ -44,6 +45,11 @@ public class APITestController { return PageUtils.setPageInfo(page, apiTestService.list(request)); } + @PostMapping("/list/ids") + public List listByIds(@RequestBody QueryAPITestRequest request) { + return apiTestService.listByIds(request); + } + @GetMapping("/list/{projectId}") public List list(@PathVariable String projectId) { return apiTestService.getApiTestByProjectId(projectId); @@ -66,7 +72,7 @@ public class APITestController { @PostMapping(value = "/update", consumes = {"multipart/form-data"}) public void update(@RequestPart("request") SaveAPITestRequest request, @RequestPart(value = "file") MultipartFile file, @RequestPart(value = "files") List bodyFiles) { - apiTestService.update(request, file, bodyFiles); + apiTestService.update(request, file, bodyFiles); } @PostMapping(value = "/copy") @@ -91,9 +97,10 @@ public class APITestController { } @PostMapping(value = "/run/debug", consumes = {"multipart/form-data"}) - public String runDebug(@RequestPart("request") SaveAPITestRequest request, @RequestPart(value = "file") MultipartFile file, @RequestPart(value = "files") List bodyFiles) { + public String runDebug(@RequestPart("request") SaveAPITestRequest request, @RequestPart(value = "file") MultipartFile file, @RequestPart(value = "files") List bodyFiles) { return apiTestService.runDebug(request, file, bodyFiles); } + @PostMapping(value = "/checkName") public void checkName(@RequestBody SaveAPITestRequest request) { apiTestService.checkName(request); diff --git a/backend/src/main/java/io/metersphere/api/dto/QueryAPITestRequest.java b/backend/src/main/java/io/metersphere/api/dto/QueryAPITestRequest.java index 65fb9be3dd..74ea9ff567 100644 --- a/backend/src/main/java/io/metersphere/api/dto/QueryAPITestRequest.java +++ b/backend/src/main/java/io/metersphere/api/dto/QueryAPITestRequest.java @@ -12,6 +12,7 @@ import java.util.Map; public class QueryAPITestRequest { private String id; + private String excludeId; private String projectId; private String name; private String workspaceId; @@ -19,4 +20,5 @@ public class QueryAPITestRequest { private List orders; private Map> filters; private Map combine; + private List ids; } diff --git a/backend/src/main/java/io/metersphere/api/dto/scenario/Scenario.java b/backend/src/main/java/io/metersphere/api/dto/scenario/Scenario.java index e2c8ac1e50..8418015b40 100644 --- a/backend/src/main/java/io/metersphere/api/dto/scenario/Scenario.java +++ b/backend/src/main/java/io/metersphere/api/dto/scenario/Scenario.java @@ -7,6 +7,7 @@ import java.util.List; @Data public class Scenario { + private String id; private String name; private String url; private String environmentId; diff --git a/backend/src/main/java/io/metersphere/api/dto/scenario/request/DubboRequest.java b/backend/src/main/java/io/metersphere/api/dto/scenario/request/DubboRequest.java index 33bdc7c3be..73322cfef0 100644 --- a/backend/src/main/java/io/metersphere/api/dto/scenario/request/DubboRequest.java +++ b/backend/src/main/java/io/metersphere/api/dto/scenario/request/DubboRequest.java @@ -21,6 +21,8 @@ public class DubboRequest implements Request { // type 必须放最前面,以便能够转换正确的类 private String type = RequestType.DUBBO; @JSONField(ordinal = 1) + private String id; + @JSONField(ordinal = 1) private String name; @JSONField(ordinal = 2) private String protocol; diff --git a/backend/src/main/java/io/metersphere/api/dto/scenario/request/HttpRequest.java b/backend/src/main/java/io/metersphere/api/dto/scenario/request/HttpRequest.java index 6f7705104e..1b83ab850d 100644 --- a/backend/src/main/java/io/metersphere/api/dto/scenario/request/HttpRequest.java +++ b/backend/src/main/java/io/metersphere/api/dto/scenario/request/HttpRequest.java @@ -18,6 +18,8 @@ public class HttpRequest implements Request { // type 必须放最前面,以便能够转换正确的类 private String type = RequestType.HTTP; @JSONField(ordinal = 1) + private String id; + @JSONField(ordinal = 1) private String name; @JSONField(ordinal = 2) private String url; diff --git a/backend/src/main/java/io/metersphere/api/service/APITestService.java b/backend/src/main/java/io/metersphere/api/service/APITestService.java index ea5690ecae..a4161834b6 100644 --- a/backend/src/main/java/io/metersphere/api/service/APITestService.java +++ b/backend/src/main/java/io/metersphere/api/service/APITestService.java @@ -74,12 +74,16 @@ public class APITestService { return extApiTestMapper.list(request); } + public List listByIds(QueryAPITestRequest request) { + return extApiTestMapper.listByIds(request.getIds()); + } + public void create(SaveAPITestRequest request, MultipartFile file, List bodyFiles) { if (file == null) { throw new IllegalArgumentException(Translator.get("file_cannot_be_null")); } checkQuota(); - List bodyUploadIds = new ArrayList<>(request.getBodyUploadIds()) ; + List bodyUploadIds = new ArrayList<>(request.getBodyUploadIds()); request.setBodyUploadIds(null); ApiTest test = createTest(request); createBodyFiles(test, bodyUploadIds, bodyFiles); @@ -92,7 +96,7 @@ public class APITestService { } deleteFileByTestId(request.getId()); - List bodyUploadIds = new ArrayList<>(request.getBodyUploadIds()) ; + List bodyUploadIds = new ArrayList<>(request.getBodyUploadIds()); request.setBodyUploadIds(null); ApiTest test = updateTest(request); createBodyFiles(test, bodyUploadIds, bodyFiles); @@ -245,6 +249,7 @@ public class APITestService { MSException.throwException(Translator.get("load_test_already_exists")); } } + public void checkName(SaveAPITestRequest request) { ApiTestExample example = new ApiTestExample(); example.createCriteria().andNameEqualTo(request.getName()).andProjectIdEqualTo(request.getProjectId()); @@ -411,7 +416,7 @@ public class APITestService { } updateTest(request); APITestResult apiTest = get(request.getId()); - List bodyUploadIds = new ArrayList<>(request.getBodyUploadIds()) ; + List bodyUploadIds = new ArrayList<>(request.getBodyUploadIds()); request.setBodyUploadIds(null); createBodyFiles(apiTest, bodyUploadIds, bodyFiles); if (SessionUtils.getUser() == null) { diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiTestMapper.java b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiTestMapper.java index 0b6013b0f9..c1d48b4f1f 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiTestMapper.java +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiTestMapper.java @@ -11,4 +11,6 @@ public interface ExtApiTestMapper { List list(@Param("request") QueryAPITestRequest request); List getApiTestByProjectId(String projectId); + + List listByIds(@Param("ids") List ids); } diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiTestMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiTestMapper.xml index 2e13f69974..f8fb47b969 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiTestMapper.xml +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiTestMapper.xml @@ -105,6 +105,9 @@ + + and api_test.id != #{request.excludeId} + and api_test.name like CONCAT('%', #{request.name},'%') @@ -143,4 +146,17 @@ where project_id = #{projectId} + + \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/xpack b/backend/src/main/java/io/metersphere/xpack index b86032cbbd..ecb30d83c5 160000 --- a/backend/src/main/java/io/metersphere/xpack +++ b/backend/src/main/java/io/metersphere/xpack @@ -1 +1 @@ -Subproject commit b86032cbbda9a9e6028308aa95a887cff2192f1c +Subproject commit ecb30d83c575c6ed14adb1a1ebea389730f410a9 diff --git a/frontend/src/business/components/api/test/ApiTestConfig.vue b/frontend/src/business/components/api/test/ApiTestConfig.vue index 41c686fad0..fbc56ecbd8 100644 --- a/frontend/src/business/components/api/test/ApiTestConfig.vue +++ b/frontend/src/business/components/api/test/ApiTestConfig.vue @@ -57,7 +57,8 @@ + :test-id="test.id" :scenarios="test.scenarioDefinition" :project-id="test.projectId" + ref="config"/> @@ -66,13 +67,12 @@ diff --git a/frontend/src/business/components/api/test/components/ApiScenarioForm.vue b/frontend/src/business/components/api/test/components/ApiScenarioForm.vue index 0d506e85e4..b71a0aacc6 100644 --- a/frontend/src/business/components/api/test/components/ApiScenarioForm.vue +++ b/frontend/src/business/components/api/test/components/ApiScenarioForm.vue @@ -1,5 +1,6 @@