diff --git a/backend/src/main/java/io/metersphere/excel/listener/TestCaseDataListener.java b/backend/src/main/java/io/metersphere/excel/listener/TestCaseDataListener.java index ad588dc8cd..ba941aad35 100644 --- a/backend/src/main/java/io/metersphere/excel/listener/TestCaseDataListener.java +++ b/backend/src/main/java/io/metersphere/excel/listener/TestCaseDataListener.java @@ -19,6 +19,7 @@ import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +import java.util.stream.Stream; public class TestCaseDataListener extends EasyExcelListener { @@ -151,6 +152,7 @@ public class TestCaseDataListener extends EasyExcelListener { .map(item -> this.convert2TestCase(item)) .collect(Collectors.toList()); testCaseService.saveImportData(result, projectId); + this.isUpdated = true; } if (!(updateList.size() == 0)) { @@ -180,9 +182,11 @@ public class TestCaseDataListener extends EasyExcelListener { if (nodePath.endsWith("/")) { nodePath = nodePath.substring(0, nodePath.length() - 1); } - testCase.setNodePath(nodePath); + //将标签设置为前端可解析的格式 + String modifiedTags = modifyTagPattern(data); + testCase.setTags(modifiedTags); String steps = getSteps(data); testCase.setSteps(steps); @@ -201,6 +205,7 @@ public class TestCaseDataListener extends EasyExcelListener { testCase.setProjectId(this.projectId); testCase.setUpdateTime(System.currentTimeMillis()); + //调整nodePath格式 String nodePath = data.getNodePath(); if (!nodePath.startsWith("/")) { nodePath = "/" + nodePath; @@ -213,9 +218,32 @@ public class TestCaseDataListener extends EasyExcelListener { String steps = getSteps(data); testCase.setSteps(steps); + //将标签设置为前端可解析的格式 + String modifiedTags = modifyTagPattern(data); + testCase.setTags(modifiedTags); + return testCase; } + /** + * 调整tags格式,便于前端进行解析。 + * 例如对于:标签1,标签2。将调整为:["标签1","标签2"]。 + */ + public String modifyTagPattern(TestCaseExcelData data){ + String tags = data.getTags(); + if (tags != null) { + Stream stringStream = Arrays.stream(tags.split("[,;,;]")); //当标签值以中英文的逗号和分号分隔时才能正确解析 + List tagList = stringStream.map(tag -> tag = "\"" + tag + "\"") + .collect(Collectors.toList()); + String modifiedTags = StringUtils.join(tagList, ","); + modifiedTags = "[" + modifiedTags + "]"; + return modifiedTags; + }else { + return null; + } + } + + public String getSteps(TestCaseExcelData data) { JSONArray jsonArray = new JSONArray(); 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 636c425aaf..d51e8955be 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestCaseService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestCaseService.java @@ -423,7 +423,7 @@ public class TestCaseService { testcase.setSort(sort.getAndIncrement()); testcase.setNum(num.decrementAndGet()); testcase.setReviewStatus(TestCaseReviewStatus.Prepare.name()); - mapper.insert(testcase); + mapper.insert(testcase); }); } sqlSession.flushStatements(); @@ -451,7 +451,7 @@ public class TestCaseService { /** * 把Excel中带ID的数据更新到数据库 - * + * feat(测试跟踪):通过Excel导入导出时有ID字段,可通过Excel导入来更新用例。 (#1727) * @param testCases * @param projectId */ @@ -556,9 +556,10 @@ public class TestCaseService { list.add(new TestCaseExcelData()); TestCaseExcelData explain = new TestCaseExcelData(); - explain.setName(Translator.get("do_not_modify_header_order")); + explain.setName(Translator.get("do_not_modify_header_order") + "," + Translator.get("num_needed_modify_testcase") + "," + Translator.get("num_needless_create_testcase")); explain.setNodePath(Translator.get("module_created_automatically")); explain.setType(Translator.get("options") + "(functional、performance、api)"); + explain.setTags(Translator.get("tag_tip_pattern")); // explain.setMethod(Translator.get("options") + "(manual、auto)"); explain.setPriority(Translator.get("options") + "(P0、P1、P2、P3)"); explain.setMaintainer(Translator.get("please_input_workspace_member")); diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties index ecb733d2cd..0c20378413 100644 --- a/backend/src/main/resources/i18n/messages_en_US.properties +++ b/backend/src/main/resources/i18n/messages_en_US.properties @@ -126,6 +126,9 @@ test_manager=Test manager tester=Tester read_only_user=Read-only user module=Module +num_needed_modify_testcase=ID is needed when modifying testcase +num_needless_create_testcase=ID is needless when creating testcase +tag_tip_pattern=Labels should be separated by semicolons or commas preconditions_optional=Preconditions optional step_tip_separate=Each step is separated by a new line step_tip_order=The serial number can be marked before the step diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties index f158ce921c..bcb263b3c8 100644 --- a/backend/src/main/resources/i18n/messages_zh_CN.properties +++ b/backend/src/main/resources/i18n/messages_zh_CN.properties @@ -126,6 +126,9 @@ test_manager=测试经理 tester=测试成员 read_only_user=只读用户 module=模块 +num_needed_modify_testcase=修改用例时ID必填 +num_needless_create_testcase=创建用例时无需ID +tag_tip_pattern=标签之间以分号或者逗号隔开 preconditions_optional=前置条件选填 step_tip_separate=每个步骤以换行分隔 step_tip_order=步骤前可标序号 diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties index 321e8630fb..eccfd47a3a 100644 --- a/backend/src/main/resources/i18n/messages_zh_TW.properties +++ b/backend/src/main/resources/i18n/messages_zh_TW.properties @@ -126,6 +126,9 @@ test_manager=測試經理 tester=測試成員 read_only_user=只讀用戶 module=模塊 +num_needed_modify_testcase=修改用例時ID必填 +num_needless_create_testcase=創建用例時無需ID +tag_tip_pattern=標籤之間以分號或者逗號隔開 preconditions_optional=前置條件選填 step_tip_separate=每個步驟以換行分隔 step_tip_order=步驟前可標序號