diff --git a/backend/src/main/java/io/metersphere/api/controller/ApiDefinitionController.java b/backend/src/main/java/io/metersphere/api/controller/ApiDefinitionController.java
index 9aa8fea318..6f2b5eca02 100644
--- a/backend/src/main/java/io/metersphere/api/controller/ApiDefinitionController.java
+++ b/backend/src/main/java/io/metersphere/api/controller/ApiDefinitionController.java
@@ -7,6 +7,7 @@ import io.metersphere.api.dto.ApiTestImportRequest;
import io.metersphere.api.dto.automation.ApiScenarioRequest;
import io.metersphere.api.dto.automation.ReferenceDTO;
import io.metersphere.api.dto.definition.*;
+import io.metersphere.api.dto.definition.parse.ApiDefinitionImport;
import io.metersphere.api.service.ApiDefinitionService;
import io.metersphere.base.domain.ApiDefinition;
import io.metersphere.commons.constants.RoleConstants;
@@ -93,7 +94,7 @@ public class ApiDefinitionController {
@PostMapping(value = "/import", consumes = {"multipart/form-data"})
@RequiresRoles(value = {RoleConstants.TEST_USER, RoleConstants.TEST_MANAGER}, logical = Logical.OR)
- public String testCaseImport(@RequestPart(value = "file", required = false) MultipartFile file, @RequestPart("request") ApiTestImportRequest request) {
+ public ApiDefinitionImport testCaseImport(@RequestPart(value = "file", required = false) MultipartFile file, @RequestPart("request") ApiTestImportRequest request) {
return apiDefinitionService.apiTestImport(file, request);
}
diff --git a/backend/src/main/java/io/metersphere/api/dto/ApiTestImportRequest.java b/backend/src/main/java/io/metersphere/api/dto/ApiTestImportRequest.java
index 704dadc295..28980a6993 100644
--- a/backend/src/main/java/io/metersphere/api/dto/ApiTestImportRequest.java
+++ b/backend/src/main/java/io/metersphere/api/dto/ApiTestImportRequest.java
@@ -13,5 +13,7 @@ public class ApiTestImportRequest {
private String projectId;
private String platform;
private Boolean useEnvironment;
+ // 来自场景的导入不需要存储
+ private boolean saved = true;
private String swaggerUrl;
}
diff --git a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java
index 789009212a..5cc574d6d5 100644
--- a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java
+++ b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java
@@ -336,7 +336,7 @@ public class ApiDefinitionService {
}
- public String apiTestImport(MultipartFile file, ApiTestImportRequest request) {
+ public ApiDefinitionImport apiTestImport(MultipartFile file, ApiTestImportRequest request) {
ApiImportParser apiImportParser = ApiImportParserFactory.getApiImportParser(request.getPlatform());
ApiDefinitionImport apiImport = null;
try {
@@ -345,8 +345,10 @@ public class ApiDefinitionService {
LogUtil.error(e.getMessage(), e);
MSException.throwException(Translator.get("parse_data_error"));
}
- importApiTest(request, apiImport);
- return "SUCCESS";
+ if (request.isSaved()) {
+ importApiTest(request, apiImport);
+ }
+ return apiImport;
}
private void importApiTest(ApiTestImportRequest importRequest, ApiDefinitionImport apiImport) {
diff --git a/frontend/src/business/components/api/automation/scenario/EditApiScenario.vue b/frontend/src/business/components/api/automation/scenario/EditApiScenario.vue
index 1ecbbef22e..bc35b4f9c0 100644
--- a/frontend/src/business/components/api/automation/scenario/EditApiScenario.vue
+++ b/frontend/src/business/components/api/automation/scenario/EditApiScenario.vue
@@ -267,6 +267,8 @@
+
+
@@ -293,6 +295,7 @@
import MsApiScenarioComponent from "./ApiScenarioComponent";
import MsApiReportDetail from "../report/ApiReportDetail";
import MsScenarioParameters from "./ScenarioParameters";
+ import ApiImport from "../../definition/components/import/ApiImport";
export default {
name: "EditApiScenario",
@@ -301,13 +304,21 @@
currentScenario: {},
},
components: {
- ApiEnvironmentConfig, MsScenarioParameters,
- MsApiReportDetail, MsAddTag, MsRun,
- MsApiScenarioComponent, MsImportApiScenario,
- MsJsr233Processor, MsConstantTimer,
- MsIfController, MsApiAssertions,
- MsApiExtract, MsApiDefinition,
- MsApiComponent, MsApiCustomize
+ ApiEnvironmentConfig,
+ MsScenarioParameters,
+ MsApiReportDetail,
+ MsAddTag, MsRun,
+ MsApiScenarioComponent,
+ MsImportApiScenario,
+ MsJsr233Processor,
+ MsConstantTimer,
+ MsIfController,
+ MsApiAssertions,
+ MsApiExtract,
+ MsApiDefinition,
+ MsApiComponent,
+ MsApiCustomize,
+ ApiImport,
},
data() {
return {
@@ -402,6 +413,7 @@
this.scenarioVisible = true;
break;
default:
+ this.$refs.apiImport.open();
break;
}
this.sort();
@@ -622,36 +634,40 @@
},
setFiles(item, bodyUploadFiles, obj) {
if (item.body) {
- item.body.kvs.forEach(param => {
- if (param.files) {
- param.files.forEach(item => {
- if (item.file) {
- if (!item.id) {
- let fileId = getUUID().substring(0, 12);
- item.name = item.file.name;
- item.id = fileId;
+ if (item.body.kvs) {
+ item.body.kvs.forEach(param => {
+ if (param.files) {
+ param.files.forEach(item => {
+ if (item.file) {
+ if (!item.id) {
+ let fileId = getUUID().substring(0, 12);
+ item.name = item.file.name;
+ item.id = fileId;
+ }
+ obj.bodyUploadIds.push(item.id);
+ bodyUploadFiles.push(item.file);
}
- obj.bodyUploadIds.push(item.id);
- bodyUploadFiles.push(item.file);
- }
- });
- }
- });
- item.body.binary.forEach(param => {
- if (param.files) {
- param.files.forEach(item => {
- if (item.file) {
- if (!item.id) {
- let fileId = getUUID().substring(0, 12);
- item.name = item.file.name;
- item.id = fileId;
+ });
+ }
+ });
+ }
+ if (item.body.binary) {
+ item.body.binary.forEach(param => {
+ if (param.files) {
+ param.files.forEach(item => {
+ if (item.file) {
+ if (!item.id) {
+ let fileId = getUUID().substring(0, 12);
+ item.name = item.file.name;
+ item.id = fileId;
+ }
+ obj.bodyUploadIds.push(item.id);
+ bodyUploadFiles.push(item.file);
}
- obj.bodyUploadIds.push(item.id);
- bodyUploadFiles.push(item.file);
- }
- });
- }
- });
+ });
+ }
+ });
+ }
}
},
recursiveFile(arr, bodyUploadFiles, obj) {
@@ -736,6 +752,15 @@
addParameters(data) {
this.currentScenario.variables = data;
this.reload();
+ },
+ apiImport(importData) {
+ if (importData && importData.data) {
+ importData.data.forEach(item => {
+ this.setApiParameter(item, "API", "Copy");
+ })
+ this.sort();
+ this.reload();
+ }
}
}
}
diff --git a/frontend/src/business/components/api/definition/ApiDefinition.vue b/frontend/src/business/components/api/definition/ApiDefinition.vue
index a7765697b5..57651b95f2 100644
--- a/frontend/src/business/components/api/definition/ApiDefinition.vue
+++ b/frontend/src/business/components/api/definition/ApiDefinition.vue
@@ -225,7 +225,7 @@
if (!this.$refs.apiList[0].tableData) {
return;
}
- let obj = {protocol: this.currentProtocol, data: this.$refs.apiList[0].tableData}
+ let obj = {projectName: getCurrentProjectID(), protocol: this.currentProtocol, data: this.$refs.apiList[0].tableData}
downloadFile("导出API.json", JSON.stringify(obj));
},
refresh(data) {
@@ -255,7 +255,7 @@
changeProtocol(data) {
this.currentProtocol = data;
},
- showExecResult(row){
+ showExecResult(row) {
this.debug(row);
},
diff --git a/frontend/src/business/components/api/definition/components/import/ApiImport.vue b/frontend/src/business/components/api/definition/components/import/ApiImport.vue
index bd1f0769f5..416619781e 100644
--- a/frontend/src/business/components/api/definition/components/import/ApiImport.vue
+++ b/frontend/src/business/components/api/definition/components/import/ApiImport.vue
@@ -70,6 +70,12 @@
export default {
name: "ApiImport",
components: {MsDialogFooter},
+ props: {
+ saved: {
+ type: Boolean,
+ default: true,
+ }
+ },
data() {
return {
visible: false,
@@ -148,7 +154,7 @@
},
uploadValidate(file, fileList) {
let suffix = file.name.substring(file.name.lastIndexOf('.') + 1);
- if (!this.selectedPlatform.suffixes.has(suffix)) {
+ if (this.selectedPlatform.suffixes && !this.selectedPlatform.suffixes.has(suffix)) {
this.$warning(this.$t('api_test.api_import.suffixFormatErr'));
return false;
}
@@ -170,7 +176,7 @@
let res = response.data;
this.$success(this.$t('test_track.case.import.success'));
this.visible = false;
- this.$emit('refresh');
+ this.$emit('refresh', res);
});
} else {
return false;
@@ -181,8 +187,11 @@
let param = {};
Object.assign(param, this.formData);
param.platform = this.selectedPlatformValue;
- param.moduleId = this.currentModule.id;
- param.modulePath = this.currentModule.path;
+ param.saved = this.saved;
+ if (this.currentModule) {
+ param.moduleId = this.currentModule.id;
+ param.modulePath = this.currentModule.path;
+ }
param.projectId = getCurrentProjectID();
if (!this.swaggerUrlEable) {
param.swaggerUrl = undefined;