feat(测试跟踪): 用例导出支持选择字段
--story=1008224 --user=陈建星 用例导出/导入支持自定义字段 https://www.tapd.cn/55049933/s/1225482
This commit is contained in:
parent
fe2c26cf14
commit
dee57844ae
|
@ -61,4 +61,8 @@ public enum TestCaseImportFiled {
|
||||||
}
|
}
|
||||||
return tags;
|
return tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean containsHead(String head) {
|
||||||
|
return filedLangMap.values().contains(head);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
package io.metersphere.excel.converter;
|
||||||
|
|
||||||
|
import io.metersphere.commons.constants.TestCaseCommentType;
|
||||||
|
import io.metersphere.commons.constants.TestPlanTestCaseStatus;
|
||||||
|
import io.metersphere.commons.constants.TestReviewCaseStatus;
|
||||||
|
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||||
|
import io.metersphere.commons.utils.DateUtils;
|
||||||
|
import io.metersphere.i18n.Translator;
|
||||||
|
import io.metersphere.track.dto.TestCaseCommentDTO;
|
||||||
|
import io.metersphere.track.dto.TestCaseDTO;
|
||||||
|
import io.metersphere.track.service.TestCaseCommentService;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TestCaseExportCommendConverter implements TestCaseExportConverter {
|
||||||
|
|
||||||
|
private HashMap<String, String> commendTypeMap = new HashMap<>();
|
||||||
|
private HashMap<String, String> planCaseStatusMap = new HashMap<>();
|
||||||
|
private HashMap<String, String> reviewCaseStatusMap = new HashMap<>();
|
||||||
|
|
||||||
|
public TestCaseExportCommendConverter() {
|
||||||
|
commendTypeMap.put(TestCaseCommentType.CASE.name(), "test_case_comment");
|
||||||
|
commendTypeMap.put(TestCaseCommentType.PLAN.name(), "test_case_plan_comment");
|
||||||
|
commendTypeMap.put(TestCaseCommentType.REVIEW.name(), "test_case_review_comment");
|
||||||
|
|
||||||
|
planCaseStatusMap.put(TestPlanTestCaseStatus.Pass.name(), "execute_pass");
|
||||||
|
planCaseStatusMap.put(TestPlanTestCaseStatus.Underway.name(), "test_case_status_prepare");
|
||||||
|
planCaseStatusMap.put(TestPlanTestCaseStatus.Blocking.name(), "plan_case_status_blocking");
|
||||||
|
planCaseStatusMap.put(TestPlanTestCaseStatus.Failure.name(), "test_case_status_error");
|
||||||
|
planCaseStatusMap.put(TestPlanTestCaseStatus.Skip.name(), "plan_case_status_skip");
|
||||||
|
|
||||||
|
reviewCaseStatusMap.put(TestReviewCaseStatus.Prepare.name(), "test_case_status_prepare");
|
||||||
|
reviewCaseStatusMap.put(TestReviewCaseStatus.Pass.name(), "execute_pass");
|
||||||
|
reviewCaseStatusMap.put(TestReviewCaseStatus.UnPass.name(), "execute_not_pass");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String parse(TestCaseDTO testCase) {
|
||||||
|
TestCaseCommentService testCaseCommentService = CommonBeanFactory.getBean(TestCaseCommentService.class);
|
||||||
|
List<TestCaseCommentDTO> caseComments = testCaseCommentService.getCaseComments(testCase.getId());
|
||||||
|
StringBuilder result = new StringBuilder();
|
||||||
|
String template = Translator.get("test_case_comment_template");
|
||||||
|
caseComments.forEach(comment -> {
|
||||||
|
String authorName = comment.getAuthorName();
|
||||||
|
String type = getFromMapOfNullableWithTranslate(commendTypeMap, comment.getType());
|
||||||
|
String status = "";
|
||||||
|
if (StringUtils.equals(comment.getType(), TestCaseCommentType.PLAN.name())) {
|
||||||
|
status = getFromMapOfNullableWithTranslate(planCaseStatusMap, comment.getStatus());
|
||||||
|
status = "[".concat(status).concat("]");
|
||||||
|
} else if (StringUtils.equals(comment.getType(), TestCaseCommentType.REVIEW.name())) {
|
||||||
|
status = getFromMapOfNullableWithTranslate(reviewCaseStatusMap, comment.getStatus());
|
||||||
|
status = "[".concat(status).concat("]");
|
||||||
|
}
|
||||||
|
String updateTime = DateUtils.getTimeString(comment.getUpdateTime());
|
||||||
|
String description = comment.getDescription();
|
||||||
|
result.append(String.format(template, authorName, type, status, updateTime, description));
|
||||||
|
});
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package io.metersphere.excel.converter;
|
||||||
|
|
||||||
|
import io.metersphere.i18n.Translator;
|
||||||
|
import io.metersphere.track.dto.TestCaseDTO;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 功能用例导出时解析其他字段对应的列
|
||||||
|
* @author jianxing
|
||||||
|
*/
|
||||||
|
public interface TestCaseExportConverter {
|
||||||
|
|
||||||
|
String parse(TestCaseDTO testCase);
|
||||||
|
|
||||||
|
default String getFromMapOfNullable(Map<String, String> map, String key) {
|
||||||
|
if (StringUtils.isNotBlank(key)) {
|
||||||
|
return map.get(key);
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
default String getFromMapOfNullableWithTranslate(Map<String, String> map, String key) {
|
||||||
|
String value = getFromMapOfNullable(map, key);
|
||||||
|
if (StringUtils.isNotBlank(value)) {
|
||||||
|
return Translator.get(value);
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
package io.metersphere.excel.converter;
|
||||||
|
|
||||||
|
import io.metersphere.commons.utils.LogUtil;
|
||||||
|
import io.metersphere.track.constants.TestCaseExportOtherField;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class TestCaseExportConverterFactory {
|
||||||
|
|
||||||
|
public static Map<String, TestCaseExportConverter> getConverters(List<String> keys) {
|
||||||
|
Map<String, TestCaseExportConverter> converterMapResult = new HashMap<>();
|
||||||
|
try {
|
||||||
|
HashMap<String, Class<? extends TestCaseExportConverter>> converterMap = getConverterMap();
|
||||||
|
for (String key : keys) {
|
||||||
|
Class<? extends TestCaseExportConverter> clazz = converterMap.get(key);
|
||||||
|
if (clazz != null) {
|
||||||
|
converterMapResult.put(key, clazz.getDeclaredConstructor().newInstance());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
LogUtil.error(e);
|
||||||
|
}
|
||||||
|
return converterMapResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TestCaseExportConverter getConverter(String key) {
|
||||||
|
try {
|
||||||
|
Class<? extends TestCaseExportConverter> clazz = getConverterMap().get(key);
|
||||||
|
if (clazz != null) {
|
||||||
|
return clazz.getDeclaredConstructor().newInstance();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
LogUtil.error(e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HashMap<String, Class<? extends TestCaseExportConverter>> getConverterMap() {
|
||||||
|
return new HashMap<>() {{
|
||||||
|
put(TestCaseExportOtherField.VERSION.getValue(), TestCaseExportVersionConverter.class);
|
||||||
|
put(TestCaseExportOtherField.COMMEND.getValue(), TestCaseExportCommendConverter.class);
|
||||||
|
put(TestCaseExportOtherField.EXECUTE_RESULT.getValue(), TestCaseExportExecuteResultConverter.class);
|
||||||
|
put(TestCaseExportOtherField.REVIEW_RESULT.getValue(), TestCaseExportReviewResultConverter.class);
|
||||||
|
put(TestCaseExportOtherField.CREATOR.getValue(), TestCaseExportCreatorConverter.class);
|
||||||
|
put(TestCaseExportOtherField.CREATE_TIME.getValue(), TestCaseExportCreateTimeConverter.class);
|
||||||
|
put(TestCaseExportOtherField.UPDATE_TIME.getValue(), TestCaseExportUpdateTimeConverter.class);
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package io.metersphere.excel.converter;
|
||||||
|
|
||||||
|
import io.metersphere.commons.utils.DateUtils;
|
||||||
|
import io.metersphere.track.dto.TestCaseDTO;
|
||||||
|
|
||||||
|
public class TestCaseExportCreateTimeConverter implements TestCaseExportConverter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String parse(TestCaseDTO testCase) {
|
||||||
|
return DateUtils.getTimeString(testCase.getCreateTime());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package io.metersphere.excel.converter;
|
||||||
|
|
||||||
|
import io.metersphere.base.domain.User;
|
||||||
|
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||||
|
import io.metersphere.commons.utils.SessionUtils;
|
||||||
|
import io.metersphere.service.UserService;
|
||||||
|
import io.metersphere.track.dto.TestCaseDTO;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class TestCaseExportCreatorConverter implements TestCaseExportConverter {
|
||||||
|
|
||||||
|
private Map<String, String> userMap = new HashMap<>();
|
||||||
|
|
||||||
|
public TestCaseExportCreatorConverter() {
|
||||||
|
UserService userService = CommonBeanFactory.getBean(UserService.class);
|
||||||
|
List<User> memberOption = userService.getProjectMemberOption(SessionUtils.getCurrentProjectId());
|
||||||
|
memberOption.forEach(option -> userMap.put(option.getId(), option.getName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String parse(TestCaseDTO testCase) {
|
||||||
|
return getFromMapOfNullable(userMap, testCase.getCreateUser());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package io.metersphere.excel.converter;
|
||||||
|
|
||||||
|
import io.metersphere.commons.constants.TestPlanTestCaseStatus;
|
||||||
|
import io.metersphere.track.dto.TestCaseDTO;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class TestCaseExportExecuteResultConverter implements TestCaseExportConverter {
|
||||||
|
|
||||||
|
private Map<String, String> planCaseStatusMap = new HashMap<>();
|
||||||
|
|
||||||
|
public TestCaseExportExecuteResultConverter() {
|
||||||
|
planCaseStatusMap.put(TestPlanTestCaseStatus.Pass.name(), "execute_pass");
|
||||||
|
planCaseStatusMap.put(TestPlanTestCaseStatus.Underway.name(), "test_case_status_prepare");
|
||||||
|
planCaseStatusMap.put(TestPlanTestCaseStatus.Blocking.name(), "plan_case_status_blocking");
|
||||||
|
planCaseStatusMap.put(TestPlanTestCaseStatus.Failure.name(), "test_case_status_error");
|
||||||
|
planCaseStatusMap.put(TestPlanTestCaseStatus.Skip.name(), "plan_case_status_skip");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String parse(TestCaseDTO testCase) {
|
||||||
|
return getFromMapOfNullableWithTranslate(planCaseStatusMap, testCase.getLastExecuteResult());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package io.metersphere.excel.converter;
|
||||||
|
|
||||||
|
import io.metersphere.commons.constants.TestReviewCaseStatus;
|
||||||
|
import io.metersphere.track.dto.TestCaseDTO;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class TestCaseExportReviewResultConverter implements TestCaseExportConverter {
|
||||||
|
|
||||||
|
private Map<String, String> reviewCaseStatusMap = new HashMap<>();
|
||||||
|
|
||||||
|
public TestCaseExportReviewResultConverter() {
|
||||||
|
reviewCaseStatusMap.put(TestReviewCaseStatus.Prepare.name(), "test_case_status_prepare");
|
||||||
|
reviewCaseStatusMap.put(TestReviewCaseStatus.Pass.name(), "execute_pass");
|
||||||
|
reviewCaseStatusMap.put(TestReviewCaseStatus.UnPass.name(), "execute_not_pass");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String parse(TestCaseDTO testCase) {
|
||||||
|
return getFromMapOfNullableWithTranslate(reviewCaseStatusMap, testCase.getReviewStatus());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package io.metersphere.excel.converter;
|
||||||
|
|
||||||
|
import io.metersphere.commons.utils.DateUtils;
|
||||||
|
import io.metersphere.track.dto.TestCaseDTO;
|
||||||
|
|
||||||
|
public class TestCaseExportUpdateTimeConverter implements TestCaseExportConverter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String parse(TestCaseDTO testCase) {
|
||||||
|
return DateUtils.getTimeString(testCase.getUpdateTime());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package io.metersphere.excel.converter;
|
||||||
|
|
||||||
|
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||||
|
import io.metersphere.commons.utils.SessionUtils;
|
||||||
|
import io.metersphere.dto.ProjectVersionDTO;
|
||||||
|
import io.metersphere.service.ProjectVersionService;
|
||||||
|
import io.metersphere.track.dto.TestCaseDTO;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class TestCaseExportVersionConverter implements TestCaseExportConverter {
|
||||||
|
|
||||||
|
private Map<String, String> versionMap = new HashMap<>();
|
||||||
|
|
||||||
|
public TestCaseExportVersionConverter() {
|
||||||
|
ProjectVersionService projectVersionService = CommonBeanFactory.getBean(ProjectVersionService.class);
|
||||||
|
List<ProjectVersionDTO> projectVersions = projectVersionService.getProjectVersions(SessionUtils.getCurrentProjectId());
|
||||||
|
projectVersions.forEach(i -> versionMap.put(i.getId(), i.getName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String parse(TestCaseDTO testCase) {
|
||||||
|
return getFromMapOfNullable(versionMap, testCase.getVersionId());
|
||||||
|
}
|
||||||
|
}
|
|
@ -54,6 +54,8 @@ public class TestCaseExcelData {
|
||||||
List<String> mergeStepDesc;
|
List<String> mergeStepDesc;
|
||||||
@ExcelIgnore
|
@ExcelIgnore
|
||||||
List<String> mergeStepResult;
|
List<String> mergeStepResult;
|
||||||
|
@ExcelIgnore
|
||||||
|
Map<String, String> otherFields;
|
||||||
|
|
||||||
public List<List<String>> getHead(boolean needNum, List<CustomFieldDao> customFields) {
|
public List<List<String>> getHead(boolean needNum, List<CustomFieldDao> customFields) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
|
|
|
@ -24,9 +24,9 @@ public class FunctionCaseMergeWriteHandler implements RowWriteHandler {
|
||||||
for (int i = 0; i < headList.size(); i++) {
|
for (int i = 0; i < headList.size(); i++) {
|
||||||
List<String> list = headList.get(i);
|
List<String> list = headList.get(i);
|
||||||
for (String head : list) {
|
for (String head : list) {
|
||||||
if (TestCaseImportFiled.STEP_DESC.getFiledLangMap().values().contains(head)) {
|
if (TestCaseImportFiled.STEP_DESC.containsHead(head)) {
|
||||||
stepDescRowIndex = i;
|
stepDescRowIndex = i;
|
||||||
} else if (TestCaseImportFiled.STEP_RESULT.getFiledLangMap().values().contains(head)) {
|
} else if (TestCaseImportFiled.STEP_RESULT.containsHead(head)) {
|
||||||
stepResultRowIndex = i;
|
stepResultRowIndex = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,37 +1,45 @@
|
||||||
package io.metersphere.excel.handler;
|
package io.metersphere.excel.handler;
|
||||||
|
|
||||||
import com.alibaba.excel.util.BooleanUtils;
|
import com.alibaba.excel.util.BooleanUtils;
|
||||||
|
import com.alibaba.excel.write.handler.RowWriteHandler;
|
||||||
import com.alibaba.excel.write.handler.context.RowWriteHandlerContext;
|
import com.alibaba.excel.write.handler.context.RowWriteHandlerContext;
|
||||||
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
|
||||||
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
|
|
||||||
import com.alibaba.excel.write.style.row.AbstractRowHeightStyleStrategy;
|
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import io.metersphere.excel.constants.TestCaseImportFiled;
|
||||||
import io.metersphere.i18n.Translator;
|
import io.metersphere.i18n.Translator;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.apache.poi.ss.usermodel.Comment;
|
import org.apache.poi.ss.usermodel.Comment;
|
||||||
import org.apache.poi.ss.usermodel.Drawing;
|
import org.apache.poi.ss.usermodel.Drawing;
|
||||||
import org.apache.poi.ss.usermodel.Row;
|
|
||||||
import org.apache.poi.ss.usermodel.Sheet;
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
|
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
|
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author song.tianyang
|
* @author song.tianyang
|
||||||
* @Date 2021/5/7 2:17 下午
|
* @Date 2021/5/7 2:17 下午
|
||||||
* @Description
|
* @Description
|
||||||
*/
|
*/
|
||||||
public class FunctionCaseTemplateWriteHandler extends AbstractRowHeightStyleStrategy {
|
public class FunctionCaseTemplateWriteHandler implements RowWriteHandler {
|
||||||
|
|
||||||
private boolean isNeedId;
|
private boolean isNeedId;
|
||||||
Map<String, Integer> rowDispseIndexMap;
|
Map<String, Integer> rowDisposeIndexMap;
|
||||||
Map<String, List<String>> caseLevelAndStatusValueMap;
|
Map<String, List<String>> caseLevelAndStatusValueMap;
|
||||||
|
|
||||||
|
private Integer idIndex;
|
||||||
|
private Integer moduleIndex;
|
||||||
|
private Integer maintainerIndex;
|
||||||
|
private Integer priorityIndex;
|
||||||
|
private Integer tagIndex;
|
||||||
|
private Integer statusIndex;
|
||||||
|
private Integer stepModelIndex;
|
||||||
|
|
||||||
public FunctionCaseTemplateWriteHandler(boolean isNeedId, List<List<String>> headList, Map<String, List<String>> caseLevelAndStatusValueMap) {
|
public FunctionCaseTemplateWriteHandler(boolean isNeedId, List<List<String>> headList, Map<String, List<String>> caseLevelAndStatusValueMap) {
|
||||||
this.isNeedId = isNeedId;
|
this.isNeedId = isNeedId;
|
||||||
rowDispseIndexMap = this.buildFiledMap(headList);
|
rowDisposeIndexMap = this.buildFiledMap(headList);
|
||||||
this.caseLevelAndStatusValueMap = caseLevelAndStatusValueMap;
|
this.caseLevelAndStatusValueMap = caseLevelAndStatusValueMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,20 +49,20 @@ public class FunctionCaseTemplateWriteHandler extends AbstractRowHeightStyleStra
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (List<String> list : headList) {
|
for (List<String> list : headList) {
|
||||||
for (String head : list) {
|
for (String head : list) {
|
||||||
if (StringUtils.equalsAnyIgnoreCase(head, "id")) {
|
if (TestCaseImportFiled.ID.containsHead(head)) {
|
||||||
returnMap.put("ID", index);
|
idIndex = index;
|
||||||
} else if (StringUtils.equalsAnyIgnoreCase(head, "所属模块", "所屬模塊", "Module")) {
|
} else if (TestCaseImportFiled.MODULE.containsHead(head)) {
|
||||||
returnMap.put("Module", index);
|
moduleIndex = index;
|
||||||
} else if (StringUtils.equalsAnyIgnoreCase(head, "责任人(ID)", "維護人(ID)", "Maintainer(ID)")) {
|
} else if (TestCaseImportFiled.MAINTAINER.containsHead(head)) {
|
||||||
returnMap.put("Maintainer", index);
|
maintainerIndex = index;
|
||||||
} else if (StringUtils.equalsAnyIgnoreCase(head, "用例等级", "用例等級", "Priority")) {
|
} else if (TestCaseImportFiled.PRIORITY.containsHead(head)) {
|
||||||
returnMap.put("Priority", index);
|
priorityIndex = index;
|
||||||
} else if (StringUtils.equalsAnyIgnoreCase(head, "标签", "標簽", "Tag")) {
|
} else if (TestCaseImportFiled.TAG.containsHead(head)) {
|
||||||
returnMap.put("Tag", index);
|
tagIndex = index;
|
||||||
} else if (StringUtils.equalsAnyIgnoreCase(head, "用例状态", "用例狀態", "Case status")) {
|
} else if (TestCaseImportFiled.STATUS.containsHead(head)) {
|
||||||
returnMap.put("Status", index);
|
statusIndex = index;
|
||||||
} else if (StringUtils.equalsAnyIgnoreCase(head, "编辑模式", "編輯模式", "Edit Model")) {
|
} else if (TestCaseImportFiled.STEP_MODEL.containsHead(head)) {
|
||||||
returnMap.put("StepModel", index);
|
stepModelIndex = index;
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
@ -62,14 +70,6 @@ public class FunctionCaseTemplateWriteHandler extends AbstractRowHeightStyleStra
|
||||||
return returnMap;
|
return returnMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Integer rowIndex, Integer relativeRowIndex, Boolean isHead) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterRowDispose(RowWriteHandlerContext context) {
|
public void afterRowDispose(RowWriteHandlerContext context) {
|
||||||
|
|
||||||
|
@ -77,68 +77,43 @@ public class FunctionCaseTemplateWriteHandler extends AbstractRowHeightStyleStra
|
||||||
Sheet sheet = context.getWriteSheetHolder().getSheet();
|
Sheet sheet = context.getWriteSheetHolder().getSheet();
|
||||||
Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();
|
Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();
|
||||||
|
|
||||||
if (rowDispseIndexMap != null) {
|
if (rowDisposeIndexMap != null) {
|
||||||
if (isNeedId) {
|
if (isNeedId) {
|
||||||
Integer idIndex = rowDispseIndexMap.get("ID");
|
setComment(sheet, drawingPatriarch, idIndex, Translator.get("do_not_modify_header_order") + "," + Translator.get("id_required"));
|
||||||
if(idIndex != null){
|
|
||||||
Comment comment1 = drawingPatriarch.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, idIndex, 0, idIndex + 3, 1));
|
|
||||||
comment1.setString(new XSSFRichTextString(Translator.get("do_not_modify_header_order")+","+Translator.get("id_required")));
|
|
||||||
sheet.getRow(0).getCell(1).setCellComment(comment1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for (Map.Entry<String, Integer> entry : rowDispseIndexMap.entrySet()) {
|
|
||||||
String coloum = entry.getKey();
|
|
||||||
Integer index = entry.getValue();
|
|
||||||
|
|
||||||
if(StringUtils.equalsAnyIgnoreCase(coloum,"Module")){
|
setComment(sheet, drawingPatriarch, moduleIndex, Translator.get("module_created_automatically"));
|
||||||
Comment comment = drawingPatriarch.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, index, 0, index + 3 , 1));
|
setComment(sheet, drawingPatriarch, maintainerIndex, Translator.get("please_input_project_member"));
|
||||||
comment.setString(new XSSFRichTextString(Translator.get("module_created_automatically")));
|
setComment(sheet, drawingPatriarch, tagIndex, Translator.get("tag_tip_pattern"));
|
||||||
sheet.getRow(0).getCell(1).setCellComment(comment);
|
setComment(sheet, drawingPatriarch, stepModelIndex, Translator.get("step_model_tip"));
|
||||||
}else if(StringUtils.equalsAnyIgnoreCase(coloum,"Maintainer")){
|
|
||||||
Comment comment = drawingPatriarch.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, index, 0, index + 3, 1));
|
List<String> list = new ArrayList<>();
|
||||||
comment.setString(new XSSFRichTextString(Translator.get("please_input_project_member")));
|
if (caseLevelAndStatusValueMap != null && caseLevelAndStatusValueMap.containsKey("caseLevel")) {
|
||||||
sheet.getRow(0).getCell(1).setCellComment(comment);
|
list = caseLevelAndStatusValueMap.get("caseLevel");
|
||||||
}else if(StringUtils.equalsAnyIgnoreCase(coloum,"Priority")){
|
}
|
||||||
Comment comment = drawingPatriarch.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, index, 0, index + 3, 1));
|
if (CollectionUtils.isEmpty(list)) {
|
||||||
List<String> list = new ArrayList<>();
|
setComment(sheet, drawingPatriarch, priorityIndex, Translator.get("options") + "(P0、P1、P2、P3)");
|
||||||
if (caseLevelAndStatusValueMap != null && caseLevelAndStatusValueMap.containsKey("caseLevel")) {
|
} else {
|
||||||
list = caseLevelAndStatusValueMap.get("caseLevel");
|
setComment(sheet, drawingPatriarch, priorityIndex, Translator.get("options") + JSONArray.toJSONString(list));
|
||||||
}
|
}
|
||||||
if (CollectionUtils.isEmpty(list)) {
|
|
||||||
comment.setString(new XSSFRichTextString(Translator.get("options") + "(P0、P1、P2、P3)"));
|
list.clear();
|
||||||
} else {
|
if (caseLevelAndStatusValueMap != null && caseLevelAndStatusValueMap.containsKey("caseStatus")) {
|
||||||
comment.setString(new XSSFRichTextString(Translator.get("options") + JSONArray.toJSONString(list)));
|
list = caseLevelAndStatusValueMap.get("caseStatus");
|
||||||
}
|
}
|
||||||
sheet.getRow(0).getCell(1).setCellComment(comment);
|
if (CollectionUtils.isNotEmpty(list)) {
|
||||||
}else if(StringUtils.equalsAnyIgnoreCase(coloum,"Tag")){
|
setComment(sheet, drawingPatriarch, statusIndex, Translator.get("options") + JSONArray.toJSONString(list));
|
||||||
Comment comment = drawingPatriarch.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, index, 0, index + 3, 1));
|
|
||||||
comment.setString(new XSSFRichTextString(Translator.get("tag_tip_pattern")));
|
|
||||||
sheet.getRow(0).getCell(1).setCellComment(comment);
|
|
||||||
} else if (StringUtils.equalsAnyIgnoreCase(coloum, "Status")) {
|
|
||||||
List<String> list = new ArrayList<>();
|
|
||||||
if (caseLevelAndStatusValueMap != null && caseLevelAndStatusValueMap.containsKey("caseStatus")) {
|
|
||||||
list = caseLevelAndStatusValueMap.get("caseStatus");
|
|
||||||
}
|
|
||||||
if (!CollectionUtils.isEmpty(list)) {
|
|
||||||
Comment comment = drawingPatriarch.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, index, 0, index + 3, 1));
|
|
||||||
comment.setString(new XSSFRichTextString(Translator.get("options") + JSONArray.toJSONString(list)));
|
|
||||||
sheet.getRow(0).getCell(1).setCellComment(comment);
|
|
||||||
}
|
|
||||||
} else if (StringUtils.equalsAnyIgnoreCase(coloum, "StepModel")) {
|
|
||||||
Comment comment = drawingPatriarch.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, index, 0, index + 3, 1));
|
|
||||||
comment.setString(new XSSFRichTextString(Translator.get("step_model_tip")));
|
|
||||||
sheet.getRow(0).getCell(1).setCellComment(comment);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private void setComment(Sheet sheet, Drawing<?> drawingPatriarch, Integer index, String text) {
|
||||||
protected void setHeadColumnHeight(Row row, int relativeRowIndex) {
|
if (index == null) {
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
@Override
|
Comment comment = drawingPatriarch.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, index, 0, index + 3, 1));
|
||||||
protected void setContentColumnHeight(Row row, int relativeRowIndex) {
|
comment.setString(new XSSFRichTextString(text));
|
||||||
|
sheet.getRow(0).getCell(1).setCellComment(comment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
package io.metersphere.track.constants;
|
||||||
|
|
||||||
|
public enum TestCaseExportOtherField {
|
||||||
|
VERSION("version"),
|
||||||
|
COMMEND("commend"),
|
||||||
|
EXECUTE_RESULT("executeResult"),
|
||||||
|
REVIEW_RESULT("reviewResult"),
|
||||||
|
CREATOR("creator"),
|
||||||
|
CREATE_TIME("createTime"),
|
||||||
|
UPDATE_TIME("updateTime");
|
||||||
|
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
TestCaseExportOtherField(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
|
@ -287,7 +287,7 @@ public class TestCaseController {
|
||||||
@PostMapping("/export/testcase")
|
@PostMapping("/export/testcase")
|
||||||
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EXPORT)
|
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EXPORT)
|
||||||
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.EXPORT, sourceId = "#request.id", title = "#request.name", project = "#request.projectId")
|
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.EXPORT, sourceId = "#request.id", title = "#request.name", project = "#request.projectId")
|
||||||
public void testCaseExport(HttpServletResponse response, @RequestBody TestCaseBatchRequest request) {
|
public void testCaseExport(HttpServletResponse response, @RequestBody TestCaseExportRequest request) {
|
||||||
testCaseService.testCaseExport(response, request);
|
testCaseService.testCaseExport(response, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@ public class TestCaseDTO extends TestCaseWithBLOBs {
|
||||||
private String lastResultId;
|
private String lastResultId;
|
||||||
private String projectName;
|
private String projectName;
|
||||||
private String createName;
|
private String createName;
|
||||||
private String lastExecuteResult;
|
|
||||||
private String versionName;
|
private String versionName;
|
||||||
private List<CustomFieldDao> fields;
|
private List<CustomFieldDao> fields;
|
||||||
private List<String> caseTags = new ArrayList<>();
|
private List<String> caseTags = new ArrayList<>();
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
package io.metersphere.track.request.testcase;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class TestCaseExportRequest extends TestCaseBatchRequest {
|
||||||
|
private List<TestCaseExportHeader> baseHeaders;
|
||||||
|
private List<TestCaseExportHeader> customHeaders;
|
||||||
|
private List<TestCaseExportHeader> otherHeaders;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public static class TestCaseExportHeader {
|
||||||
|
private String id;
|
||||||
|
private String name;
|
||||||
|
}
|
||||||
|
}
|
|
@ -31,6 +31,8 @@ import io.metersphere.controller.request.ResetOrderRequest;
|
||||||
import io.metersphere.controller.request.member.QueryMemberRequest;
|
import io.metersphere.controller.request.member.QueryMemberRequest;
|
||||||
import io.metersphere.dto.*;
|
import io.metersphere.dto.*;
|
||||||
import io.metersphere.excel.constants.TestCaseImportFiled;
|
import io.metersphere.excel.constants.TestCaseImportFiled;
|
||||||
|
import io.metersphere.excel.converter.TestCaseExportConverter;
|
||||||
|
import io.metersphere.excel.converter.TestCaseExportConverterFactory;
|
||||||
import io.metersphere.excel.domain.*;
|
import io.metersphere.excel.domain.*;
|
||||||
import io.metersphere.excel.handler.FunctionCaseMergeWriteHandler;
|
import io.metersphere.excel.handler.FunctionCaseMergeWriteHandler;
|
||||||
import io.metersphere.excel.handler.FunctionCaseTemplateWriteHandler;
|
import io.metersphere.excel.handler.FunctionCaseTemplateWriteHandler;
|
||||||
|
@ -63,6 +65,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.ibatis.session.ExecutorType;
|
import org.apache.ibatis.session.ExecutorType;
|
||||||
import org.apache.ibatis.session.SqlSession;
|
import org.apache.ibatis.session.SqlSession;
|
||||||
import org.apache.ibatis.session.SqlSessionFactory;
|
import org.apache.ibatis.session.SqlSessionFactory;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.mybatis.spring.SqlSessionUtils;
|
import org.mybatis.spring.SqlSessionUtils;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
@ -1326,38 +1329,73 @@ public class TestCaseService {
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testCaseExport(HttpServletResponse response, TestCaseExportRequest request) {
|
||||||
|
|
||||||
public void testCaseExport(HttpServletResponse response, TestCaseBatchRequest request) {
|
|
||||||
String projectId = request.getProjectId();
|
String projectId = request.getProjectId();
|
||||||
request.getCondition().setStatusIsNot(CommonConstants.TrashStatus);
|
request.getCondition().setStatusIsNot(CommonConstants.TrashStatus);
|
||||||
List<TestCaseDTO> testCaseList = getExportData(request);
|
List<TestCaseDTO> testCases = getExportData(request);
|
||||||
testCaseExport(response, projectId, testCaseList, true);
|
List<List<String>> headList = getTestcaseExportHeads(request);
|
||||||
}
|
|
||||||
|
|
||||||
public void testCaseExport(HttpServletResponse response, String projectId, List<TestCaseDTO> testCaseList, boolean needIdCol) {
|
|
||||||
TestCaseExcelData testCaseExcelData = new TestCaseExcelDataFactory().getTestCaseExcelDataLocal();
|
|
||||||
Map<Integer, Integer> rowMergeInfo = new HashMap<>();
|
Map<Integer, Integer> rowMergeInfo = new HashMap<>();
|
||||||
TestCaseTemplateDao testCaseTemplate = testCaseTemplateService.getTemplate(projectId);
|
|
||||||
List<CustomFieldDao> customFields = Optional.ofNullable(testCaseTemplate.getCustomFields()).orElse(new ArrayList<>());
|
|
||||||
List<List<String>> headList = testCaseExcelData.getHead(needIdCol, customFields);
|
|
||||||
FunctionCaseMergeWriteHandler writeHandler = new FunctionCaseMergeWriteHandler(rowMergeInfo, headList);
|
FunctionCaseMergeWriteHandler writeHandler = new FunctionCaseMergeWriteHandler(rowMergeInfo, headList);
|
||||||
boolean isUseCustomId = projectService.useCustomNum(projectId);
|
boolean isUseCustomId = projectService.useCustomNum(projectId);
|
||||||
|
|
||||||
Map<String, List<String>> caseLevelAndStatusValueMap = testCaseTemplateService.getCaseLevelAndStatusMapByProjectId(projectId);
|
Map<String, List<String>> caseLevelAndStatusValueMap = testCaseTemplateService.getCaseLevelAndStatusMapByProjectId(projectId);
|
||||||
FunctionCaseTemplateWriteHandler handler = new FunctionCaseTemplateWriteHandler(needIdCol, headList, caseLevelAndStatusValueMap);
|
FunctionCaseTemplateWriteHandler handler = new FunctionCaseTemplateWriteHandler(true, headList, caseLevelAndStatusValueMap);
|
||||||
|
|
||||||
List<TestCaseExcelData> excelData = parseCaseData2ExcelData(testCaseList, rowMergeInfo, isUseCustomId);
|
List<TestCaseExcelData> excelData = parseCaseData2ExcelData(testCases, rowMergeInfo, isUseCustomId, request.getOtherHeaders());
|
||||||
List<List<Object>> data = parseExcelData2List(headList, excelData);
|
List<List<Object>> data = parseExcelData2List(headList, excelData);
|
||||||
new EasyExcelExporter(testCaseExcelData.getClass())
|
new EasyExcelExporter(new TestCaseExcelDataFactory().getTestCaseExcelDataLocal().getClass())
|
||||||
.exportByCustomWriteHandler(response, headList, data, Translator.get("test_case_import_template_name"),
|
.exportByCustomWriteHandler(response, headList, data, Translator.get("test_case_import_template_name"),
|
||||||
Translator.get("test_case_import_template_sheet"), handler, writeHandler);
|
Translator.get("test_case_import_template_sheet"), handler, writeHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private List<List<String>> getTestcaseExportHeads(TestCaseExportRequest request) {
|
||||||
|
List<List<String>> headList = new ArrayList<>() {{
|
||||||
|
addAll(request.getBaseHeaders()
|
||||||
|
.stream()
|
||||||
|
.map(item -> Arrays.asList(item.getName()))
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
addAll(request.getCustomHeaders()
|
||||||
|
.stream()
|
||||||
|
.map(item -> Arrays.asList(item.getName()))
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
addAll(request.getOtherHeaders()
|
||||||
|
.stream()
|
||||||
|
.map(item -> Arrays.asList(item.getName()))
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
}};
|
||||||
|
return headList;
|
||||||
|
}
|
||||||
|
|
||||||
public void testCaseTemplateExport(String projectId, String importType, HttpServletResponse response) {
|
public void testCaseTemplateExport(String projectId, String importType, HttpServletResponse response) {
|
||||||
//导入更新 or 开启使用自定义ID时,导出ID列
|
//导入更新 or 开启使用自定义ID时,导出ID列
|
||||||
boolean needIdCol = projectService.useCustomNum(projectId) || StringUtils.equals(importType, FunctionCaseImportEnum.Update.name());
|
boolean needIdCol = projectService.useCustomNum(projectId) || StringUtils.equals(importType, FunctionCaseImportEnum.Update.name());
|
||||||
testCaseExport(response, projectId, generateExportData(projectId), needIdCol);
|
|
||||||
|
List<List<String>> heads = getExportTemplateHeads(projectId, needIdCol);
|
||||||
|
|
||||||
|
TestCaseExcelData testCaseExcelData = new TestCaseExcelDataFactory().getTestCaseExcelDataLocal();
|
||||||
|
Map<Integer, Integer> rowMergeInfo = new HashMap<>();
|
||||||
|
|
||||||
|
FunctionCaseMergeWriteHandler writeHandler = new FunctionCaseMergeWriteHandler(rowMergeInfo, heads);
|
||||||
|
boolean isUseCustomId = projectService.useCustomNum(projectId);
|
||||||
|
|
||||||
|
Map<String, List<String>> caseLevelAndStatusValueMap = testCaseTemplateService.getCaseLevelAndStatusMapByProjectId(projectId);
|
||||||
|
FunctionCaseTemplateWriteHandler handler = new FunctionCaseTemplateWriteHandler(needIdCol, heads, caseLevelAndStatusValueMap);
|
||||||
|
|
||||||
|
List<TestCaseExcelData> excelData = parseCaseData2ExcelData(generateExportData(projectId),
|
||||||
|
rowMergeInfo, isUseCustomId, null);
|
||||||
|
List<List<Object>> data = parseExcelData2List(heads, excelData);
|
||||||
|
new EasyExcelExporter(testCaseExcelData.getClass())
|
||||||
|
.exportByCustomWriteHandler(response, heads, data, Translator.get("test_case_import_template_name"),
|
||||||
|
Translator.get("test_case_import_template_sheet"), handler, writeHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<List<String>> getExportTemplateHeads(String projectId, boolean needIdCol) {
|
||||||
|
TestCaseTemplateDao testCaseTemplate = testCaseTemplateService.getTemplate(projectId);
|
||||||
|
List<CustomFieldDao> customFields = Optional.ofNullable(testCaseTemplate.getCustomFields()).orElse(new ArrayList<>());
|
||||||
|
List<List<String>> heads = new TestCaseExcelDataFactory().getTestCaseExcelDataLocal().getHead(needIdCol, customFields);
|
||||||
|
return heads;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1419,27 +1457,33 @@ public class TestCaseService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TestCaseImportFiled[] importFields = TestCaseImportFiled.values();
|
||||||
|
|
||||||
|
|
||||||
for (TestCaseExcelData model : data) {
|
for (TestCaseExcelData model : data) {
|
||||||
List<Object> fields = new ArrayList<>();
|
List<Object> fields = new ArrayList<>();
|
||||||
Map<String, String> customDataMaps = Optional.ofNullable(model.getCustomDatas()).orElse(new HashMap<>());
|
Map<String, String> customDataMaps = Optional.ofNullable(model.getCustomDatas())
|
||||||
TestCaseImportFiled[] importFields = TestCaseImportFiled.values();
|
.orElse(new HashMap<>());
|
||||||
|
Map<String, String> otherFieldMaps = Optional.ofNullable(model.getOtherFields())
|
||||||
|
.orElse(new HashMap<>());
|
||||||
for (String head : headList) {
|
for (String head : headList) {
|
||||||
boolean isSystemField = false;
|
boolean isSystemField = false;
|
||||||
for (TestCaseImportFiled importFiled : importFields) {
|
for (TestCaseImportFiled importFiled : importFields) {
|
||||||
if (importFiled.getFiledLangMap().values().contains(head)) {
|
if (importFiled.containsHead(head)) {
|
||||||
fields.add(importFiled.parseExcelDataValue(model));
|
fields.add(importFiled.parseExcelDataValue(model));
|
||||||
isSystemField = true;
|
isSystemField = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!isSystemField) {
|
if (!isSystemField) {
|
||||||
String value = customDataMaps.get(head);
|
String value = customDataMaps.get(head);
|
||||||
|
if (value == null) {
|
||||||
|
value = otherFieldMaps.get(head);
|
||||||
|
}
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
value = "";
|
value = "";
|
||||||
}
|
}
|
||||||
fields.add(value);
|
fields.add(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
result.add(fields);
|
result.add(fields);
|
||||||
}
|
}
|
||||||
|
@ -1467,8 +1511,8 @@ public class TestCaseService {
|
||||||
return testCaseList;
|
return testCaseList;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<TestCaseExcelData> parseCaseData2ExcelData(List<TestCaseDTO> testCaseList,
|
private List<TestCaseExcelData> parseCaseData2ExcelData(List<TestCaseDTO> testCaseList, Map<Integer, Integer> rowMergeInfo,
|
||||||
Map<Integer, Integer> rowMergeInfo, Boolean isUseCustomId) {
|
Boolean isUseCustomId, List<TestCaseExportRequest.TestCaseExportHeader> otherHeaders) {
|
||||||
if (CollectionUtils.isEmpty(testCaseList)) {
|
if (CollectionUtils.isEmpty(testCaseList)) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
@ -1491,41 +1535,18 @@ public class TestCaseService {
|
||||||
TestCaseDTO t = testCaseList.get(rowIndex);
|
TestCaseDTO t = testCaseList.get(rowIndex);
|
||||||
List<String> stepDescList = new ArrayList<>();
|
List<String> stepDescList = new ArrayList<>();
|
||||||
List<String> stepResultList = new ArrayList<>();
|
List<String> stepResultList = new ArrayList<>();
|
||||||
|
TestCaseExcelData data = new TestCaseExcelData();
|
||||||
|
|
||||||
setExportSystemField(t, customNameMap, customSelectValueMap);
|
setExportSystemField(t, customNameMap, customSelectValueMap);
|
||||||
TestCaseExcelData data = new TestCaseExcelData();
|
|
||||||
BeanUtils.copyBean(data, t);
|
BeanUtils.copyBean(data, t);
|
||||||
if (isUseCustomId) {
|
buildExportCustomNum(isUseCustomId, t, data);
|
||||||
data.setCustomNum(t.getCustomNum());
|
|
||||||
} else {
|
|
||||||
if (t.getNum() == null) {
|
|
||||||
data.setCustomNum("");
|
|
||||||
} else {
|
|
||||||
data.setCustomNum(String.valueOf(t.getNum()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
buildExportStep(t, stepDescList, stepResultList, data);
|
buildExportStep(t, stepDescList, stepResultList, data);
|
||||||
buildExportCustomField(customSelectValueMap, customNameMap, t, data);
|
buildExportCustomField(customSelectValueMap, customNameMap, t, data);
|
||||||
|
buildExportOtherField(data, t, otherHeaders);
|
||||||
|
|
||||||
if (CollectionUtils.isNotEmpty(stepDescList)) {
|
if (CollectionUtils.isNotEmpty(stepDescList)) {
|
||||||
// 如果有多条步骤则添加多条数据,之后合并单元格
|
// 如果有多条步骤则添加多条数据,之后合并单元格
|
||||||
for (int i = 0; i < stepDescList.size(); i++) {
|
buildExportMergeData(rowMergeInfo, list, stepDescList, stepResultList, data);
|
||||||
TestCaseExcelData excelData;
|
|
||||||
if (i == 0) {
|
|
||||||
// 第一行存全量元素
|
|
||||||
excelData = data;
|
|
||||||
if (stepDescList.size() > 1) {
|
|
||||||
// 保存合并单元格的下标和数量
|
|
||||||
rowMergeInfo.put(list.size() + 1, stepDescList.size());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// 之后的行只存步骤
|
|
||||||
excelData = new TestCaseExcelData();
|
|
||||||
}
|
|
||||||
excelData.setStepDesc(stepDescList.get(i));
|
|
||||||
excelData.setStepResult(stepResultList.get(i));
|
|
||||||
list.add(excelData);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
list.add(data);
|
list.add(data);
|
||||||
}
|
}
|
||||||
|
@ -1533,6 +1554,61 @@ public class TestCaseService {
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void buildExportOtherField(TestCaseExcelData data, TestCaseDTO t, List<TestCaseExportRequest.TestCaseExportHeader> otherHeaders) {
|
||||||
|
if (CollectionUtils.isEmpty(otherHeaders)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<String> keys = otherHeaders.stream()
|
||||||
|
.map(TestCaseExportRequest.TestCaseExportHeader::getId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
Map<String, TestCaseExportConverter> converterMaps = TestCaseExportConverterFactory.getConverters(keys);
|
||||||
|
HashMap<String, String> otherFields = new HashMap<>();
|
||||||
|
otherHeaders.forEach(header -> {
|
||||||
|
TestCaseExportConverter converter = converterMaps.get(header.getId());
|
||||||
|
if (converter != null) {
|
||||||
|
otherFields.put(header.getName(), converter.parse(t));
|
||||||
|
} else {
|
||||||
|
otherFields.put(header.getName(), "");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
data.setOtherFields(otherFields);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buildExportCustomNum(Boolean isUseCustomId, TestCaseDTO t, TestCaseExcelData data) {
|
||||||
|
if (isUseCustomId) {
|
||||||
|
data.setCustomNum(t.getCustomNum());
|
||||||
|
} else {
|
||||||
|
if (t.getNum() == null) {
|
||||||
|
data.setCustomNum("");
|
||||||
|
} else {
|
||||||
|
data.setCustomNum(String.valueOf(t.getNum()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private void buildExportMergeData(Map<Integer, Integer> rowMergeInfo,
|
||||||
|
List<TestCaseExcelData> list, List<String> stepDescList,
|
||||||
|
List<String> stepResultList, TestCaseExcelData data) {
|
||||||
|
for (int i = 0; i < stepDescList.size(); i++) {
|
||||||
|
TestCaseExcelData excelData;
|
||||||
|
if (i == 0) {
|
||||||
|
// 第一行存全量元素
|
||||||
|
excelData = data;
|
||||||
|
if (stepDescList.size() > 1) {
|
||||||
|
// 保存合并单元格的下标和数量
|
||||||
|
rowMergeInfo.put(list.size() + 1, stepDescList.size());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 之后的行只存步骤
|
||||||
|
excelData = new TestCaseExcelData();
|
||||||
|
}
|
||||||
|
excelData.setStepDesc(stepDescList.get(i));
|
||||||
|
excelData.setStepResult(stepResultList.get(i));
|
||||||
|
list.add(excelData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void buildExportCustomField(Map<String, Map<String, String>> customSelectValueMap, Map<String, String> customNameMap, TestCaseDTO t, TestCaseExcelData data) {
|
private void buildExportCustomField(Map<String, Map<String, String>> customSelectValueMap, Map<String, String> customNameMap, TestCaseDTO t, TestCaseExcelData data) {
|
||||||
try {
|
try {
|
||||||
List<CustomFieldResource> fields = customFieldTestCaseService.getByResourceId(t.getId());
|
List<CustomFieldResource> fields = customFieldTestCaseService.getByResourceId(t.getId());
|
||||||
|
|
|
@ -318,6 +318,12 @@ create_user=Create user
|
||||||
test_case_status=Case status
|
test_case_status=Case status
|
||||||
id_not_rightful=ID is not rightful
|
id_not_rightful=ID is not rightful
|
||||||
project_reference_multiple_plateform=Projects point to multiple third-party platforms
|
project_reference_multiple_plateform=Projects point to multiple third-party platforms
|
||||||
|
test_case_comment_template=[comment:%s %s %s(%s)]\n%s\n
|
||||||
|
test_case_comment=Case
|
||||||
|
test_case_plan_comment=Execute
|
||||||
|
test_case_review_comment=Review
|
||||||
|
plan_case_status_blocking=Blocking
|
||||||
|
plan_case_status_skip=Skip
|
||||||
# mock
|
# mock
|
||||||
mock_warning=No matching Mock expectation was found
|
mock_warning=No matching Mock expectation was found
|
||||||
zentao_test_type_error=invalid Zentao request
|
zentao_test_type_error=invalid Zentao request
|
||||||
|
|
|
@ -317,6 +317,12 @@ create_user=创建人
|
||||||
test_case_status=用例状态
|
test_case_status=用例状态
|
||||||
id_not_rightful=ID 不合法
|
id_not_rightful=ID 不合法
|
||||||
project_reference_multiple_plateform=项目指向多个第三方平台
|
project_reference_multiple_plateform=项目指向多个第三方平台
|
||||||
|
test_case_comment_template=【评论:%s %s %s(%s)】\n%s\n
|
||||||
|
test_case_comment=用例
|
||||||
|
test_case_plan_comment=执行
|
||||||
|
test_case_review_comment=评审
|
||||||
|
plan_case_status_blocking=阻塞
|
||||||
|
plan_case_status_skip=跳过
|
||||||
# mock
|
# mock
|
||||||
mock_warning=未找到匹配的Mock期望
|
mock_warning=未找到匹配的Mock期望
|
||||||
zentao_test_type_error=无效的 Zentao 请求
|
zentao_test_type_error=无效的 Zentao 请求
|
||||||
|
|
|
@ -316,6 +316,12 @@ create_user=創建人
|
||||||
test_case_status=用例狀態
|
test_case_status=用例狀態
|
||||||
id_not_rightful=ID 不合法
|
id_not_rightful=ID 不合法
|
||||||
project_reference_multiple_plateform=項目指向多個第三方平臺
|
project_reference_multiple_plateform=項目指向多個第三方平臺
|
||||||
|
test_case_comment_template=【評論:%s %s %s(%s)】\n%s\n
|
||||||
|
test_case_comment=用例
|
||||||
|
test_case_plan_comment=執行
|
||||||
|
test_case_review_comment=評審
|
||||||
|
plan_case_status_blocking=阻塞
|
||||||
|
plan_case_status_skip=跳過
|
||||||
# mock
|
# mock
|
||||||
mock_warning=未找到匹配的Mock期望
|
mock_warning=未找到匹配的Mock期望
|
||||||
zentao_test_type_error=請求方式錯誤
|
zentao_test_type_error=請求方式錯誤
|
||||||
|
|
|
@ -107,6 +107,7 @@
|
||||||
:public-enable="false"
|
:public-enable="false"
|
||||||
:current-version="currentVersion"
|
:current-version="currentVersion"
|
||||||
:version-enable="versionEnable"
|
:version-enable="versionEnable"
|
||||||
|
@closeExport="closeExport"
|
||||||
@refreshTable="refresh"
|
@refreshTable="refresh"
|
||||||
@testCaseEdit="editTestCase"
|
@testCaseEdit="editTestCase"
|
||||||
@testCaseCopy="copyTestCase"
|
@testCaseCopy="copyTestCase"
|
||||||
|
@ -584,12 +585,15 @@ export default {
|
||||||
this.activeName = "default";
|
this.activeName = "default";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
exportTestCase(type) {
|
exportTestCase(type, param) {
|
||||||
if (this.activeDom !== 'left') {
|
if (this.activeDom !== 'left') {
|
||||||
this.$warning(this.$t('test_track.case.export.export_tip'));
|
this.$warning(this.$t('test_track.case.export.export_tip'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.$refs.testCaseList.exportTestCase(type);
|
this.$refs.testCaseList.exportTestCase(type, param);
|
||||||
|
},
|
||||||
|
closeExport() {
|
||||||
|
this.$refs.nodeTree.closeExport();
|
||||||
},
|
},
|
||||||
init(route) {
|
init(route) {
|
||||||
let path = route.path;
|
let path = route.path;
|
||||||
|
|
|
@ -1,85 +0,0 @@
|
||||||
<template>
|
|
||||||
<el-dialog class="testcase-import" :title="$t('test_track.case.import.case_export')" :visible.sync="dialogVisible"
|
|
||||||
@close="close">
|
|
||||||
|
|
||||||
<el-row class="import-row" style="margin-left: 34px">
|
|
||||||
<el-radio v-model="exportType" label="excel">{{$t('commons.excelFile')}}</el-radio>
|
|
||||||
<el-radio v-model="exportType" label="xmind">{{$t('commons.xmindFile')}}</el-radio>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<span slot="footer" class="dialog-footer">
|
|
||||||
<el-button @click="dialogVisible = false">{{$t('commons.cancel')}}</el-button>
|
|
||||||
<el-button type="primary" @click="exportTestCase">{{$t('commons.export')}}</el-button>
|
|
||||||
</span>
|
|
||||||
</el-dialog>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import ElUploadList from "element-ui/packages/upload/src/upload-list";
|
|
||||||
import MsTableButton from '../../../../components/common/components/MsTableButton';
|
|
||||||
import {getCurrentProjectID, listenGoBack, removeGoBackListener} from "../../../../../common/js/utils";
|
|
||||||
import {TokenKey} from '../../../../../common/js/constants';
|
|
||||||
import axios from "axios";
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "TestCaseImport",
|
|
||||||
components: {ElUploadList, MsTableButton},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
exportType:"excel",
|
|
||||||
dialogVisible: false,
|
|
||||||
projectId:"",
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
},
|
|
||||||
activated() {
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
handleError(err, file, fileList) {
|
|
||||||
this.isLoading = false;
|
|
||||||
this.$error(err.message);
|
|
||||||
},
|
|
||||||
open() {
|
|
||||||
listenGoBack(this.close);
|
|
||||||
this.projectId = getCurrentProjectID();
|
|
||||||
this.dialogVisible = true;
|
|
||||||
},
|
|
||||||
close() {
|
|
||||||
removeGoBackListener(this.close);
|
|
||||||
this.dialogVisible = false;
|
|
||||||
},
|
|
||||||
exportTestCase(){
|
|
||||||
this.$emit('exportTestCase',this.exportType);
|
|
||||||
this.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
.download-template {
|
|
||||||
padding-top: 0px;
|
|
||||||
padding-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.import-row {
|
|
||||||
padding-top: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.testcase-import >>> .el-dialog {
|
|
||||||
width: 400px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.testcase-import-img {
|
|
||||||
width: 614px;
|
|
||||||
height: 312px;
|
|
||||||
size: 200px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
</style>
|
|
|
@ -222,7 +222,6 @@
|
||||||
|
|
||||||
import MsTableHeaderSelectPopover from "@/business/components/common/components/table/MsTableHeaderSelectPopover";
|
import MsTableHeaderSelectPopover from "@/business/components/common/components/table/MsTableHeaderSelectPopover";
|
||||||
import TestCaseImport from './import/TestCaseImport';
|
import TestCaseImport from './import/TestCaseImport';
|
||||||
import TestCaseExport from '../components/TestCaseExport';
|
|
||||||
import MsTablePagination from '../../../../components/common/pagination/TablePagination';
|
import MsTablePagination from '../../../../components/common/pagination/TablePagination';
|
||||||
import NodeBreadcrumb from '../../common/NodeBreadcrumb';
|
import NodeBreadcrumb from '../../common/NodeBreadcrumb';
|
||||||
import MsTableHeader from '../../../../components/common/components/MsTableHeader';
|
import MsTableHeader from '../../../../components/common/components/MsTableHeader';
|
||||||
|
@ -310,7 +309,6 @@ export default {
|
||||||
TypeTableItem,
|
TypeTableItem,
|
||||||
PriorityTableItem,
|
PriorityTableItem,
|
||||||
TestCaseImport,
|
TestCaseImport,
|
||||||
TestCaseExport,
|
|
||||||
MsTablePagination,
|
MsTablePagination,
|
||||||
NodeBreadcrumb,
|
NodeBreadcrumb,
|
||||||
MsTableHeader,
|
MsTableHeader,
|
||||||
|
@ -1016,12 +1014,13 @@ export default {
|
||||||
}
|
}
|
||||||
this.$refs.testCaseImport.open();
|
this.$refs.testCaseImport.open();
|
||||||
},
|
},
|
||||||
exportTestCase(exportType) {
|
exportTestCase(exportType, fieldParam) {
|
||||||
if (!this.projectId) {
|
if (!this.projectId) {
|
||||||
this.$warning(this.$t('commons.check_project_tip'));
|
this.$warning(this.$t('commons.check_project_tip'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
let param = buildBatchParam(this, this.$refs.table.selectIds);
|
||||||
|
Object.assign(param, fieldParam);
|
||||||
let config = {};
|
let config = {};
|
||||||
let fileNameSuffix = "";
|
let fileNameSuffix = "";
|
||||||
if (exportType === 'xmind') {
|
if (exportType === 'xmind') {
|
||||||
|
@ -1029,7 +1028,7 @@ export default {
|
||||||
url: '/test/case/export/testcase/xmind',
|
url: '/test/case/export/testcase/xmind',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
responseType: 'blob',
|
responseType: 'blob',
|
||||||
data: buildBatchParam(this, this.$refs.table.selectIds)
|
data: param
|
||||||
};
|
};
|
||||||
fileNameSuffix = ".xmind";
|
fileNameSuffix = ".xmind";
|
||||||
} else {
|
} else {
|
||||||
|
@ -1037,7 +1036,7 @@ export default {
|
||||||
url: '/test/case/export/testcase',
|
url: '/test/case/export/testcase',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
responseType: 'blob',
|
responseType: 'blob',
|
||||||
data: buildBatchParam(this, this.$refs.table.selectIds)
|
data: param
|
||||||
};
|
};
|
||||||
fileNameSuffix = ".xlsx";
|
fileNameSuffix = ".xlsx";
|
||||||
}
|
}
|
||||||
|
@ -1056,8 +1055,10 @@ export default {
|
||||||
aTag.href = URL.createObjectURL(blob);
|
aTag.href = URL.createObjectURL(blob);
|
||||||
aTag.click();
|
aTag.click();
|
||||||
URL.revokeObjectURL(aTag.href);
|
URL.revokeObjectURL(aTag.href);
|
||||||
|
this.$emit('closeExport');
|
||||||
} else {
|
} else {
|
||||||
navigator.msSaveBlob(blob, filename);
|
navigator.msSaveBlob(blob, filename);
|
||||||
|
this.$emit('closeExport');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog class="testcase-import" :title="$t('test_track.case.import.case_export')" :visible.sync="dialogVisible"
|
||||||
|
@close="close">
|
||||||
|
|
||||||
|
<span class="format-title">
|
||||||
|
{{ $t('test_track.case.import.import_format') }}
|
||||||
|
</span>
|
||||||
|
<el-row class="import-row">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-radio v-model="exportType" label="excel">{{ $t('commons.excelFile') }}</el-radio>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-radio v-model="exportType" label="xmind">{{ $t('commons.xmindFile') }}</el-radio>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<test-case-export-field-select
|
||||||
|
v-if="exportType === 'excel'"
|
||||||
|
ref="testCaseExportFieldSelect"/>
|
||||||
|
|
||||||
|
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="dialogVisible = false">{{ $t('commons.cancel') }}</el-button>
|
||||||
|
<el-button type="primary" @click="exportTestCase">{{ $t('commons.export') }}</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import ElUploadList from "element-ui/packages/upload/src/upload-list";
|
||||||
|
import MsTableButton from '../../../../common/components/MsTableButton';
|
||||||
|
import {getCurrentProjectID, listenGoBack, removeGoBackListener} from "../../../../../../common/js/utils";
|
||||||
|
import TestCaseExportFieldSelect from "@/business/components/track/case/components/export/TestCaseExportFieldSelect";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "TestCaseImport",
|
||||||
|
components: {TestCaseExportFieldSelect, ElUploadList, MsTableButton},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
exportType: "excel",
|
||||||
|
dialogVisible: false,
|
||||||
|
projectId: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
activated() {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleError(err, file, fileList) {
|
||||||
|
this.isLoading = false;
|
||||||
|
this.$error(err.message);
|
||||||
|
},
|
||||||
|
open() {
|
||||||
|
listenGoBack(this.close);
|
||||||
|
this.projectId = getCurrentProjectID();
|
||||||
|
this.dialogVisible = true;
|
||||||
|
},
|
||||||
|
close() {
|
||||||
|
removeGoBackListener(this.close);
|
||||||
|
this.dialogVisible = false;
|
||||||
|
},
|
||||||
|
exportTestCase() {
|
||||||
|
let param = this.$refs.testCaseExportFieldSelect.getExportParam();
|
||||||
|
this.$emit('exportTestCase', this.exportType, param);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
.import-row {
|
||||||
|
padding-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.testcase-import >>> .el-dialog {
|
||||||
|
width: 600px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.testcase-import >>> .el-dialog .el-dialog__title {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.testcase-import >>> .el-dialog .el-dialog__body {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.format-title {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,46 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-row v-for="rowIndex in fieldRowCount" :key="rowIndex">
|
||||||
|
<span v-for="(item, index) in fields"
|
||||||
|
:key="item.id">
|
||||||
|
<el-col :span="6"
|
||||||
|
v-if="Math.floor(index / colCountEachRow) === rowIndex - 1">
|
||||||
|
<el-checkbox v-model="item.enable" @change="change">
|
||||||
|
{{ item.name }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-col>
|
||||||
|
</span>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "TestCaseExportFieldList",
|
||||||
|
props: ['fields'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
colCountEachRow: 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
fieldRowCount() {
|
||||||
|
if (!this.fields) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return Math.ceil(this.fields.length / this.colCountEachRow);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
change(value) {
|
||||||
|
this.$emit('enableChange', value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.el-row {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,236 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="export-title"
|
||||||
|
@click="showSelect = !showSelect">
|
||||||
|
<span>
|
||||||
|
{{ $t('test_track.case.import.select_import_field') }}
|
||||||
|
</span>
|
||||||
|
<i class="el-icon-arrow-down"
|
||||||
|
v-if="showSelect"/>
|
||||||
|
<i class="el-icon-arrow-left"
|
||||||
|
v-if="!showSelect"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<el-divider/>
|
||||||
|
|
||||||
|
<div v-show="showSelect">
|
||||||
|
<el-checkbox class="select-all-checkbox"
|
||||||
|
v-model="selectAll" @change="handleSelectAllChange">
|
||||||
|
{{ $t('test_track.case.import.select_import_all_field') }}
|
||||||
|
</el-checkbox>
|
||||||
|
|
||||||
|
<test-case-export-field-select-item
|
||||||
|
type="EXPORT_BASE_FIELD"
|
||||||
|
:title="$t('test_track.case.import.base_field')"
|
||||||
|
:fields="baseFields"
|
||||||
|
@selectAllChange="handleItemSelectAllChange"
|
||||||
|
ref="baseSelectItem"/>
|
||||||
|
|
||||||
|
<test-case-export-field-select-item
|
||||||
|
type="EXPORT_CUSTOM_FIELD"
|
||||||
|
:title="$t('test_track.case.import.custom_field')"
|
||||||
|
:fields="customFields"
|
||||||
|
@selectAllChange="handleItemSelectAllChange"
|
||||||
|
ref="customSelectItem"/>
|
||||||
|
|
||||||
|
<test-case-export-field-select-item
|
||||||
|
type="EXPORT_OTHER_FIELD"
|
||||||
|
:title="$t('test_track.case.import.other_field')"
|
||||||
|
:fields="otherFields"
|
||||||
|
@selectAllChange="handleItemSelectAllChange"
|
||||||
|
ref="otherSelectItem"/>
|
||||||
|
|
||||||
|
<div class="other-field-tip">
|
||||||
|
{{ $t('test_track.case.import.other_field_tip') }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {getCurrentProjectID} from "@/common/js/utils";
|
||||||
|
import TestCaseExportFieldList from "@/business/components/track/case/components/export/TestCaseExportFieldList";
|
||||||
|
import {getTestTemplate} from "@/network/custom-field-template";
|
||||||
|
import TestCaseExportFieldSelectItem
|
||||||
|
from "@/business/components/track/case/components/export/TestCaseExportFieldSelectItem";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "TestCaseExportFieldSelect",
|
||||||
|
components: {TestCaseExportFieldSelectItem, TestCaseExportFieldList},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
selectAll: false,
|
||||||
|
showSelect: true,
|
||||||
|
baseFields: [
|
||||||
|
{
|
||||||
|
id: 'ID',
|
||||||
|
key: 'A',
|
||||||
|
name: 'ID',
|
||||||
|
enable: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'name',
|
||||||
|
key: 'B',
|
||||||
|
name: this.$t("test_track.case.name"),
|
||||||
|
enable: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'nodeId',
|
||||||
|
key: 'C',
|
||||||
|
name: this.$t("test_track.case.module"),
|
||||||
|
enable: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'prerequisite',
|
||||||
|
key: 'D',
|
||||||
|
name: this.$t("test_track.case.prerequisite"),
|
||||||
|
enable: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'remark',
|
||||||
|
key: 'E',
|
||||||
|
name: this.$t("commons.remark"),
|
||||||
|
enable: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'stepDesc',
|
||||||
|
key: 'F',
|
||||||
|
name: this.$t("test_track.case.step_describe"),
|
||||||
|
enable: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'stepResult',
|
||||||
|
key: 'G',
|
||||||
|
name: this.$t("test_track.case.expected_results"),
|
||||||
|
enable: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'stepModel',
|
||||||
|
key: 'H',
|
||||||
|
name: this.$t("test_track.case.step_model"),
|
||||||
|
enable: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'tags',
|
||||||
|
key: 'I',
|
||||||
|
name: this.$t("commons.tag"),
|
||||||
|
enable: true
|
||||||
|
},
|
||||||
|
],
|
||||||
|
customFields: [],
|
||||||
|
otherFields: [
|
||||||
|
{
|
||||||
|
id: 'version',
|
||||||
|
key: 'A',
|
||||||
|
name: this.$t("commons.version"),
|
||||||
|
enable: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'commend',
|
||||||
|
key: 'B',
|
||||||
|
name: this.$t("commons.comment"),
|
||||||
|
enable: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'executeResult',
|
||||||
|
key: 'C',
|
||||||
|
name: this.$t("test_track.plan.execute_result"),
|
||||||
|
enable: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'reviewResult',
|
||||||
|
key: 'D',
|
||||||
|
name: this.$t("test_track.review_view.execute_result"),
|
||||||
|
enable: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'creator',
|
||||||
|
key: 'E',
|
||||||
|
name: this.$t("commons.creator"),
|
||||||
|
enable: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'createTime',
|
||||||
|
key: 'F',
|
||||||
|
name: this.$t("commons.create_time"),
|
||||||
|
enable: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'updateTime',
|
||||||
|
key: 'G',
|
||||||
|
name: this.$t("commons.update_time"),
|
||||||
|
enable: false
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
selectItems() {
|
||||||
|
return [this.$refs.baseSelectItem, this.$refs.customSelectItem, this.$refs.otherSelectItem];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.projectId = getCurrentProjectID();
|
||||||
|
getTestTemplate()
|
||||||
|
.then((template) => {
|
||||||
|
template.customFields.forEach(item => {
|
||||||
|
item.enable = true;
|
||||||
|
});
|
||||||
|
this.customFields = template.customFields;
|
||||||
|
// 系统字段排前面
|
||||||
|
this.customFields.sort((a, b) => a.system && !b.system ? -1 : 1);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getExportParam() {
|
||||||
|
return {
|
||||||
|
baseHeaders: this.selectItems[0].getExportParam(),
|
||||||
|
customHeaders: this.selectItems[1].getExportParam(),
|
||||||
|
otherHeaders: this.selectItems[2].getExportParam(),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleSelectAllChange() {
|
||||||
|
this.selectItems.forEach(item => {
|
||||||
|
item.selectAllChange(this.selectAll);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleItemSelectAllChange() {
|
||||||
|
let isSelectAll = true;
|
||||||
|
this.selectItems.forEach(item => {
|
||||||
|
if (!item.selectAll) {
|
||||||
|
isSelectAll = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.selectAll = isSelectAll;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
.export-title {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 20px 5px 15px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.export-title span:first-child {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select-all-checkbox {
|
||||||
|
margin-top: 10px
|
||||||
|
}
|
||||||
|
|
||||||
|
.export-title {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.other-field-tip {
|
||||||
|
margin-top: 30px;
|
||||||
|
font-size: 10px;
|
||||||
|
color: #9ea0a3;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,111 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="field-title" v-if="fields && fields.length > 0">
|
||||||
|
<span>{{ title }}</span>
|
||||||
|
<el-checkbox
|
||||||
|
v-model="selectAll"
|
||||||
|
@change="selectAllChange"/>
|
||||||
|
</div>
|
||||||
|
<test-case-export-field-list
|
||||||
|
:fields="fields"
|
||||||
|
@enableChange="enableChange"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import TestCaseExportFieldList from "@/business/components/track/case/components/export/TestCaseExportFieldList";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "TestCaseExportFieldSelectItem",
|
||||||
|
components: {TestCaseExportFieldList},
|
||||||
|
props: {
|
||||||
|
fields: Array,
|
||||||
|
title: String,
|
||||||
|
type: String
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
selectAll: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
selectAll() {
|
||||||
|
this.$emit('selectAllChange', this.selectAll);
|
||||||
|
},
|
||||||
|
fields() {
|
||||||
|
this.checkEnable();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.checkEnable();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getExportParam() {
|
||||||
|
return this.fields.filter(item => item.enable);
|
||||||
|
},
|
||||||
|
enableChange(enable) {
|
||||||
|
this.persistenceValues();
|
||||||
|
if (enable) {
|
||||||
|
for (let head of this.fields) {
|
||||||
|
if (!head.enable) {
|
||||||
|
// 单个启用,如果有未启用的则返回
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 如果全部都开启了就启用总开关,或者一个关闭了则禁用总开关
|
||||||
|
this.selectAll = enable;
|
||||||
|
},
|
||||||
|
persistenceValues() {
|
||||||
|
// 将勾选情况保存在浏览器
|
||||||
|
let enableKeys = this.fields.filter(i => i.enable)
|
||||||
|
.map(i => i.key);
|
||||||
|
localStorage.setItem(this.type, JSON.stringify(enableKeys));
|
||||||
|
},
|
||||||
|
selectAllChange(value) {
|
||||||
|
this.selectAll = value;
|
||||||
|
this.fields.forEach(i => {
|
||||||
|
i.enable = value;
|
||||||
|
});
|
||||||
|
this.persistenceValues();
|
||||||
|
},
|
||||||
|
checkEnable() {
|
||||||
|
// 获取保存在浏览器的选项值
|
||||||
|
let enableKeys = localStorage.getItem(this.type);
|
||||||
|
if (enableKeys) {
|
||||||
|
enableKeys = JSON.parse(enableKeys);
|
||||||
|
}
|
||||||
|
|
||||||
|
let isSelectAll = true;
|
||||||
|
for (let field of this.fields) {
|
||||||
|
if (enableKeys) {
|
||||||
|
if (enableKeys.indexOf(field.key) > -1) {
|
||||||
|
field.enable = true;
|
||||||
|
} else {
|
||||||
|
field.enable = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!field.enable) {
|
||||||
|
isSelectAll = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.selectAllChange(isSelectAll);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.field-title {
|
||||||
|
margin-top: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-title span:first-child {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -62,7 +62,7 @@ import NodeEdit from "../common/NodeEdit";
|
||||||
import MsNodeTree from "../common/NodeTree";
|
import MsNodeTree from "../common/NodeTree";
|
||||||
import TestCaseCreate from "@/business/components/track/case/components/TestCaseCreate";
|
import TestCaseCreate from "@/business/components/track/case/components/TestCaseCreate";
|
||||||
import TestCaseImport from "@/business/components/track/case/components/import/TestCaseImport";
|
import TestCaseImport from "@/business/components/track/case/components/import/TestCaseImport";
|
||||||
import TestCaseExport from "@/business/components/track/case/components/TestCaseExport";
|
import TestCaseExport from "@/business/components/track/case/components/export/TestCaseExport";
|
||||||
import MsSearchBar from "@/business/components/common/components/search/MsSearchBar";
|
import MsSearchBar from "@/business/components/common/components/search/MsSearchBar";
|
||||||
import {buildTree} from "../../api/definition/model/NodeTree";
|
import {buildTree} from "../../api/definition/model/NodeTree";
|
||||||
import {buildNodePath} from "@/business/components/api/definition/model/NodeTree";
|
import {buildNodePath} from "@/business/components/api/definition/model/NodeTree";
|
||||||
|
@ -244,8 +244,8 @@ export default {
|
||||||
}
|
}
|
||||||
this.$refs.testCaseExport.open();
|
this.$refs.testCaseExport.open();
|
||||||
},
|
},
|
||||||
exportTestCase(type){
|
exportTestCase(type, param){
|
||||||
this.$emit('exportTestCase',type);
|
this.$emit('exportTestCase', type, param);
|
||||||
},
|
},
|
||||||
remove(nodeIds) {
|
remove(nodeIds) {
|
||||||
this.$post("/case/node/delete", nodeIds, () => {
|
this.$post("/case/node/delete", nodeIds, () => {
|
||||||
|
@ -290,6 +290,9 @@ export default {
|
||||||
},
|
},
|
||||||
changeConfirm(isSave) {
|
changeConfirm(isSave) {
|
||||||
this.$emit('importChangeConfirm', isSave);
|
this.$emit('importChangeConfirm', isSave);
|
||||||
|
},
|
||||||
|
closeExport() {
|
||||||
|
this.$refs.testCaseExport.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import test_track from "./track/en-US";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
commons: {
|
commons: {
|
||||||
project_permission: 'Please add the project permission first',
|
project_permission: 'Please add the project permission first',
|
||||||
|
@ -93,6 +95,7 @@ export default {
|
||||||
input_password: 'Please enter password',
|
input_password: 'Please enter password',
|
||||||
test: 'Test',
|
test: 'Test',
|
||||||
create_time: 'Created Time',
|
create_time: 'Created Time',
|
||||||
|
creator: 'Creator',
|
||||||
update_user_id: 'Updater ID',
|
update_user_id: 'Updater ID',
|
||||||
update_time: 'Updated Time',
|
update_time: 'Updated Time',
|
||||||
delete_time: 'Delete Time',
|
delete_time: 'Delete Time',
|
||||||
|
@ -2063,511 +2066,7 @@ export default {
|
||||||
please_search: "Please Search",
|
please_search: "Please Search",
|
||||||
date: "Date"
|
date: "Date"
|
||||||
},
|
},
|
||||||
test_track: {
|
test_track,
|
||||||
sync_add_api_load: 'Synchronously add associated api and load tests',
|
|
||||||
next: 'Next',
|
|
||||||
total_size: 'Total {0}',
|
|
||||||
related_requirements: 'Related requirements',
|
|
||||||
please_related_requirements: 'Please select the requirements to associate',
|
|
||||||
please_select_the_test_to_associate: "Please select the test to associate",
|
|
||||||
person_responsible: "Person Responsible",
|
|
||||||
test_track: "Track",
|
|
||||||
confirm: "Confirm",
|
|
||||||
cancel: "Cancel",
|
|
||||||
planning_execution: "Planning&Execution",
|
|
||||||
project: "Project",
|
|
||||||
save: "Save",
|
|
||||||
return: "Return",
|
|
||||||
length_less_than: "The length less than",
|
|
||||||
recent_plan: "My recent plan",
|
|
||||||
recent_case: "My recent case",
|
|
||||||
recent_review: "My recent review",
|
|
||||||
pass_rate: "Pass Rate",
|
|
||||||
execution_result: ": Please select the execution result",
|
|
||||||
actual_result: ": The actual result is empty",
|
|
||||||
cancel_relevance_success: "Unlinked successfully",
|
|
||||||
switch_project: "Project",
|
|
||||||
functional_test_case: "Functional Case",
|
|
||||||
api_test_case: "Api Case",
|
|
||||||
ui_test_case: "UI Case",
|
|
||||||
performance_test_case: "Performance Case",
|
|
||||||
scenario_test_case: "Scenario Case",
|
|
||||||
ui_scenario_test_case: "UI Scenario Case",
|
|
||||||
report_statistics: "Report Statistics",
|
|
||||||
sort: 'Sort',
|
|
||||||
demand: {
|
|
||||||
id: 'Demand ID',
|
|
||||||
name: 'Demand Name',
|
|
||||||
batch_relate: 'Bulk Association Requirements',
|
|
||||||
relate_is_null_warn: 'The associated requirement cannot be empty!',
|
|
||||||
relate_name_is_null_warn: 'Requirement name cannot be empty!',
|
|
||||||
third_platform_demand: "Third platform demand",
|
|
||||||
other_demand: "Other demand"
|
|
||||||
},
|
|
||||||
step_model: 'Step Model',
|
|
||||||
automatic_status_update: "Automatic Status Update",
|
|
||||||
case: {
|
|
||||||
list: "List",
|
|
||||||
minder: "Minder",
|
|
||||||
step_info: "Step Info",
|
|
||||||
other_info: "Other Info",
|
|
||||||
step_describe: "Step Describe",
|
|
||||||
step_describe_tip: "Applicable to every step of the test scenario, there are clear test steps, expected results",
|
|
||||||
text_describe: "Text Describe",
|
|
||||||
text_describe_tip: "For simple test scenarios, there are no clear test steps",
|
|
||||||
change_type: "Change Type",
|
|
||||||
minder_create_tip: "failed, unable to create its parent module in minder",
|
|
||||||
minder_issue_delete_tip: "Successfully cancel the defect association",
|
|
||||||
check_select: "Please check the case",
|
|
||||||
export_all_cases: 'Are you sure you want to export all use cases?',
|
|
||||||
minder_tem_node_tip: "Cannot create case {0} under the temporary node",
|
|
||||||
minder_is_module_tip: "{0} is a module and cannot be modified as a use ca",
|
|
||||||
minder_not_module_tip: "Module {0}, cannot be created under a non-module node",
|
|
||||||
minder_all_module_tip: 'All case are virtual modules. Please create use cases in other modules',
|
|
||||||
minder_save_confirm_title: 'Please save the minder',
|
|
||||||
minder_save_confirm_tip: 'The minder is not saved. Are you sure to save?',
|
|
||||||
minder_import_save_confirm_tip: 'Will the minder be refreshed after successful import and confirm to save minder?',
|
|
||||||
input_test_case: 'Please enter the associated case name',
|
|
||||||
test_name: 'TestName',
|
|
||||||
other: '--Other--',
|
|
||||||
test_case: "Case",
|
|
||||||
move: "Move case",
|
|
||||||
case_list: "Test case list",
|
|
||||||
create_case: "Create case",
|
|
||||||
edit_case: "Edit case",
|
|
||||||
view_case: "Test case",
|
|
||||||
no_project: "There is no project in this workspace, please create the project first",
|
|
||||||
priority: "Priority",
|
|
||||||
type: "Type",
|
|
||||||
method: "Method",
|
|
||||||
auto: "Auto",
|
|
||||||
manual: "Manual",
|
|
||||||
create: "Create test case",
|
|
||||||
case_type: "Case Type",
|
|
||||||
name: "Test Case Name",
|
|
||||||
module: "Module",
|
|
||||||
project: 'Project',
|
|
||||||
maintainer: "Maintainer",
|
|
||||||
steps: "Steps",
|
|
||||||
number: "Number",
|
|
||||||
prerequisite: "Prerequisite",
|
|
||||||
step_desc: "Case step",
|
|
||||||
expected_results: "Expected results",
|
|
||||||
input_name: "Please enter name",
|
|
||||||
input_module: "Please select module",
|
|
||||||
input_maintainer: "Please select maintainer",
|
|
||||||
input_priority: "Please select priority",
|
|
||||||
input_type: "Please select type",
|
|
||||||
input_method: "Please select method",
|
|
||||||
input_prerequisite: "Please select prerequisite",
|
|
||||||
input_demand_name: "Please input demand id or name",
|
|
||||||
delete_confirm: "Confirm delete test case",
|
|
||||||
delete: "Delete case",
|
|
||||||
save_create_continue: "Save and create continue",
|
|
||||||
save_add_public: "Save and add public",
|
|
||||||
please_create_project: "No project available, please create the project first",
|
|
||||||
create_module_first: "Please create module first",
|
|
||||||
relate_test: "Relate test",
|
|
||||||
relate_issue: "Relate Issue",
|
|
||||||
demand_name_id: "Demand ID/Name",
|
|
||||||
please_select_relate_test: "Please select the test to associate",
|
|
||||||
relate_test_not_find: 'The associated test does not exist, please check the test case',
|
|
||||||
other_relate_test_not_find: 'Associated test name, please go to the third party platform to execute',
|
|
||||||
batch_handle: 'Batch processing (select {0} items)',
|
|
||||||
batch_update: 'Update the attributes of {0} cases',
|
|
||||||
select_catalog: 'Please select use case catalog',
|
|
||||||
updated_attr_value: 'The updated attribute value',
|
|
||||||
batch_operate: 'Batch operation',
|
|
||||||
please_select_attr: 'Please select attributes',
|
|
||||||
please_select_attr_value: 'Please select the value corresponding to the attribute',
|
|
||||||
batch_edit_case: 'Batch editing',
|
|
||||||
batch_move_case: 'Batch move',
|
|
||||||
batch_copy: 'Batch copy',
|
|
||||||
batch_add_public: 'Batch add public',
|
|
||||||
batch_link_demand: 'Bulk Association Requirements',
|
|
||||||
public_warning: 'The public library configuration is not enabled',
|
|
||||||
generate_dependencies: 'Generate dependencies',
|
|
||||||
generate_dependencies_warning: 'For a better experience, it is recommended to check the data below 100',
|
|
||||||
batch_delete_case: 'Batch delete',
|
|
||||||
batch_unlink: 'Batch Unlink',
|
|
||||||
unlink: 'Unlink',
|
|
||||||
project_name: "Project",
|
|
||||||
status: 'Review Status',
|
|
||||||
status_prepare: 'Prepare',
|
|
||||||
status_running: 'Underway',
|
|
||||||
status_finished: 'Completed',
|
|
||||||
status_pass: 'Pass',
|
|
||||||
status_un_pass: 'UnPass',
|
|
||||||
cancel_relevance_project: "Disassociating the project will also cancel the associated test cases under the project",
|
|
||||||
img_loading_fail: "Image failed to load",
|
|
||||||
pdf_loading_fail: "PDF loading failed",
|
|
||||||
upload_tip: "file size limit[0-500MB]",
|
|
||||||
add_attachment: "Add",
|
|
||||||
attachment: "Attachment",
|
|
||||||
upload_time: "Upload Time",
|
|
||||||
total: "Total Case",
|
|
||||||
node_id: "Node ID",
|
|
||||||
node_path: "Node Path",
|
|
||||||
match_rule: "Test Case Match Rule",
|
|
||||||
import: {
|
|
||||||
import: "Import test case",
|
|
||||||
case_import: "Import test case",
|
|
||||||
case_export: "Export test case",
|
|
||||||
download_template: "Download template",
|
|
||||||
click_upload: "Upload",
|
|
||||||
upload_limit: "Only XLS/XLSX/XMIND files can be uploaded, and no more than 100M",
|
|
||||||
upload_xmind_format: "Upload files can only be .xmind format",
|
|
||||||
upload_xmind: "Only xmind files can be uploaded, and no more than 800",
|
|
||||||
upload_limit_count: "Only one file can be uploaded at a time",
|
|
||||||
upload_limit_format: "Upload files can only be XLS, XLSX format!",
|
|
||||||
upload_limit_size: "Upload file size cannot exceed 100MB!",
|
|
||||||
upload_limit_other_size: "Upload file size cannot exceed",
|
|
||||||
success: "Import success!",
|
|
||||||
importing: "Importing...",
|
|
||||||
excel_title: "Excel ",
|
|
||||||
xmind_title: "Xmind",
|
|
||||||
import_desc: "Import instructions",
|
|
||||||
import_file: "upload files",
|
|
||||||
ignore_error: "Ignore errors ",
|
|
||||||
continue_upload: "Upload continue",
|
|
||||||
import_create: "Import Create",
|
|
||||||
import_update: "Import Update",
|
|
||||||
import_tip1: "The ID is required when the \"Test Case Custom ID\" switch is turned on in the project settings",
|
|
||||||
import_tip2: "ID is required when importing and updating",
|
|
||||||
import_file_tips: "Please upload the file first!",
|
|
||||||
},
|
|
||||||
export: {
|
|
||||||
export: "Export cases",
|
|
||||||
export_tip: "Switch to Case List and check Use Case Export"
|
|
||||||
},
|
|
||||||
case_desc: "Case Desc",
|
|
||||||
passing_rate: 'Case Pass Rate',
|
|
||||||
exists_multiple_prerequisite_node: "Exists multiple precondition node",
|
|
||||||
exists_multiple_remark_node: "Exists multiple remark node",
|
|
||||||
},
|
|
||||||
plan: {
|
|
||||||
test_plan: "Plan",
|
|
||||||
test_plan_id: 'Plan ID',
|
|
||||||
create_plan: "Create test plan",
|
|
||||||
edit_plan: "Edit test plan",
|
|
||||||
plan_name: "Name",
|
|
||||||
plan_project: "Project",
|
|
||||||
related_project: "Related Project",
|
|
||||||
related_tip: "After linking the project, you can add test cases under the linking project to the test plan list",
|
|
||||||
plan_stage: "Stage",
|
|
||||||
follow_people: "Follow",
|
|
||||||
plan_status: "Status",
|
|
||||||
smoke_test: "Smoke test",
|
|
||||||
functional_test: "Functional test",
|
|
||||||
integration_testing: "Integration test",
|
|
||||||
system_test: "System test",
|
|
||||||
regression_test: "Regression test",
|
|
||||||
version_validation: "Version validation",
|
|
||||||
plan_principal: "Principal",
|
|
||||||
input_plan_name: "Please input plan name",
|
|
||||||
input_plan_principal: "Please select principal",
|
|
||||||
input_plan_project: "Please select project",
|
|
||||||
input_related_project: "Please Related project",
|
|
||||||
input_plan_stage: "Please select stage",
|
|
||||||
plan_status_prepare: "Not started",
|
|
||||||
plan_status_running: "Starting",
|
|
||||||
plan_status_finished: "Finished",
|
|
||||||
plan_status_completed: "Completed",
|
|
||||||
plan_status_archived: "Archived",
|
|
||||||
plan_status_trash: "Trashed",
|
|
||||||
planned_start_time: "Start Time",
|
|
||||||
planned_end_time: "End Time",
|
|
||||||
actual_start_time: "Actual Start Time",
|
|
||||||
actual_end_time: "Actual End Time",
|
|
||||||
plan_delete_confirm: "All use cases under this plan will be deleted,confirm delete test plan: ",
|
|
||||||
plan_delete_tip: "The test plan is under way, please confirm and delete it!",
|
|
||||||
plan_delete: "Delete test plan",
|
|
||||||
api_case: "Api case",
|
|
||||||
scenario_case: "Scenario case",
|
|
||||||
execute_result: "Execute Result",
|
|
||||||
execute_time: 'Execute Time',
|
|
||||||
is_api_case_executing: "Api Case Executing",
|
|
||||||
is_scenario_executing: 'Scenario Executing',
|
|
||||||
is_performance_executing: 'Performance Executing',
|
|
||||||
test_plan_test_case_count: "Track Case Count",
|
|
||||||
test_plan_api_case_count: "Api Case Count",
|
|
||||||
test_plan_api_scenario_count: "Scenario Case Count",
|
|
||||||
test_plan_ui_scenario_count: "Ui Scenario Case Count",
|
|
||||||
test_plan_load_case_count: "Load Case Count",
|
|
||||||
test_plan_component_case_count: "Component Case Count",
|
|
||||||
data_name: "Data Name",
|
|
||||||
test_plan_batch_switch: "batch on/off scheduled tasks",
|
|
||||||
batch_update_schedule_enable: 'update the scheduled task status of {0} test plans',
|
|
||||||
batch_update_schedule_enable_alert: 'note: only test plans with scheduled tasks can be updated',
|
|
||||||
next_run_time: 'next running time',
|
|
||||||
schedule_enabled: 'enabled',
|
|
||||||
check_schedule_enabled: 'the data you checked has detected {0} scheduled tasks that can be modified',
|
|
||||||
no_check_schedule_enabled: 'the data you checked does not detect a scheduled task',
|
|
||||||
load_case: {
|
|
||||||
case: "Load Case",
|
|
||||||
execution_status: "Execution status",
|
|
||||||
report: "report",
|
|
||||||
view_report: "View report",
|
|
||||||
unlink_in_bulk: "Unlink in bulk",
|
|
||||||
batch_exec_cases: "Batch execution use cases",
|
|
||||||
exec: "Executing....",
|
|
||||||
error: "Use case execution error, please debug this use case separately!",
|
|
||||||
report_not_found: "Report does not exist",
|
|
||||||
content_empty: "Content empty",
|
|
||||||
}
|
|
||||||
},
|
|
||||||
review: {
|
|
||||||
test_review: "Review",
|
|
||||||
create_review: "Create Review",
|
|
||||||
edit_review: "Edit Review",
|
|
||||||
review_name: "Name",
|
|
||||||
reviewer: "Reviewer",
|
|
||||||
review_project: "Project",
|
|
||||||
review_creator: "Creator",
|
|
||||||
review_follow_people: "Follow",
|
|
||||||
review_status: "Status",
|
|
||||||
related_project: "Related Project",
|
|
||||||
related_tip: "After the project is associated, you can add test cases under the associated project to the review list",
|
|
||||||
end_time: "EndTime",
|
|
||||||
delete: "Delete",
|
|
||||||
input_review_name: "Please enter the name of the review",
|
|
||||||
input_review_project: "Please select the project",
|
|
||||||
input_reviewer: "Please select reviewer",
|
|
||||||
no_link_case: "No associated use cases!",
|
|
||||||
prepare: "Prepare",
|
|
||||||
pass: "Pass",
|
|
||||||
un_pass: "UnPass",
|
|
||||||
comment: "Comment",
|
|
||||||
my_review: "My Review",
|
|
||||||
my_create: "My Create",
|
|
||||||
reviewed_by_me: "Review By Me",
|
|
||||||
creator: "Creator",
|
|
||||||
done: "Commented use cases",
|
|
||||||
result_distribution: "Result Distribution",
|
|
||||||
deadline_cannot_early_tips: "Deadline cannot be earlier than current time!",
|
|
||||||
},
|
|
||||||
comment: {
|
|
||||||
no_comment: "No Comment",
|
|
||||||
send_comment: "Post a comment (Ctrl + Enter to send)",
|
|
||||||
send: "Confirm",
|
|
||||||
description_is_null: "Comment content cannot be empty!",
|
|
||||||
send_success: "Comment successful!",
|
|
||||||
},
|
|
||||||
review_view: {
|
|
||||||
review: "Review",
|
|
||||||
all_case: "All case",
|
|
||||||
start_review: "Start Review",
|
|
||||||
relevance_case: "Relevance Case",
|
|
||||||
last_page: "It's the end!",
|
|
||||||
execute_result: "Result",
|
|
||||||
cannot_edit: "Cannot edit this comment!",
|
|
||||||
cannot_delete: "Cannot delete this comment!",
|
|
||||||
submit_description: "please submit comments first!",
|
|
||||||
},
|
|
||||||
module: {
|
|
||||||
id: 'Module ID',
|
|
||||||
search: "Search module",
|
|
||||||
rename: "Rename",
|
|
||||||
add_submodule: "Add submodule",
|
|
||||||
add_module: "Add module",
|
|
||||||
name: "Name",
|
|
||||||
delete_confirm: "Confirm delete module:",
|
|
||||||
delete_all_resource: "and all submodules and test cases under the module",
|
|
||||||
delete_batch_confirm: "Steps to confirm batch deletion of selected scenarios?",
|
|
||||||
module: "Module",
|
|
||||||
title: "Title",
|
|
||||||
describe: "Describe",
|
|
||||||
status: "Status",
|
|
||||||
current_owner: "Current Owner",
|
|
||||||
creation_time: "Creation time",
|
|
||||||
project_name: "Project"
|
|
||||||
},
|
|
||||||
home: {
|
|
||||||
recent_test: "Recent Test",
|
|
||||||
my_plan: "My Plan",
|
|
||||||
test_rate: "Test Rate",
|
|
||||||
tested_case: "Tested Case",
|
|
||||||
review_progress: "Review Progress",
|
|
||||||
case_count: "Statistics of the number of use cases",
|
|
||||||
relevance_case: "Related Case",
|
|
||||||
case_maintenance: "Use case person responsible distribution",
|
|
||||||
bug_count: "Statistics of remaining defects",
|
|
||||||
case_review: "Use case review",
|
|
||||||
review_rate: "Reviewed",
|
|
||||||
coverage: "Coverage",
|
|
||||||
function_case_count: "Functional Case Count",
|
|
||||||
relevance_case_count: "Related Case Count",
|
|
||||||
serial_number: "Index",
|
|
||||||
test_plan_name: "Plan Name",
|
|
||||||
case_size: "Case Count",
|
|
||||||
bug_size: "Bug Count",
|
|
||||||
passing_rate: "Pass Rate",
|
|
||||||
percentage: "Percentage"
|
|
||||||
},
|
|
||||||
plan_view: {
|
|
||||||
plan: "Plan",
|
|
||||||
relevance_test_case: "Relevance case",
|
|
||||||
cancel_all_relevance: "Unlink all",
|
|
||||||
executor: "Executor",
|
|
||||||
executor_match_rule: "Executor Match Rule",
|
|
||||||
execute_result: "Result",
|
|
||||||
pass: "Pass",
|
|
||||||
not_pass: "UnPass",
|
|
||||||
failure: "Failure",
|
|
||||||
blocking: "Blocking",
|
|
||||||
stop: "Stop",
|
|
||||||
skip: "Skip",
|
|
||||||
actual_result: "Actual result",
|
|
||||||
step_result: "Step result",
|
|
||||||
my_case: "My case",
|
|
||||||
all_case: "All case",
|
|
||||||
pre_case: "The last case",
|
|
||||||
next_case: "The next case",
|
|
||||||
change_execution_results: "Change results",
|
|
||||||
change_executor: "Change executor",
|
|
||||||
select_executor: "Select executor",
|
|
||||||
select_execute_result: "Select execute result",
|
|
||||||
cancel_relevance: "Cancel relevance",
|
|
||||||
confirm_cancel_relevance: "Confirm cancel relevance",
|
|
||||||
select_manipulate: "Select the data you want to manipulate",
|
|
||||||
select_template: "Select template",
|
|
||||||
step: "Step",
|
|
||||||
submit_issues: "Commit issues",
|
|
||||||
operate_step: "Operate step",
|
|
||||||
edit_component: "Edit component",
|
|
||||||
component: "component",
|
|
||||||
base_info: "Base info",
|
|
||||||
mock_info: "Mock service",
|
|
||||||
test_result: "Test result",
|
|
||||||
result_distribution: "Result distribution",
|
|
||||||
custom_component: "Custom",
|
|
||||||
create_report: "Create report",
|
|
||||||
defect_list: "Defect list",
|
|
||||||
view_report: "View report",
|
|
||||||
component_library: "Component library",
|
|
||||||
component_library_tip: "Drag and drop the component from the component library, add to the right, preview the report effect, only one can be added per system component.",
|
|
||||||
delete_component_tip: "Please reserve at least one component",
|
|
||||||
input_template_name: "Input template name",
|
|
||||||
template_special_characters: 'Template name does not support special characters',
|
|
||||||
case_count: "Case count",
|
|
||||||
issues_count: "Issues count",
|
|
||||||
result_statistics: "Result statistics",
|
|
||||||
result_statistics_chart: "Result statistics chart",
|
|
||||||
create_template: "Create template",
|
|
||||||
report_template: "Report template",
|
|
||||||
test_detail: "Test detail",
|
|
||||||
failure_case: "Failure case",
|
|
||||||
export_report: "Export Report",
|
|
||||||
share_report: "Share Report",
|
|
||||||
no_case_relevance: "No related use cases",
|
|
||||||
automatically_update_status: "Auto update status",
|
|
||||||
allow_associated_repetitive_cases: "Repetitive Case",
|
|
||||||
automatically_update_status_tip: "When the interface or performance use case associated with the functional use case is executed in the test plan, the status of the functional use case is automatically updated",
|
|
||||||
allow_associated_repetitive_cases_tip: "Whether to allow the same use case to be associated multiple times in the same test plan",
|
|
||||||
performance_case_count: "Performance Case Count",
|
|
||||||
running: "Running",
|
|
||||||
please_choose_test_case: "please select a test case!",
|
|
||||||
execute_tip: "The step execution result contains a Failed result, and the use case cannot be marked as Passed!"
|
|
||||||
},
|
|
||||||
issue: {
|
|
||||||
issue: "Issue",
|
|
||||||
issue_management: "Issue",
|
|
||||||
platform_status: "Platform Status",
|
|
||||||
issue_resource: "Issue Source",
|
|
||||||
create_issue: "Create Issue",
|
|
||||||
add_issue: "Add Issue",
|
|
||||||
issue_list: "Issue List",
|
|
||||||
search_name: "Search for title",
|
|
||||||
platform_tip: "Integrated defect management platform in the system setting-workspace-service integration can submit defects to the designated defect management platform",
|
|
||||||
input_title: "Please enter title",
|
|
||||||
id: "Issue ID",
|
|
||||||
title: "Issue Title",
|
|
||||||
description: "Issue Describe",
|
|
||||||
status: "Issue Status",
|
|
||||||
platform: "Platform",
|
|
||||||
issue_project: "Project",
|
|
||||||
operate: "Operate",
|
|
||||||
close: "Close",
|
|
||||||
delete: "Delete",
|
|
||||||
title_description_required: "Title and description are required",
|
|
||||||
close_success: "Closed successfully",
|
|
||||||
delete_warning: "The cancellation will affect the statistics related to the test plan. Confirm whether to confirm or not",
|
|
||||||
preview: "Preview",
|
|
||||||
status_new: 'new',
|
|
||||||
status_resolved: 'resolved',
|
|
||||||
status_closed: 'closed',
|
|
||||||
status_active: 'active',
|
|
||||||
status_delete: 'delete',
|
|
||||||
status_in_progress: 'in_progress',
|
|
||||||
status_rejected: 'rejected',
|
|
||||||
status_upcoming: 'upcoming',
|
|
||||||
status_reopened: 'reopened',
|
|
||||||
please_choose_current_owner: "Please choose current owner",
|
|
||||||
tapd_current_owner: "Tapd Current Owner",
|
|
||||||
zentao_bug_build: "Zentao Impact version",
|
|
||||||
zentao_bug_assigned: "Zentao handler",
|
|
||||||
third_party_integrated: "Third-party Platform",
|
|
||||||
use_third_party: "Enable Jira Issue Template",
|
|
||||||
update_third_party_bugs: "Update the defects of third-party platforms",
|
|
||||||
sync_bugs: "Synchronization Issue",
|
|
||||||
sync_complete: "Synchronization complete",
|
|
||||||
issue_sync_tip: "The current project is synchronizing defects, please wait!",
|
|
||||||
save_before_open_comment: "Please save issue before comment",
|
|
||||||
delete_tip: "Confirm Delete Issue:",
|
|
||||||
check_id_exist: "Check",
|
|
||||||
save_project_first: "Please save the project first",
|
|
||||||
tapd_status_new: "New",
|
|
||||||
tapd_status_in_progress: "Acceptance/Processing",
|
|
||||||
tapd_status_reopened: "Opened",
|
|
||||||
tapd_status_rejected: "Refused",
|
|
||||||
tapd_status_verified: "Authenticated",
|
|
||||||
tapd_status_closed: "Closed",
|
|
||||||
tapd_status_resolved: "Resolved",
|
|
||||||
please_choose_platform_status: "Please select platform status",
|
|
||||||
},
|
|
||||||
report: {
|
|
||||||
name: "Test Plan Report",
|
|
||||||
list: {
|
|
||||||
name: "name",
|
|
||||||
test_plan: "Test plan",
|
|
||||||
creator: "Creator",
|
|
||||||
create_time: "Create Time",
|
|
||||||
trigger_mode: "Trigger Mode",
|
|
||||||
run_time: "run time(s)",
|
|
||||||
pass_rate: "pass rate",
|
|
||||||
status: "Status",
|
|
||||||
operation: "Operation",
|
|
||||||
},
|
|
||||||
trigger_mode: {
|
|
||||||
manual: "Manual",
|
|
||||||
automation: "Automation",
|
|
||||||
},
|
|
||||||
overview: "Overview",
|
|
||||||
testing_time: "Testing time",
|
|
||||||
total_number_tests: "Total",
|
|
||||||
exacutive_rate: "Exacutive rate",
|
|
||||||
exacutive_rate_tip: "Use cases executed/all use cases * 100%",
|
|
||||||
passing_rate: "Passing rate",
|
|
||||||
passing_rate_tip: "Execute passed use cases/all use cases * 100%",
|
|
||||||
content: "Content",
|
|
||||||
report_summary: "Summary",
|
|
||||||
analysis_functional: "Analysis Functional",
|
|
||||||
analysis_api: "Analysis Api",
|
|
||||||
analysis_ui: "Analysis Ui",
|
|
||||||
analysis_load: "Analysis Performance",
|
|
||||||
valid_for_24_hours: "Valid for 24 hours",
|
|
||||||
configuration: "Config",
|
|
||||||
share: "Share",
|
|
||||||
template_configuration: "Template configuration",
|
|
||||||
test_result: "Test Result",
|
|
||||||
fail_case: "Fail Case",
|
|
||||||
issue_list: "Issue List",
|
|
||||||
all_case: "All Case",
|
|
||||||
},
|
|
||||||
reporter: 'Reporter',
|
|
||||||
lastmodify: 'Last Modify',
|
|
||||||
sync_to_new_version: "Copy to latest version",
|
|
||||||
},
|
|
||||||
test_resource_pool: {
|
test_resource_pool: {
|
||||||
id: 'Resource Pool ID',
|
id: 'Resource Pool ID',
|
||||||
type: 'type',
|
type: 'type',
|
||||||
|
|
|
@ -0,0 +1,512 @@
|
||||||
|
export default {
|
||||||
|
sync_add_api_load: 'Synchronously add associated api and load tests',
|
||||||
|
next: 'Next',
|
||||||
|
total_size: 'Total {0}',
|
||||||
|
related_requirements: 'Related requirements',
|
||||||
|
please_related_requirements: 'Please select the requirements to associate',
|
||||||
|
please_select_the_test_to_associate: "Please select the test to associate",
|
||||||
|
person_responsible: "Person Responsible",
|
||||||
|
test_track: "Track",
|
||||||
|
confirm: "Confirm",
|
||||||
|
cancel: "Cancel",
|
||||||
|
planning_execution: "Planning&Execution",
|
||||||
|
project: "Project",
|
||||||
|
save: "Save",
|
||||||
|
return: "Return",
|
||||||
|
length_less_than: "The length less than",
|
||||||
|
recent_plan: "My recent plan",
|
||||||
|
recent_case: "My recent case",
|
||||||
|
recent_review: "My recent review",
|
||||||
|
pass_rate: "Pass Rate",
|
||||||
|
execution_result: ": Please select the execution result",
|
||||||
|
actual_result: ": The actual result is empty",
|
||||||
|
cancel_relevance_success: "Unlinked successfully",
|
||||||
|
switch_project: "Project",
|
||||||
|
functional_test_case: "Functional Case",
|
||||||
|
api_test_case: "Api Case",
|
||||||
|
ui_test_case: "UI Case",
|
||||||
|
performance_test_case: "Performance Case",
|
||||||
|
scenario_test_case: "Scenario Case",
|
||||||
|
ui_scenario_test_case: "UI Scenario Case",
|
||||||
|
report_statistics: "Report Statistics",
|
||||||
|
sort: 'Sort',
|
||||||
|
demand: {
|
||||||
|
id: 'Demand ID',
|
||||||
|
name: 'Demand Name',
|
||||||
|
batch_relate: 'Bulk Association Requirements',
|
||||||
|
relate_is_null_warn: 'The associated requirement cannot be empty!',
|
||||||
|
relate_name_is_null_warn: 'Requirement name cannot be empty!',
|
||||||
|
third_platform_demand: "Third platform demand",
|
||||||
|
other_demand: "Other demand"
|
||||||
|
},
|
||||||
|
step_model: 'Step Model',
|
||||||
|
automatic_status_update: "Automatic Status Update",
|
||||||
|
case: {
|
||||||
|
list: "List",
|
||||||
|
minder: "Minder",
|
||||||
|
step_info: "Step Info",
|
||||||
|
other_info: "Other Info",
|
||||||
|
step_describe: "Step Describe",
|
||||||
|
step_describe_tip: "Applicable to every step of the test scenario, there are clear test steps, expected results",
|
||||||
|
text_describe: "Text Describe",
|
||||||
|
text_describe_tip: "For simple test scenarios, there are no clear test steps",
|
||||||
|
change_type: "Change Type",
|
||||||
|
minder_create_tip: "failed, unable to create its parent module in minder",
|
||||||
|
minder_issue_delete_tip: "Successfully cancel the defect association",
|
||||||
|
check_select: "Please check the case",
|
||||||
|
export_all_cases: 'Are you sure you want to export all use cases?',
|
||||||
|
minder_tem_node_tip: "Cannot create case {0} under the temporary node",
|
||||||
|
minder_is_module_tip: "{0} is a module and cannot be modified as a use ca",
|
||||||
|
minder_not_module_tip: "Module {0}, cannot be created under a non-module node",
|
||||||
|
minder_all_module_tip: 'All case are virtual modules. Please create use cases in other modules',
|
||||||
|
minder_save_confirm_title: 'Please save the minder',
|
||||||
|
minder_save_confirm_tip: 'The minder is not saved. Are you sure to save?',
|
||||||
|
minder_import_save_confirm_tip: 'Will the minder be refreshed after successful import and confirm to save minder?',
|
||||||
|
input_test_case: 'Please enter the associated case name',
|
||||||
|
test_name: 'TestName',
|
||||||
|
other: '--Other--',
|
||||||
|
test_case: "Case",
|
||||||
|
move: "Move case",
|
||||||
|
case_list: "Test case list",
|
||||||
|
create_case: "Create case",
|
||||||
|
edit_case: "Edit case",
|
||||||
|
view_case: "Test case",
|
||||||
|
no_project: "There is no project in this workspace, please create the project first",
|
||||||
|
priority: "Priority",
|
||||||
|
type: "Type",
|
||||||
|
method: "Method",
|
||||||
|
auto: "Auto",
|
||||||
|
manual: "Manual",
|
||||||
|
create: "Create test case",
|
||||||
|
case_type: "Case Type",
|
||||||
|
name: "Test Case Name",
|
||||||
|
module: "Module",
|
||||||
|
project: 'Project',
|
||||||
|
maintainer: "Maintainer",
|
||||||
|
steps: "Steps",
|
||||||
|
number: "Number",
|
||||||
|
prerequisite: "Prerequisite",
|
||||||
|
step_desc: "Case step",
|
||||||
|
expected_results: "Expected results",
|
||||||
|
input_name: "Please enter name",
|
||||||
|
input_module: "Please select module",
|
||||||
|
input_maintainer: "Please select maintainer",
|
||||||
|
input_priority: "Please select priority",
|
||||||
|
input_type: "Please select type",
|
||||||
|
input_method: "Please select method",
|
||||||
|
input_prerequisite: "Please select prerequisite",
|
||||||
|
input_demand_name: "Please input demand id or name",
|
||||||
|
delete_confirm: "Confirm delete test case",
|
||||||
|
delete: "Delete case",
|
||||||
|
save_create_continue: "Save and create continue",
|
||||||
|
save_add_public: "Save and add public",
|
||||||
|
please_create_project: "No project available, please create the project first",
|
||||||
|
create_module_first: "Please create module first",
|
||||||
|
relate_test: "Relate test",
|
||||||
|
relate_issue: "Relate Issue",
|
||||||
|
demand_name_id: "Demand ID/Name",
|
||||||
|
please_select_relate_test: "Please select the test to associate",
|
||||||
|
relate_test_not_find: 'The associated test does not exist, please check the test case',
|
||||||
|
other_relate_test_not_find: 'Associated test name, please go to the third party platform to execute',
|
||||||
|
batch_handle: 'Batch processing (select {0} items)',
|
||||||
|
batch_update: 'Update the attributes of {0} cases',
|
||||||
|
select_catalog: 'Please select use case catalog',
|
||||||
|
updated_attr_value: 'The updated attribute value',
|
||||||
|
batch_operate: 'Batch operation',
|
||||||
|
please_select_attr: 'Please select attributes',
|
||||||
|
please_select_attr_value: 'Please select the value corresponding to the attribute',
|
||||||
|
batch_edit_case: 'Batch editing',
|
||||||
|
batch_move_case: 'Batch move',
|
||||||
|
batch_copy: 'Batch copy',
|
||||||
|
batch_add_public: 'Batch add public',
|
||||||
|
batch_link_demand: 'Bulk Association Requirements',
|
||||||
|
public_warning: 'The public library configuration is not enabled',
|
||||||
|
generate_dependencies: 'Generate dependencies',
|
||||||
|
generate_dependencies_warning: 'For a better experience, it is recommended to check the data below 100',
|
||||||
|
batch_delete_case: 'Batch delete',
|
||||||
|
batch_unlink: 'Batch Unlink',
|
||||||
|
unlink: 'Unlink',
|
||||||
|
project_name: "Project",
|
||||||
|
status: 'Review Status',
|
||||||
|
status_prepare: 'Prepare',
|
||||||
|
status_running: 'Underway',
|
||||||
|
status_finished: 'Completed',
|
||||||
|
status_pass: 'Pass',
|
||||||
|
status_un_pass: 'UnPass',
|
||||||
|
cancel_relevance_project: "Disassociating the project will also cancel the associated test cases under the project",
|
||||||
|
img_loading_fail: "Image failed to load",
|
||||||
|
pdf_loading_fail: "PDF loading failed",
|
||||||
|
upload_tip: "file size limit[0-500MB]",
|
||||||
|
add_attachment: "Add",
|
||||||
|
attachment: "Attachment",
|
||||||
|
upload_time: "Upload Time",
|
||||||
|
total: "Total Case",
|
||||||
|
node_id: "Node ID",
|
||||||
|
node_path: "Node Path",
|
||||||
|
match_rule: "Test Case Match Rule",
|
||||||
|
import: {
|
||||||
|
import: "Import test case",
|
||||||
|
case_import: "Import test case",
|
||||||
|
case_export: "Export test case",
|
||||||
|
download_template: "Download template",
|
||||||
|
click_upload: "Upload",
|
||||||
|
upload_limit: "Only XLS/XLSX/XMIND files can be uploaded, and no more than 100M",
|
||||||
|
upload_xmind_format: "Upload files can only be .xmind format",
|
||||||
|
upload_xmind: "Only xmind files can be uploaded, and no more than 800",
|
||||||
|
upload_limit_count: "Only one file can be uploaded at a time",
|
||||||
|
upload_limit_format: "Upload files can only be XLS, XLSX format!",
|
||||||
|
upload_limit_size: "Upload file size cannot exceed 100MB!",
|
||||||
|
upload_limit_other_size: "Upload file size cannot exceed",
|
||||||
|
success: "Import success!",
|
||||||
|
importing: "Importing...",
|
||||||
|
excel_title: "Excel ",
|
||||||
|
xmind_title: "Xmind",
|
||||||
|
import_desc: "Import instructions",
|
||||||
|
import_file: "upload files",
|
||||||
|
ignore_error: "Ignore errors ",
|
||||||
|
continue_upload: "Upload continue",
|
||||||
|
import_create: "Import Create",
|
||||||
|
import_update: "Import Update",
|
||||||
|
import_tip1: "The ID is required when the \"Test Case Custom ID\" switch is turned on in the project settings",
|
||||||
|
import_tip2: "ID is required when importing and updating",
|
||||||
|
import_file_tips: "Please upload the file first!",
|
||||||
|
import_format: "Import Format",
|
||||||
|
select_import_field: "Select Field",
|
||||||
|
select_import_all_field: "Select All",
|
||||||
|
base_field: "Base Field",
|
||||||
|
custom_field: "Custom Field",
|
||||||
|
other_field: "Other Field",
|
||||||
|
other_field_tip: "Note: For other fields, import is not supported after export",
|
||||||
|
},
|
||||||
|
export: {
|
||||||
|
export: "Export cases",
|
||||||
|
export_tip: "Switch to Case List and check Use Case Export"
|
||||||
|
},
|
||||||
|
case_desc: "Case Desc",
|
||||||
|
passing_rate: 'Case Pass Rate',
|
||||||
|
exists_multiple_prerequisite_node: "Exists multiple precondition node",
|
||||||
|
exists_multiple_remark_node: "Exists multiple remark node",
|
||||||
|
},
|
||||||
|
plan: {
|
||||||
|
test_plan: "Plan",
|
||||||
|
test_plan_id: 'Plan ID',
|
||||||
|
create_plan: "Create test plan",
|
||||||
|
edit_plan: "Edit test plan",
|
||||||
|
plan_name: "Name",
|
||||||
|
plan_project: "Project",
|
||||||
|
related_project: "Related Project",
|
||||||
|
related_tip: "After linking the project, you can add test cases under the linking project to the test plan list",
|
||||||
|
plan_stage: "Stage",
|
||||||
|
follow_people: "Follow",
|
||||||
|
plan_status: "Status",
|
||||||
|
smoke_test: "Smoke test",
|
||||||
|
functional_test: "Functional test",
|
||||||
|
integration_testing: "Integration test",
|
||||||
|
system_test: "System test",
|
||||||
|
regression_test: "Regression test",
|
||||||
|
version_validation: "Version validation",
|
||||||
|
plan_principal: "Principal",
|
||||||
|
input_plan_name: "Please input plan name",
|
||||||
|
input_plan_principal: "Please select principal",
|
||||||
|
input_plan_project: "Please select project",
|
||||||
|
input_related_project: "Please Related project",
|
||||||
|
input_plan_stage: "Please select stage",
|
||||||
|
plan_status_prepare: "Not started",
|
||||||
|
plan_status_running: "Starting",
|
||||||
|
plan_status_finished: "Finished",
|
||||||
|
plan_status_completed: "Completed",
|
||||||
|
plan_status_archived: "Archived",
|
||||||
|
plan_status_trash: "Trashed",
|
||||||
|
planned_start_time: "Start Time",
|
||||||
|
planned_end_time: "End Time",
|
||||||
|
actual_start_time: "Actual Start Time",
|
||||||
|
actual_end_time: "Actual End Time",
|
||||||
|
plan_delete_confirm: "All use cases under this plan will be deleted,confirm delete test plan: ",
|
||||||
|
plan_delete_tip: "The test plan is under way, please confirm and delete it!",
|
||||||
|
plan_delete: "Delete test plan",
|
||||||
|
api_case: "Api case",
|
||||||
|
scenario_case: "Scenario case",
|
||||||
|
execute_result: "Execute Result",
|
||||||
|
execute_time: 'Execute Time',
|
||||||
|
is_api_case_executing: "Api Case Executing",
|
||||||
|
is_scenario_executing: 'Scenario Executing',
|
||||||
|
is_performance_executing: 'Performance Executing',
|
||||||
|
test_plan_test_case_count: "Track Case Count",
|
||||||
|
test_plan_api_case_count: "Api Case Count",
|
||||||
|
test_plan_api_scenario_count: "Scenario Case Count",
|
||||||
|
test_plan_ui_scenario_count: "Ui Scenario Case Count",
|
||||||
|
test_plan_load_case_count: "Load Case Count",
|
||||||
|
test_plan_component_case_count: "Component Case Count",
|
||||||
|
data_name: "Data Name",
|
||||||
|
test_plan_batch_switch: "batch on/off scheduled tasks",
|
||||||
|
batch_update_schedule_enable: 'update the scheduled task status of {0} test plans',
|
||||||
|
batch_update_schedule_enable_alert: 'note: only test plans with scheduled tasks can be updated',
|
||||||
|
next_run_time: 'next running time',
|
||||||
|
schedule_enabled: 'enabled',
|
||||||
|
check_schedule_enabled: 'the data you checked has detected {0} scheduled tasks that can be modified',
|
||||||
|
no_check_schedule_enabled: 'the data you checked does not detect a scheduled task',
|
||||||
|
load_case: {
|
||||||
|
case: "Load Case",
|
||||||
|
execution_status: "Execution status",
|
||||||
|
report: "report",
|
||||||
|
view_report: "View report",
|
||||||
|
unlink_in_bulk: "Unlink in bulk",
|
||||||
|
batch_exec_cases: "Batch execution use cases",
|
||||||
|
exec: "Executing....",
|
||||||
|
error: "Use case execution error, please debug this use case separately!",
|
||||||
|
report_not_found: "Report does not exist",
|
||||||
|
content_empty: "Content empty",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
review: {
|
||||||
|
test_review: "Review",
|
||||||
|
create_review: "Create Review",
|
||||||
|
edit_review: "Edit Review",
|
||||||
|
review_name: "Name",
|
||||||
|
reviewer: "Reviewer",
|
||||||
|
review_project: "Project",
|
||||||
|
review_creator: "Creator",
|
||||||
|
review_follow_people: "Follow",
|
||||||
|
review_status: "Status",
|
||||||
|
related_project: "Related Project",
|
||||||
|
related_tip: "After the project is associated, you can add test cases under the associated project to the review list",
|
||||||
|
end_time: "EndTime",
|
||||||
|
delete: "Delete",
|
||||||
|
input_review_name: "Please enter the name of the review",
|
||||||
|
input_review_project: "Please select the project",
|
||||||
|
input_reviewer: "Please select reviewer",
|
||||||
|
no_link_case: "No associated use cases!",
|
||||||
|
prepare: "Prepare",
|
||||||
|
pass: "Pass",
|
||||||
|
un_pass: "UnPass",
|
||||||
|
comment: "Comment",
|
||||||
|
my_review: "My Review",
|
||||||
|
my_create: "My Create",
|
||||||
|
reviewed_by_me: "Review By Me",
|
||||||
|
creator: "Creator",
|
||||||
|
done: "Commented use cases",
|
||||||
|
result_distribution: "Result Distribution",
|
||||||
|
deadline_cannot_early_tips: "Deadline cannot be earlier than current time!",
|
||||||
|
},
|
||||||
|
comment: {
|
||||||
|
no_comment: "No Comment",
|
||||||
|
send_comment: "Post a comment (Ctrl + Enter to send)",
|
||||||
|
send: "Confirm",
|
||||||
|
description_is_null: "Comment content cannot be empty!",
|
||||||
|
send_success: "Comment successful!",
|
||||||
|
},
|
||||||
|
review_view: {
|
||||||
|
review: "Review",
|
||||||
|
all_case: "All case",
|
||||||
|
start_review: "Start Review",
|
||||||
|
relevance_case: "Relevance Case",
|
||||||
|
last_page: "It's the end!",
|
||||||
|
execute_result: "Result",
|
||||||
|
cannot_edit: "Cannot edit this comment!",
|
||||||
|
cannot_delete: "Cannot delete this comment!",
|
||||||
|
submit_description: "please submit comments first!",
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
id: 'Module ID',
|
||||||
|
search: "Search module",
|
||||||
|
rename: "Rename",
|
||||||
|
add_submodule: "Add submodule",
|
||||||
|
add_module: "Add module",
|
||||||
|
name: "Name",
|
||||||
|
delete_confirm: "Confirm delete module:",
|
||||||
|
delete_all_resource: "and all submodules and test cases under the module",
|
||||||
|
delete_batch_confirm: "Steps to confirm batch deletion of selected scenarios?",
|
||||||
|
module: "Module",
|
||||||
|
title: "Title",
|
||||||
|
describe: "Describe",
|
||||||
|
status: "Status",
|
||||||
|
current_owner: "Current Owner",
|
||||||
|
creation_time: "Creation time",
|
||||||
|
project_name: "Project"
|
||||||
|
},
|
||||||
|
home: {
|
||||||
|
recent_test: "Recent Test",
|
||||||
|
my_plan: "My Plan",
|
||||||
|
test_rate: "Test Rate",
|
||||||
|
tested_case: "Tested Case",
|
||||||
|
review_progress: "Review Progress",
|
||||||
|
case_count: "Statistics of the number of use cases",
|
||||||
|
relevance_case: "Related Case",
|
||||||
|
case_maintenance: "Use case person responsible distribution",
|
||||||
|
bug_count: "Statistics of remaining defects",
|
||||||
|
case_review: "Use case review",
|
||||||
|
review_rate: "Reviewed",
|
||||||
|
coverage: "Coverage",
|
||||||
|
function_case_count: "Functional Case Count",
|
||||||
|
relevance_case_count: "Related Case Count",
|
||||||
|
serial_number: "Index",
|
||||||
|
test_plan_name: "Plan Name",
|
||||||
|
case_size: "Case Count",
|
||||||
|
bug_size: "Bug Count",
|
||||||
|
passing_rate: "Pass Rate",
|
||||||
|
percentage: "Percentage"
|
||||||
|
},
|
||||||
|
plan_view: {
|
||||||
|
plan: "Plan",
|
||||||
|
relevance_test_case: "Relevance case",
|
||||||
|
cancel_all_relevance: "Unlink all",
|
||||||
|
executor: "Executor",
|
||||||
|
executor_match_rule: "Executor Match Rule",
|
||||||
|
execute_result: "Result",
|
||||||
|
pass: "Pass",
|
||||||
|
not_pass: "UnPass",
|
||||||
|
failure: "Failure",
|
||||||
|
blocking: "Blocking",
|
||||||
|
stop: "Stop",
|
||||||
|
skip: "Skip",
|
||||||
|
actual_result: "Actual result",
|
||||||
|
step_result: "Step result",
|
||||||
|
my_case: "My case",
|
||||||
|
all_case: "All case",
|
||||||
|
pre_case: "The last case",
|
||||||
|
next_case: "The next case",
|
||||||
|
change_execution_results: "Change results",
|
||||||
|
change_executor: "Change executor",
|
||||||
|
select_executor: "Select executor",
|
||||||
|
select_execute_result: "Select execute result",
|
||||||
|
cancel_relevance: "Cancel relevance",
|
||||||
|
confirm_cancel_relevance: "Confirm cancel relevance",
|
||||||
|
select_manipulate: "Select the data you want to manipulate",
|
||||||
|
select_template: "Select template",
|
||||||
|
step: "Step",
|
||||||
|
submit_issues: "Commit issues",
|
||||||
|
operate_step: "Operate step",
|
||||||
|
edit_component: "Edit component",
|
||||||
|
component: "component",
|
||||||
|
base_info: "Base info",
|
||||||
|
mock_info: "Mock service",
|
||||||
|
test_result: "Test result",
|
||||||
|
result_distribution: "Result distribution",
|
||||||
|
custom_component: "Custom",
|
||||||
|
create_report: "Create report",
|
||||||
|
defect_list: "Defect list",
|
||||||
|
view_report: "View report",
|
||||||
|
component_library: "Component library",
|
||||||
|
component_library_tip: "Drag and drop the component from the component library, add to the right, preview the report effect, only one can be added per system component.",
|
||||||
|
delete_component_tip: "Please reserve at least one component",
|
||||||
|
input_template_name: "Input template name",
|
||||||
|
template_special_characters: 'Template name does not support special characters',
|
||||||
|
case_count: "Case count",
|
||||||
|
issues_count: "Issues count",
|
||||||
|
result_statistics: "Result statistics",
|
||||||
|
result_statistics_chart: "Result statistics chart",
|
||||||
|
create_template: "Create template",
|
||||||
|
report_template: "Report template",
|
||||||
|
test_detail: "Test detail",
|
||||||
|
failure_case: "Failure case",
|
||||||
|
export_report: "Export Report",
|
||||||
|
share_report: "Share Report",
|
||||||
|
no_case_relevance: "No related use cases",
|
||||||
|
automatically_update_status: "Auto update status",
|
||||||
|
allow_associated_repetitive_cases: "Repetitive Case",
|
||||||
|
automatically_update_status_tip: "When the interface or performance use case associated with the functional use case is executed in the test plan, the status of the functional use case is automatically updated",
|
||||||
|
allow_associated_repetitive_cases_tip: "Whether to allow the same use case to be associated multiple times in the same test plan",
|
||||||
|
performance_case_count: "Performance Case Count",
|
||||||
|
running: "Running",
|
||||||
|
please_choose_test_case: "please select a test case!",
|
||||||
|
execute_tip: "The step execution result contains a Failed result, and the use case cannot be marked as Passed!"
|
||||||
|
},
|
||||||
|
issue: {
|
||||||
|
issue: "Issue",
|
||||||
|
issue_management: "Issue",
|
||||||
|
platform_status: "Platform Status",
|
||||||
|
issue_resource: "Issue Source",
|
||||||
|
create_issue: "Create Issue",
|
||||||
|
add_issue: "Add Issue",
|
||||||
|
issue_list: "Issue List",
|
||||||
|
search_name: "Search for title",
|
||||||
|
platform_tip: "Integrated defect management platform in the system setting-workspace-service integration can submit defects to the designated defect management platform",
|
||||||
|
input_title: "Please enter title",
|
||||||
|
id: "Issue ID",
|
||||||
|
title: "Issue Title",
|
||||||
|
description: "Issue Describe",
|
||||||
|
status: "Issue Status",
|
||||||
|
platform: "Platform",
|
||||||
|
issue_project: "Project",
|
||||||
|
operate: "Operate",
|
||||||
|
close: "Close",
|
||||||
|
delete: "Delete",
|
||||||
|
title_description_required: "Title and description are required",
|
||||||
|
close_success: "Closed successfully",
|
||||||
|
delete_warning: "The cancellation will affect the statistics related to the test plan. Confirm whether to confirm or not",
|
||||||
|
preview: "Preview",
|
||||||
|
status_new: 'new',
|
||||||
|
status_resolved: 'resolved',
|
||||||
|
status_closed: 'closed',
|
||||||
|
status_active: 'active',
|
||||||
|
status_delete: 'delete',
|
||||||
|
status_in_progress: 'in_progress',
|
||||||
|
status_rejected: 'rejected',
|
||||||
|
status_upcoming: 'upcoming',
|
||||||
|
status_reopened: 'reopened',
|
||||||
|
please_choose_current_owner: "Please choose current owner",
|
||||||
|
tapd_current_owner: "Tapd Current Owner",
|
||||||
|
zentao_bug_build: "Zentao Impact version",
|
||||||
|
zentao_bug_assigned: "Zentao handler",
|
||||||
|
third_party_integrated: "Third-party Platform",
|
||||||
|
use_third_party: "Enable Jira Issue Template",
|
||||||
|
update_third_party_bugs: "Update the defects of third-party platforms",
|
||||||
|
sync_bugs: "Synchronization Issue",
|
||||||
|
sync_complete: "Synchronization complete",
|
||||||
|
issue_sync_tip: "The current project is synchronizing defects, please wait!",
|
||||||
|
save_before_open_comment: "Please save issue before comment",
|
||||||
|
delete_tip: "Confirm Delete Issue:",
|
||||||
|
check_id_exist: "Check",
|
||||||
|
save_project_first: "Please save the project first",
|
||||||
|
tapd_status_new: "New",
|
||||||
|
tapd_status_in_progress: "Acceptance/Processing",
|
||||||
|
tapd_status_reopened: "Opened",
|
||||||
|
tapd_status_rejected: "Refused",
|
||||||
|
tapd_status_verified: "Authenticated",
|
||||||
|
tapd_status_closed: "Closed",
|
||||||
|
tapd_status_resolved: "Resolved",
|
||||||
|
please_choose_platform_status: "Please select platform status",
|
||||||
|
},
|
||||||
|
report: {
|
||||||
|
name: "Test Plan Report",
|
||||||
|
list: {
|
||||||
|
name: "name",
|
||||||
|
test_plan: "Test plan",
|
||||||
|
creator: "Creator",
|
||||||
|
create_time: "Create Time",
|
||||||
|
trigger_mode: "Trigger Mode",
|
||||||
|
run_time: "run time(s)",
|
||||||
|
pass_rate: "pass rate",
|
||||||
|
status: "Status",
|
||||||
|
operation: "Operation",
|
||||||
|
},
|
||||||
|
trigger_mode: {
|
||||||
|
manual: "Manual",
|
||||||
|
automation: "Automation",
|
||||||
|
},
|
||||||
|
overview: "Overview",
|
||||||
|
testing_time: "Testing time",
|
||||||
|
total_number_tests: "Total",
|
||||||
|
exacutive_rate: "Exacutive rate",
|
||||||
|
exacutive_rate_tip: "Use cases executed/all use cases * 100%",
|
||||||
|
passing_rate: "Passing rate",
|
||||||
|
passing_rate_tip: "Execute passed use cases/all use cases * 100%",
|
||||||
|
content: "Content",
|
||||||
|
report_summary: "Summary",
|
||||||
|
analysis_functional: "Analysis Functional",
|
||||||
|
analysis_api: "Analysis Api",
|
||||||
|
analysis_ui: "Analysis Ui",
|
||||||
|
analysis_load: "Analysis Performance",
|
||||||
|
valid_for_24_hours: "Valid for 24 hours",
|
||||||
|
configuration: "Config",
|
||||||
|
share: "Share",
|
||||||
|
template_configuration: "Template configuration",
|
||||||
|
test_result: "Test Result",
|
||||||
|
fail_case: "Fail Case",
|
||||||
|
issue_list: "Issue List",
|
||||||
|
all_case: "All Case",
|
||||||
|
},
|
||||||
|
reporter: 'Reporter',
|
||||||
|
lastmodify: 'Last Modify',
|
||||||
|
sync_to_new_version: "Copy to latest version"
|
||||||
|
};
|
|
@ -0,0 +1,514 @@
|
||||||
|
export default {
|
||||||
|
sync_add_api_load: '同步添加关联的接口和性能测试',
|
||||||
|
next: '下一条',
|
||||||
|
total_size: '共 {0} 条',
|
||||||
|
related_requirements: '关联需求',
|
||||||
|
please_related_requirements: '请选择要关联的需求',
|
||||||
|
please_select_the_test_to_associate: "请选择需要关联的测试",
|
||||||
|
person_responsible: "责任人",
|
||||||
|
test_track: "测试跟踪",
|
||||||
|
planning_execution: "规划&执行",
|
||||||
|
confirm: "确 定",
|
||||||
|
cancel: "取 消",
|
||||||
|
project: "项目",
|
||||||
|
save: "保 存",
|
||||||
|
return: "返 回",
|
||||||
|
length_less_than: "长度必须小于",
|
||||||
|
recent_plan: "我最近的计划",
|
||||||
|
recent_case: "我最近的用例",
|
||||||
|
recent_review: "我最近的评审",
|
||||||
|
pass_rate: "通过率",
|
||||||
|
execution_result: ": 请选择执行结果",
|
||||||
|
actual_result: ": 实际结果为空",
|
||||||
|
cancel_relevance_success: "取消关联成功",
|
||||||
|
switch_project: "切换项目",
|
||||||
|
functional_test_case: "功能测试用例",
|
||||||
|
api_test_case: "接口测试用例",
|
||||||
|
ui_test_case: "UI 测试用例",
|
||||||
|
performance_test_case: "性能测试用例",
|
||||||
|
scenario_test_case: "场景测试用例",
|
||||||
|
ui_scenario_test_case: "UI 测试用例",
|
||||||
|
report_statistics: "报告统计",
|
||||||
|
sort: '种类',
|
||||||
|
automatic_status_update: "自动状态更新",
|
||||||
|
case: {
|
||||||
|
list: "列表",
|
||||||
|
minder: "脑图",
|
||||||
|
step_info: "步骤信息",
|
||||||
|
other_info: "其他信息",
|
||||||
|
step_describe: "步骤描述",
|
||||||
|
step_describe_tip: "适用于需要每一个步骤进行测试的场景,有明确的测试步骤、预期结果",
|
||||||
|
text_describe: "文本描述",
|
||||||
|
text_describe_tip: "使用于简单的测试场景,没有明确的测试步骤",
|
||||||
|
change_type: "更改类型",
|
||||||
|
minder_create_tip: "失败, 无法在脑图创建其父模块",
|
||||||
|
minder_tem_node_tip: "无法在临时节点{0}下创建用例",
|
||||||
|
minder_is_module_tip: "{0}是模块,不能修改为用例",
|
||||||
|
minder_not_module_tip: "模块{0},不能创建在非模块节点下",
|
||||||
|
minder_all_module_tip: "全部用例为虚拟模块,请在其他模块创建用例",
|
||||||
|
minder_issue_delete_tip: "取消缺陷关联成功",
|
||||||
|
|
||||||
|
minder_save_confirm_title: '请保存脑图',
|
||||||
|
minder_save_confirm_tip: '脑图未保存,确认保存脑图吗?',
|
||||||
|
minder_import_save_confirm_tip: '导入成功后会刷新脑图,确认保存脑图吗?',
|
||||||
|
|
||||||
|
check_select: "请勾选用例",
|
||||||
|
export_all_cases: '确定要导出全部用例吗?',
|
||||||
|
input_test_case: '请输入关联用例名称',
|
||||||
|
test_name: '测试名称',
|
||||||
|
other: "--其他--",
|
||||||
|
test_case: "功能用例",
|
||||||
|
move: "移动用例",
|
||||||
|
case_list: "用例列表",
|
||||||
|
create_case: "创建用例",
|
||||||
|
edit_case: "编辑用例",
|
||||||
|
view_case: "查看用例",
|
||||||
|
no_project: "该工作空间下无项目,请先创建项目",
|
||||||
|
priority: "用例等级",
|
||||||
|
type: "类型",
|
||||||
|
method: "测试方式",
|
||||||
|
auto: "自动",
|
||||||
|
manual: "手动",
|
||||||
|
create: "新建用例",
|
||||||
|
case_type: "用例类型",
|
||||||
|
name: "用例名称",
|
||||||
|
module: "所属模块",
|
||||||
|
project: '所属项目',
|
||||||
|
maintainer: "维护人",
|
||||||
|
steps: "执行步骤",
|
||||||
|
number: "编号",
|
||||||
|
prerequisite: "前置条件",
|
||||||
|
step_desc: "用例步骤",
|
||||||
|
step_model: "编辑模式",
|
||||||
|
expected_results: "预期结果",
|
||||||
|
input_name: "请输入名称",
|
||||||
|
input_module: "请选择模块",
|
||||||
|
input_maintainer: "请选择维护人",
|
||||||
|
input_priority: "请选择用例等级",
|
||||||
|
input_type: "请选择用例类型",
|
||||||
|
input_method: "请选择测试方式",
|
||||||
|
input_prerequisite: "请输入前置条件",
|
||||||
|
input_demand_name: "请输入需求ID或名称",
|
||||||
|
delete_confirm: "确认删除测试用例",
|
||||||
|
delete: "删除用例",
|
||||||
|
save_create_continue: "保存并继续创建",
|
||||||
|
save_add_public: "保存并添加到公共用例库",
|
||||||
|
please_create_project: "暂无项目,请先创建项目",
|
||||||
|
create_module_first: "请先新建模块",
|
||||||
|
relate_test: "关联测试",
|
||||||
|
relate_issue: "关联缺陷",
|
||||||
|
demand_name_id: "需求ID/名称",
|
||||||
|
please_select_relate_test: "请选择要关联的测试",
|
||||||
|
relate_test_not_find: '关联的测试不存在,请检查用例',
|
||||||
|
other_relate_test_not_find: '关联的测试名,请前往第三方平台执行',
|
||||||
|
batch_handle: '批量处理 (选中{0}项)',
|
||||||
|
batch_update: '更新{0}个用例的属性',
|
||||||
|
select_catalog: '请选择用例目录',
|
||||||
|
updated_attr_value: '更新后属性值为',
|
||||||
|
batch_operate: '批量操作',
|
||||||
|
please_select_attr: '请选择属性',
|
||||||
|
please_select_attr_value: '请选择属性对应的值',
|
||||||
|
batch_edit_case: '批量编辑',
|
||||||
|
batch_move_case: '批量移动',
|
||||||
|
batch_delete_case: '批量删除',
|
||||||
|
batch_copy: '批量复制',
|
||||||
|
batch_add_public: '批量添加到公共用例库',
|
||||||
|
batch_link_demand: '批量关联需求',
|
||||||
|
public_warning: '未开启公共用例库配置',
|
||||||
|
generate_dependencies: '生成依赖关系',
|
||||||
|
generate_dependencies_warning: '为了更好的体验,建议勾选一百条以下的数据',
|
||||||
|
batch_unlink: '批量取消关联',
|
||||||
|
unlink: '取消关联',
|
||||||
|
project_name: '所属项目',
|
||||||
|
status: '评审结果',
|
||||||
|
status_prepare: '未开始',
|
||||||
|
status_running: '进行中',
|
||||||
|
status_finished: '已完成',
|
||||||
|
cancel_relevance_project: "取消项目关联会同时取消该项目下已关联的测试用例",
|
||||||
|
img_loading_fail: "图片加载失败",
|
||||||
|
pdf_loading_fail: "PDF加载失败",
|
||||||
|
upload_tip: "文件大小限制[0-500MB]",
|
||||||
|
add_attachment: "添加",
|
||||||
|
attachment: "附件",
|
||||||
|
upload_time: "上传时间",
|
||||||
|
total: "用例总数",
|
||||||
|
node_id: "节点ID",
|
||||||
|
node_path: "节点路径",
|
||||||
|
match_rule: "测试用例匹配规则",
|
||||||
|
import: {
|
||||||
|
import: "导入用例",
|
||||||
|
case_import: "导入测试用例",
|
||||||
|
case_export: "导出测试用例",
|
||||||
|
download_template: "下载模版",
|
||||||
|
click_upload: "点击上传",
|
||||||
|
upload_limit: "只能上传xls/xlsx文件,且不超过100M",
|
||||||
|
upload_xmind: "支持文件类型:.xmind;一次至多导入800 条用例",
|
||||||
|
upload_xmind_format: "上传文件只能是 .xmind 格式",
|
||||||
|
upload_limit_other_size: "上传文件大小不能超过",
|
||||||
|
upload_limit_count: "一次只能上传一个文件",
|
||||||
|
upload_limit_format: "上传文件只能是 xls、xlsx格式!",
|
||||||
|
upload_limit_size: "上传文件大小不能超过 100MB!",
|
||||||
|
success: "导入成功!",
|
||||||
|
importing: "导入中...",
|
||||||
|
excel_title: "表格文件",
|
||||||
|
xmind_title: "思维导图",
|
||||||
|
import_desc: "导入说明",
|
||||||
|
import_file: "上传文件",
|
||||||
|
ignore_error: "忽略错误",
|
||||||
|
continue_upload: "继续上传",
|
||||||
|
import_create: "导入新建",
|
||||||
|
import_update: "导入更新",
|
||||||
|
import_tip1: "项目设置中“测试用例自定义ID” 开关开启时ID为必填项",
|
||||||
|
import_tip2: "导入更新时ID为必填项",
|
||||||
|
import_file_tips: "请先上传文件!",
|
||||||
|
import_format: "导入格式",
|
||||||
|
select_import_field: "选择导出字段",
|
||||||
|
select_import_all_field: "选择所有字段",
|
||||||
|
base_field: "基础字段",
|
||||||
|
custom_field: "自定义字段",
|
||||||
|
other_field: "其他字段",
|
||||||
|
other_field_tip: "注意:其他字段,导出后不支持导入",
|
||||||
|
},
|
||||||
|
export: {
|
||||||
|
export: "导出用例",
|
||||||
|
export_tip: "请切换成用例列表勾选用例导出!"
|
||||||
|
},
|
||||||
|
case_desc: "用例描述",
|
||||||
|
passing_rate: '用例通过率',
|
||||||
|
version: "版本",
|
||||||
|
sync_to_new_version: "复制以下信息到新版本",
|
||||||
|
exists_multiple_prerequisite_node: "下存在多个前置条件",
|
||||||
|
exists_multiple_remark_node: "下存在多个备注",
|
||||||
|
},
|
||||||
|
plan: {
|
||||||
|
test_plan: "测试计划",
|
||||||
|
test_plan_id: '测试计划Id',
|
||||||
|
create_plan: "创建测试计划",
|
||||||
|
edit_plan: "编辑测试计划",
|
||||||
|
plan_name: "计划名称",
|
||||||
|
plan_project: "所属项目",
|
||||||
|
related_project: "关联项目",
|
||||||
|
related_tip: "关联项目后可以添加关联项目下的测试用例到测试计划列表",
|
||||||
|
plan_stage: "测试阶段",
|
||||||
|
follow_people: "关注人",
|
||||||
|
plan_status: "状态",
|
||||||
|
smoke_test: "冒烟测试",
|
||||||
|
functional_test: "功能测试",
|
||||||
|
regression_test: "回归测试",
|
||||||
|
integration_testing: "集成测试",
|
||||||
|
system_test: "系统测试",
|
||||||
|
version_validation: "版本验证",
|
||||||
|
plan_principal: "责任人",
|
||||||
|
input_plan_name: "请输入测试计划名称",
|
||||||
|
input_plan_principal: "请选择负责人",
|
||||||
|
input_plan_project: "请选择所属项目",
|
||||||
|
input_related_project: "请选择关联项目",
|
||||||
|
input_plan_stage: "请选择测试阶段",
|
||||||
|
plan_status_prepare: "未开始",
|
||||||
|
plan_status_running: "进行中",
|
||||||
|
plan_status_finished: "已结束",
|
||||||
|
plan_status_completed: "已完成",
|
||||||
|
plan_status_archived: "已归档",
|
||||||
|
plan_status_trash: "废弃",
|
||||||
|
planned_start_time: "计划开始",
|
||||||
|
planned_end_time: "计划结束",
|
||||||
|
actual_start_time: "实际开始",
|
||||||
|
actual_end_time: "实际结束",
|
||||||
|
plan_delete_confirm: "将删除该测试计划下所有用例,确认删除测试计划: ",
|
||||||
|
plan_delete_tip: "该测试计划正在进行中,请确认再删除!",
|
||||||
|
plan_delete: "删除计划",
|
||||||
|
api_case: "接口测试用例",
|
||||||
|
scenario_case: "场景测试用例",
|
||||||
|
execute_result: "执行结果",
|
||||||
|
execute_time: '执行时间',
|
||||||
|
is_api_case_executing: "是否执行接口用例",
|
||||||
|
is_scenario_executing: '是否执行场景',
|
||||||
|
is_performance_executing: '是否执行性能',
|
||||||
|
test_plan_test_case_count: "功能用例数",
|
||||||
|
test_plan_api_case_count: "接口用例数",
|
||||||
|
test_plan_api_scenario_count: "场景用例数",
|
||||||
|
test_plan_ui_scenario_count: "UI 场景用例数",
|
||||||
|
test_plan_load_case_count: "性能用例数",
|
||||||
|
test_plan_component_case_count: "步骤用例数",
|
||||||
|
data_name: "数据名称",
|
||||||
|
test_plan_batch_switch: "批量开/关定时任务",
|
||||||
|
batch_update_schedule_enable: '更新{0}个测试计划的定时任务状态为',
|
||||||
|
batch_update_schedule_enable_alert: '注意:只能更新已设置了定时任务的测试计划',
|
||||||
|
next_run_time: '下次运行时间',
|
||||||
|
schedule_enabled: '已开启',
|
||||||
|
check_schedule_enabled: '您勾选的数据检测到有{0}条定时任务可以修改',
|
||||||
|
no_check_schedule_enabled: '您勾选的数据没有检测到定时任务',
|
||||||
|
load_case: {
|
||||||
|
case: "性能用例",
|
||||||
|
execution_status: "执行状态",
|
||||||
|
report: "报告",
|
||||||
|
view_report: "查看报告",
|
||||||
|
unlink_in_bulk: "批量取消关联",
|
||||||
|
batch_exec_cases: "批量执行用例",
|
||||||
|
exec: "正在执行....",
|
||||||
|
error: "用例执行错误,请单独调试该用例!",
|
||||||
|
report_not_found: "报告不存在",
|
||||||
|
content_empty: "内容为空",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
demand: {
|
||||||
|
id: '需求ID',
|
||||||
|
name: '需求名称',
|
||||||
|
batch_relate: '批量关联需求',
|
||||||
|
relate_is_null_warn: '关联需求不能为空!',
|
||||||
|
relate_name_is_null_warn: '需求名称不能为空!',
|
||||||
|
third_platform_demand: "三方平台需求",
|
||||||
|
other_demand: "其他需求"
|
||||||
|
},
|
||||||
|
step_model: '步骤模型',
|
||||||
|
review: {
|
||||||
|
test_review: "用例评审",
|
||||||
|
create_review: "创建用例评审",
|
||||||
|
edit_review: "编辑用例评审",
|
||||||
|
review_name: "评审名称",
|
||||||
|
reviewer: "评审人",
|
||||||
|
review_project: "所属项目",
|
||||||
|
related_project: "关联项目",
|
||||||
|
related_tip: "关联项目后可以添加关联项目下的测试用例到评审列表",
|
||||||
|
review_creator: "发起人",
|
||||||
|
review_follow_people: "关注人",
|
||||||
|
review_status: "状态",
|
||||||
|
end_time: "截止时间",
|
||||||
|
delete: "删除评审",
|
||||||
|
input_review_name: "请输入评审名称",
|
||||||
|
input_review_project: "请选择所属项目",
|
||||||
|
input_reviewer: "请选择评审人",
|
||||||
|
no_link_case: "没有关联用例!",
|
||||||
|
pass: "通过",
|
||||||
|
un_pass: "未通过",
|
||||||
|
prepare: '未评审',
|
||||||
|
comment: "评论",
|
||||||
|
my_review: "我的评审",
|
||||||
|
my_create: "我创建的评审",
|
||||||
|
reviewed_by_me: "待我评审",
|
||||||
|
creator: "创建人",
|
||||||
|
done: "已评用例",
|
||||||
|
result_distribution: "结果分布",
|
||||||
|
deadline_cannot_early_tips: "截止时间不能早于当前时间!",
|
||||||
|
},
|
||||||
|
comment: {
|
||||||
|
no_comment: "暂无评论",
|
||||||
|
send_comment: "发表评论(Ctrl+Enter发送)",
|
||||||
|
send: "确定",
|
||||||
|
description_is_null: "评论内容不能为空!",
|
||||||
|
send_success: "评论成功!",
|
||||||
|
cannot_edit: "无法编辑此评论!",
|
||||||
|
cannot_delete: "无法删除此评论!",
|
||||||
|
submit_description: "请先提交评论!",
|
||||||
|
},
|
||||||
|
review_view: {
|
||||||
|
review: "评审",
|
||||||
|
all_case: "全部用例",
|
||||||
|
start_review: "开始评审",
|
||||||
|
relevance_case: "关联用例",
|
||||||
|
last_page: "已经到底了!",
|
||||||
|
execute_result: "评审结果",
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
id: '模块ID',
|
||||||
|
search: "搜索模块",
|
||||||
|
rename: "重命名",
|
||||||
|
add_submodule: "添加子模块",
|
||||||
|
add_module: "添加模块",
|
||||||
|
name: "模块名称",
|
||||||
|
delete_confirm: "确认删除模块: ",
|
||||||
|
delete_batch_confirm: "确认批量删除勾选的场景步骤?",
|
||||||
|
delete_all_resource: "以及模块下所有子模块和测试用例",
|
||||||
|
module: "模块",
|
||||||
|
title: "标题",
|
||||||
|
status: "状态",
|
||||||
|
describe: "描述",
|
||||||
|
current_owner: "处理人",
|
||||||
|
creation_time: "创建时间",
|
||||||
|
project_name: "所属项目"
|
||||||
|
},
|
||||||
|
home: {
|
||||||
|
recent_test: "最近测试",
|
||||||
|
my_plan: "我的计划",
|
||||||
|
test_rate: "测试进度",
|
||||||
|
tested_case: "已测用例",
|
||||||
|
review_progress: "评审进度",
|
||||||
|
case_count: "用例数量统计",
|
||||||
|
relevance_case: "关联用例数量统计",
|
||||||
|
case_maintenance: "用例责任人分布",
|
||||||
|
bug_count: "遗留缺陷统计",
|
||||||
|
case_review: "用例评审",
|
||||||
|
review_rate: "评审率",
|
||||||
|
coverage: "覆盖率",
|
||||||
|
function_case_count: "功能用例数",
|
||||||
|
relevance_case_count: "关联用例数",
|
||||||
|
serial_number: "序号",
|
||||||
|
test_plan_name: "测试计划名称",
|
||||||
|
case_size: "用例数",
|
||||||
|
bug_size: "缺陷数",
|
||||||
|
passing_rate: "通过率",
|
||||||
|
percentage: "占比"
|
||||||
|
},
|
||||||
|
plan_view: {
|
||||||
|
plan: "计划",
|
||||||
|
relevance_test_case: "关联测试用例",
|
||||||
|
cancel_all_relevance: "取消全部关联",
|
||||||
|
executor: "执行人",
|
||||||
|
executor_match_rule: "执行者匹配规则",
|
||||||
|
execute_result: "执行结果",
|
||||||
|
pass: "通过",
|
||||||
|
not_pass: "不通过",
|
||||||
|
failure: "失败",
|
||||||
|
blocking: "阻塞",
|
||||||
|
stop: "停止",
|
||||||
|
skip: "跳过",
|
||||||
|
actual_result: "实际结果",
|
||||||
|
step_result: "步骤执行结果",
|
||||||
|
my_case: "我的用例",
|
||||||
|
all_case: "全部用例",
|
||||||
|
pre_case: "上一条用例",
|
||||||
|
next_case: "下一条用例",
|
||||||
|
change_execution_results: "更改执行结果",
|
||||||
|
change_executor: "更改执行人",
|
||||||
|
select_executor: "请选择执行人",
|
||||||
|
select_execute_result: "选择执行结果",
|
||||||
|
cancel_relevance: "取消用例关联",
|
||||||
|
confirm_cancel_relevance: "确认取消关联",
|
||||||
|
select_manipulate: "请选择需要操作的数据",
|
||||||
|
select_template: "选择模版",
|
||||||
|
step: "步骤",
|
||||||
|
submit_issues: "提缺陷",
|
||||||
|
operate_step: "操作步骤",
|
||||||
|
edit_component: "编辑组件",
|
||||||
|
component: "组件",
|
||||||
|
base_info: "基础信息",
|
||||||
|
mock_info: "Mock服务",
|
||||||
|
test_result: "测试结果",
|
||||||
|
result_distribution: "测试结果分布",
|
||||||
|
custom_component: "自定义模块",
|
||||||
|
defect_list: "缺陷列表",
|
||||||
|
create_report: "创建测试报告",
|
||||||
|
view_report: "查看测试报告",
|
||||||
|
component_library: "组件库",
|
||||||
|
component_library_tip: "拖拽组件库中组件,添加至右侧,预览报告效果,每个系统组件只能添加一个。",
|
||||||
|
delete_component_tip: "请至少保留一个组件",
|
||||||
|
input_template_name: "输入模版名称",
|
||||||
|
template_special_characters: '模版名称不支持特殊字符',
|
||||||
|
case_count: "用例数",
|
||||||
|
issues_count: "缺陷数",
|
||||||
|
result_statistics: "测试结果统计",
|
||||||
|
result_statistics_chart: "测试结果统计图",
|
||||||
|
create_template: "新建模版",
|
||||||
|
report_template: "测试报告模版",
|
||||||
|
test_detail: "测试详情",
|
||||||
|
failure_case: "失败用例",
|
||||||
|
export_report: "导出报告",
|
||||||
|
share_report: "分享报告",
|
||||||
|
no_case_relevance: "没有关联用例",
|
||||||
|
automatically_update_status: "自动更新状态",
|
||||||
|
automatically_update_status_tip: "当功能用例关联的接口或性能用例在测试计划执行后,自动更新功能用例的状态",
|
||||||
|
allow_associated_repetitive_cases: "允许关联重复用例",
|
||||||
|
allow_associated_repetitive_cases_tip: "是否允许同一个测试计划中多次关联相同用例",
|
||||||
|
performance_case_count: "性能测试用例数",
|
||||||
|
running: "运行中",
|
||||||
|
please_choose_test_case: "请选择测试用例!",
|
||||||
|
execute_tip: "步骤执行结果中含有 失败 结果,无法标记该用例为 通过 状态!"
|
||||||
|
},
|
||||||
|
issue: {
|
||||||
|
issue: "缺陷",
|
||||||
|
issue_management: "缺陷管理",
|
||||||
|
platform_status: "平台状态",
|
||||||
|
issue_resource: "缺陷来源",
|
||||||
|
create_issue: "创建缺陷",
|
||||||
|
add_issue: "添加缺陷",
|
||||||
|
issue_list: "缺陷列表",
|
||||||
|
search_name: "根据标题搜索",
|
||||||
|
platform_tip: "在系统设置-工作空间-服务集成中集成缺陷管理平台可以提交缺陷到指定缺陷管理平台",
|
||||||
|
input_title: "请输入标题",
|
||||||
|
id: "缺陷ID",
|
||||||
|
title: "缺陷标题",
|
||||||
|
description: "缺陷描述",
|
||||||
|
status: "缺陷状态",
|
||||||
|
issue_project: "所属项目",
|
||||||
|
platform: "平台",
|
||||||
|
operate: "操作",
|
||||||
|
close: "关闭缺陷",
|
||||||
|
delete: "删除缺陷",
|
||||||
|
title_description_required: "标题和描述必填",
|
||||||
|
close_success: "关闭成功",
|
||||||
|
delete_warning: "解除会影响测试计划相关统计,是否确认",
|
||||||
|
preview: "预览",
|
||||||
|
status_new: '新建',
|
||||||
|
status_resolved: '已解决',
|
||||||
|
status_closed: '已关闭',
|
||||||
|
status_active: '激活',
|
||||||
|
status_delete: '删除',
|
||||||
|
status_in_progress: '接受/处理',
|
||||||
|
status_rejected: '拒绝',
|
||||||
|
status_upcoming: '待办',
|
||||||
|
status_reopened: '重新打开',
|
||||||
|
please_choose_current_owner: "请选择处理人",
|
||||||
|
tapd_current_owner: "Tapd 处理人",
|
||||||
|
zentao_bug_build: "禅道 影响版本",
|
||||||
|
zentao_bug_assigned: "禅道 处理人",
|
||||||
|
third_party_integrated: "集成第三方平台",
|
||||||
|
use_third_party: "使用 Jira 缺陷模板",
|
||||||
|
update_third_party_bugs: "更新第三方平台的缺陷",
|
||||||
|
sync_bugs: "同步缺陷",
|
||||||
|
sync_complete: "同步完成",
|
||||||
|
issue_sync_tip: "当前项目正在同步缺陷, 请稍等!",
|
||||||
|
save_before_open_comment: "请先保存缺陷再添加评论",
|
||||||
|
delete_tip: "确认删除缺陷:",
|
||||||
|
check_id_exist: "检查",
|
||||||
|
save_project_first: "请先保存项目",
|
||||||
|
tapd_status_new: "新",
|
||||||
|
tapd_status_in_progress: "接受/处理",
|
||||||
|
tapd_status_reopened: "重新打开",
|
||||||
|
tapd_status_rejected: "已拒绝",
|
||||||
|
tapd_status_verified: "已验证",
|
||||||
|
tapd_status_closed: "已关闭",
|
||||||
|
tapd_status_resolved: "已解决",
|
||||||
|
please_choose_platform_status: "请选择平台状态"
|
||||||
|
},
|
||||||
|
report: {
|
||||||
|
name: "测试计划报告",
|
||||||
|
list: {
|
||||||
|
name: "名称",
|
||||||
|
test_plan: "测试计划名称",
|
||||||
|
creator: "创建人",
|
||||||
|
create_time: "创建时间",
|
||||||
|
trigger_mode: "触发方式",
|
||||||
|
run_time: "运行耗时(s)",
|
||||||
|
pass_rate: "成功率",
|
||||||
|
status: "状态",
|
||||||
|
operation: "操作",
|
||||||
|
},
|
||||||
|
trigger_mode: {
|
||||||
|
manual: "手动触发",
|
||||||
|
automation: "自动触发",
|
||||||
|
},
|
||||||
|
overview: "概览",
|
||||||
|
testing_time: "测试时间",
|
||||||
|
total_number_tests: "测试总数",
|
||||||
|
exacutive_rate: "执行率",
|
||||||
|
exacutive_rate_tip: "执行过的用例/所有用例 * 100%",
|
||||||
|
passing_rate: "通过率",
|
||||||
|
passing_rate_tip: "执行通过用例/所有用例 * 100%",
|
||||||
|
content: "目录",
|
||||||
|
report_summary: "报告总结",
|
||||||
|
analysis_functional: "功能用例统计分析",
|
||||||
|
analysis_api: "接口用例统计分析",
|
||||||
|
analysis_ui: "UI 用例统计分析",
|
||||||
|
analysis_load: "性能用例统计分析",
|
||||||
|
valid_for_24_hours: "24小时有效",
|
||||||
|
configuration: "配置",
|
||||||
|
share: "分享",
|
||||||
|
template_configuration: "模板配置",
|
||||||
|
test_result: "测试结果",
|
||||||
|
fail_case: "失败用例",
|
||||||
|
issue_list: "缺陷列表",
|
||||||
|
all_case: "所有用例",
|
||||||
|
},
|
||||||
|
reporter: '报告人',
|
||||||
|
lastmodify: '最后更改'
|
||||||
|
};
|
|
@ -0,0 +1,514 @@
|
||||||
|
export default {
|
||||||
|
sync_add_api_load: '同步添加關聯的接口和性能測試',
|
||||||
|
next: '下一條',
|
||||||
|
total_size: '共 {0} 條',
|
||||||
|
related_requirements: '關聯需求',
|
||||||
|
please_related_requirements: '請選擇要關聯的需求',
|
||||||
|
please_select_the_test_to_associate: "請選擇需要關聯的測試",
|
||||||
|
person_responsible: "責任人",
|
||||||
|
test_track: "測試跟蹤",
|
||||||
|
planning_execution: "規劃&執行",
|
||||||
|
confirm: "確 定",
|
||||||
|
cancel: "取 消",
|
||||||
|
project: "項目",
|
||||||
|
save: "保 存",
|
||||||
|
return: "返 回",
|
||||||
|
length_less_than: "長度必須小於",
|
||||||
|
recent_plan: "我最近的計劃",
|
||||||
|
recent_case: "我最近的用例",
|
||||||
|
recent_review: "我最近的評審",
|
||||||
|
pass_rate: "通過率",
|
||||||
|
execution_result: ": 請選擇執行結果",
|
||||||
|
actual_result: ": 實際結果為空",
|
||||||
|
cancel_relevance_success: "取消關聯成功",
|
||||||
|
switch_project: "切換項目",
|
||||||
|
functional_test_case: "功能測試用例",
|
||||||
|
api_test_case: "接口測試用例",
|
||||||
|
ui_test_case: "UI 測試用例",
|
||||||
|
performance_test_case: "性能測試用例",
|
||||||
|
scenario_test_case: "場景測試用例",
|
||||||
|
ui_scenario_test_case: "UI 測試用例",
|
||||||
|
report_statistics: "報告統計",
|
||||||
|
sort: '種類',
|
||||||
|
automatic_status_update: "自動狀態更新",
|
||||||
|
case: {
|
||||||
|
list: "列錶",
|
||||||
|
minder: "腦圖",
|
||||||
|
step_info: "步驟信息",
|
||||||
|
other_info: "其他信息",
|
||||||
|
step_describe: "步驟描述",
|
||||||
|
step_describe_tip: "適用於需要每一個步驟進行測試的場景,有明確的測試步驟、預期結果",
|
||||||
|
text_describe: "文本描述",
|
||||||
|
text_describe_tip: "使用於簡單的測試場景,沒有明確的測試步驟",
|
||||||
|
change_type: "更改類型",
|
||||||
|
minder_create_tip: "失敗, 無法在腦圖創建其父模塊",
|
||||||
|
minder_tem_node_tip: "無法在臨時節點{0}下創建用例",
|
||||||
|
minder_is_module_tip: "{0}是模塊,不能修改為用例",
|
||||||
|
minder_not_module_tip: "模塊{0},不能創建在非模塊節點下",
|
||||||
|
minder_all_module_tip: "全部用例為虛擬模塊,請在其他模塊創建用例",
|
||||||
|
minder_issue_delete_tip: "取消缺陷關聯成功",
|
||||||
|
|
||||||
|
minder_save_confirm_title: '請保存腦圖',
|
||||||
|
minder_save_confirm_tip: '腦圖未保存,確認保存腦圖嗎?',
|
||||||
|
minder_import_save_confirm_tip: '導入成功後會刷新腦圖,確認保存腦圖嗎?',
|
||||||
|
|
||||||
|
check_select: "請勾選用例",
|
||||||
|
export_all_cases: '確定要導出全部用例嗎?',
|
||||||
|
input_test_case: '請輸入關聯用例名稱',
|
||||||
|
test_name: '測試名稱',
|
||||||
|
other: "--其他--",
|
||||||
|
test_case: "功能用例",
|
||||||
|
move: "移動用例",
|
||||||
|
case_list: "用例列錶",
|
||||||
|
create_case: "創建用例",
|
||||||
|
edit_case: "編輯用例",
|
||||||
|
view_case: "查看用例",
|
||||||
|
no_project: "該工作空間下無項目,請先創建項目",
|
||||||
|
priority: "用例等級",
|
||||||
|
type: "類型",
|
||||||
|
method: "測試方式",
|
||||||
|
auto: "自動",
|
||||||
|
manual: "手動",
|
||||||
|
create: "新建用例",
|
||||||
|
case_type: "用例類型",
|
||||||
|
name: "用例名稱",
|
||||||
|
module: "所屬模塊",
|
||||||
|
project: '所屬項目',
|
||||||
|
maintainer: "維護人",
|
||||||
|
steps: "執行步驟",
|
||||||
|
number: "編號",
|
||||||
|
prerequisite: "前置條件",
|
||||||
|
step_desc: "用例步驟",
|
||||||
|
step_model: "編輯模式",
|
||||||
|
expected_results: "預期結果",
|
||||||
|
input_name: "請輸入名稱",
|
||||||
|
input_module: "請選擇模塊",
|
||||||
|
input_maintainer: "請選擇維護人",
|
||||||
|
input_priority: "請選擇用例等級",
|
||||||
|
input_type: "請選擇用例類型",
|
||||||
|
input_method: "請選擇測試方式",
|
||||||
|
input_prerequisite: "請輸入前置條件",
|
||||||
|
input_demand_name: "請輸入需求ID或名稱",
|
||||||
|
delete_confirm: "確認刪除測試用例",
|
||||||
|
delete: "刪除用例",
|
||||||
|
save_create_continue: "保存併繼續創建",
|
||||||
|
save_add_public: "保存併添加到公共用例庫",
|
||||||
|
please_create_project: "暫無項目,請先創建項目",
|
||||||
|
create_module_first: "請先新建模塊",
|
||||||
|
relate_test: "關聯測試",
|
||||||
|
relate_issue: "關聯缺陷",
|
||||||
|
demand_name_id: "需求ID/名稱",
|
||||||
|
please_select_relate_test: "請選擇要關聯的測試",
|
||||||
|
relate_test_not_find: '關聯的測試不存在,請檢查用例',
|
||||||
|
other_relate_test_not_find: '關聯的測試名,請前往第三方平臺執行',
|
||||||
|
batch_handle: '批量處理 (選中{0}項)',
|
||||||
|
batch_update: '更新{0}個用例的屬性',
|
||||||
|
select_catalog: '請選擇用例目錄',
|
||||||
|
updated_attr_value: '更新後屬性值為',
|
||||||
|
batch_operate: '批量操作',
|
||||||
|
please_select_attr: '請選擇屬性',
|
||||||
|
please_select_attr_value: '請選擇屬性對應的值',
|
||||||
|
batch_edit_case: '批量編輯',
|
||||||
|
batch_move_case: '批量移動',
|
||||||
|
batch_delete_case: '批量刪除',
|
||||||
|
batch_copy: '批量復制',
|
||||||
|
batch_add_public: '批量添加到公共用例庫',
|
||||||
|
batch_link_demand: '批量關聯需求',
|
||||||
|
public_warning: '未開啟公共用例庫配置',
|
||||||
|
generate_dependencies: '生成依賴關繫',
|
||||||
|
generate_dependencies_warning: '為了更好的體驗,建議勾選一百條以下的數據',
|
||||||
|
batch_unlink: '批量取消關聯',
|
||||||
|
unlink: '取消關聯',
|
||||||
|
project_name: '所屬項目',
|
||||||
|
status: '評審結果',
|
||||||
|
status_prepare: '未開始',
|
||||||
|
status_running: '進行中',
|
||||||
|
status_finished: '已完成',
|
||||||
|
cancel_relevance_project: "取消項目關聯會同時取消該項目下已關聯的測試用例",
|
||||||
|
img_loading_fail: "圖片加載失敗",
|
||||||
|
pdf_loading_fail: "PDF加載失敗",
|
||||||
|
upload_tip: "文件大小限制[0-500MB]",
|
||||||
|
add_attachment: "添加",
|
||||||
|
attachment: "附件",
|
||||||
|
upload_time: "上傳時間",
|
||||||
|
total: "用例總數",
|
||||||
|
node_id: "節點ID",
|
||||||
|
node_path: "節點路徑",
|
||||||
|
match_rule: "測試用例匹配規則",
|
||||||
|
import: {
|
||||||
|
import: "導入用例",
|
||||||
|
case_import: "導入測試用例",
|
||||||
|
case_export: "導出測試用例",
|
||||||
|
download_template: "下載模版",
|
||||||
|
click_upload: "點擊上傳",
|
||||||
|
upload_limit: "只能上傳xls/xlsx文件,且不超過100M",
|
||||||
|
upload_xmind: "支持文件類型:.xmind;一次至多導入800 條用例",
|
||||||
|
upload_xmind_format: "上傳文件只能是 .xmind 格式",
|
||||||
|
upload_limit_other_size: "上傳文件大小不能超過",
|
||||||
|
upload_limit_count: "一次只能上傳一個文件",
|
||||||
|
upload_limit_format: "上傳文件只能是 xls、xlsx格式!",
|
||||||
|
upload_limit_size: "上傳文件大小不能超過 100MB!",
|
||||||
|
success: "導入成功!",
|
||||||
|
importing: "導入中...",
|
||||||
|
excel_title: "錶格文件",
|
||||||
|
xmind_title: "思維導圖",
|
||||||
|
import_desc: "導入說明",
|
||||||
|
import_file: "上傳文件",
|
||||||
|
ignore_error: "忽略錯誤",
|
||||||
|
continue_upload: "繼續上傳",
|
||||||
|
import_create: "導入新建",
|
||||||
|
import_update: "導入更新",
|
||||||
|
import_tip1: "項目設置中“測試用例自定義ID” 開關開啟時ID為必填項",
|
||||||
|
import_tip2: "導入更新時ID為必填項",
|
||||||
|
import_file_tips: "請先上傳文件!",
|
||||||
|
import_format: "導入格式",
|
||||||
|
select_import_field: "選擇導出字段",
|
||||||
|
select_import_all_field: "選擇所有字段",
|
||||||
|
base_field: "基礎字段",
|
||||||
|
custom_field: "自定義字段",
|
||||||
|
other_field: "其他字段",
|
||||||
|
other_field_tip: "註意:其他字段,導出後不支持導入",
|
||||||
|
},
|
||||||
|
export: {
|
||||||
|
export: "導出用例",
|
||||||
|
export_tip: "請切換成用例列錶勾選用例導出!"
|
||||||
|
},
|
||||||
|
case_desc: "用例描述",
|
||||||
|
passing_rate: '用例通過率',
|
||||||
|
version: "版本",
|
||||||
|
sync_to_new_version: "復制以下信息到新版本",
|
||||||
|
exists_multiple_prerequisite_node: "下存在多個前置條件",
|
||||||
|
exists_multiple_remark_node: "下存在多個備註",
|
||||||
|
},
|
||||||
|
plan: {
|
||||||
|
test_plan: "測試計劃",
|
||||||
|
test_plan_id: '測試計劃Id',
|
||||||
|
create_plan: "創建測試計劃",
|
||||||
|
edit_plan: "編輯測試計劃",
|
||||||
|
plan_name: "計劃名稱",
|
||||||
|
plan_project: "所屬項目",
|
||||||
|
related_project: "關聯項目",
|
||||||
|
related_tip: "關聯項目後可以添加關聯項目下的測試用例到測試計劃列錶",
|
||||||
|
plan_stage: "測試階段",
|
||||||
|
follow_people: "關註人",
|
||||||
|
plan_status: "狀態",
|
||||||
|
smoke_test: "冒煙測試",
|
||||||
|
functional_test: "功能測試",
|
||||||
|
regression_test: "回歸測試",
|
||||||
|
integration_testing: "集成測試",
|
||||||
|
system_test: "繫統測試",
|
||||||
|
version_validation: "版本驗證",
|
||||||
|
plan_principal: "責任人",
|
||||||
|
input_plan_name: "請輸入測試計劃名稱",
|
||||||
|
input_plan_principal: "請選擇負責人",
|
||||||
|
input_plan_project: "請選擇所屬項目",
|
||||||
|
input_related_project: "請選擇關聯項目",
|
||||||
|
input_plan_stage: "請選擇測試階段",
|
||||||
|
plan_status_prepare: "未開始",
|
||||||
|
plan_status_running: "進行中",
|
||||||
|
plan_status_finished: "已結束",
|
||||||
|
plan_status_completed: "已完成",
|
||||||
|
plan_status_archived: "已歸檔",
|
||||||
|
plan_status_trash: "廢棄",
|
||||||
|
planned_start_time: "計劃開始",
|
||||||
|
planned_end_time: "計劃結束",
|
||||||
|
actual_start_time: "實際開始",
|
||||||
|
actual_end_time: "實際結束",
|
||||||
|
plan_delete_confirm: "將刪除該測試計劃下所有用例,確認刪除測試計劃: ",
|
||||||
|
plan_delete_tip: "該測試計劃正在進行中,請確認再刪除!",
|
||||||
|
plan_delete: "刪除計劃",
|
||||||
|
api_case: "接口測試用例",
|
||||||
|
scenario_case: "場景測試用例",
|
||||||
|
execute_result: "執行結果",
|
||||||
|
execute_time: '執行時間',
|
||||||
|
is_api_case_executing: "是否執行接口用例",
|
||||||
|
is_scenario_executing: '是否執行場景',
|
||||||
|
is_performance_executing: '是否執行性能',
|
||||||
|
test_plan_test_case_count: "功能用例數",
|
||||||
|
test_plan_api_case_count: "接口用例數",
|
||||||
|
test_plan_api_scenario_count: "場景用例數",
|
||||||
|
test_plan_ui_scenario_count: "UI 場景用例數",
|
||||||
|
test_plan_load_case_count: "性能用例數",
|
||||||
|
test_plan_component_case_count: "步驟用例數",
|
||||||
|
data_name: "數據名稱",
|
||||||
|
test_plan_batch_switch: "批量開/關定時任務",
|
||||||
|
batch_update_schedule_enable: '更新{0}個測試計劃的定時任務狀態為',
|
||||||
|
batch_update_schedule_enable_alert: '註意:只能更新已設置了定時任務的測試計劃',
|
||||||
|
next_run_time: '下次運行時間',
|
||||||
|
schedule_enabled: '已開啟',
|
||||||
|
check_schedule_enabled: '您勾選的數據檢測到有{0}條定時任務可以修改',
|
||||||
|
no_check_schedule_enabled: '您勾選的數據沒有檢測到定時任務',
|
||||||
|
load_case: {
|
||||||
|
case: "性能用例",
|
||||||
|
execution_status: "執行狀態",
|
||||||
|
report: "報告",
|
||||||
|
view_report: "查看報告",
|
||||||
|
unlink_in_bulk: "批量取消關聯",
|
||||||
|
batch_exec_cases: "批量執行用例",
|
||||||
|
exec: "正在執行....",
|
||||||
|
error: "用例執行錯誤,請單獨調試該用例!",
|
||||||
|
report_not_found: "報告不存在",
|
||||||
|
content_empty: "內容為空",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
demand: {
|
||||||
|
id: '需求ID',
|
||||||
|
name: '需求名稱',
|
||||||
|
batch_relate: '批量關聯需求',
|
||||||
|
relate_is_null_warn: '關聯需求不能為空!',
|
||||||
|
relate_name_is_null_warn: '需求名稱不能為空!',
|
||||||
|
third_platform_demand: "三方平臺需求",
|
||||||
|
other_demand: "其他需求"
|
||||||
|
},
|
||||||
|
step_model: '步驟模型',
|
||||||
|
review: {
|
||||||
|
test_review: "用例評審",
|
||||||
|
create_review: "創建用例評審",
|
||||||
|
edit_review: "編輯用例評審",
|
||||||
|
review_name: "評審名稱",
|
||||||
|
reviewer: "評審人",
|
||||||
|
review_project: "所屬項目",
|
||||||
|
related_project: "關聯項目",
|
||||||
|
related_tip: "關聯項目後可以添加關聯項目下的測試用例到評審列錶",
|
||||||
|
review_creator: "發起人",
|
||||||
|
review_follow_people: "關註人",
|
||||||
|
review_status: "狀態",
|
||||||
|
end_time: "截止時間",
|
||||||
|
delete: "刪除評審",
|
||||||
|
input_review_name: "請輸入評審名稱",
|
||||||
|
input_review_project: "請選擇所屬項目",
|
||||||
|
input_reviewer: "請選擇評審人",
|
||||||
|
no_link_case: "沒有關聯用例!",
|
||||||
|
pass: "通過",
|
||||||
|
un_pass: "未通過",
|
||||||
|
prepare: '未評審',
|
||||||
|
comment: "評論",
|
||||||
|
my_review: "我的評審",
|
||||||
|
my_create: "我創建的評審",
|
||||||
|
reviewed_by_me: "待我評審",
|
||||||
|
creator: "創建人",
|
||||||
|
done: "已評用例",
|
||||||
|
result_distribution: "結果分佈",
|
||||||
|
deadline_cannot_early_tips: "截止時間不能早於當前時間!",
|
||||||
|
},
|
||||||
|
comment: {
|
||||||
|
no_comment: "暫無評論",
|
||||||
|
send_comment: "發錶評論(Ctrl+Enter發送)",
|
||||||
|
send: "確定",
|
||||||
|
description_is_null: "評論內容不能為空!",
|
||||||
|
send_success: "評論成功!",
|
||||||
|
cannot_edit: "無法編輯此評論!",
|
||||||
|
cannot_delete: "無法刪除此評論!",
|
||||||
|
submit_description: "請先提交評論!",
|
||||||
|
},
|
||||||
|
review_view: {
|
||||||
|
review: "評審",
|
||||||
|
all_case: "全部用例",
|
||||||
|
start_review: "開始評審",
|
||||||
|
relevance_case: "關聯用例",
|
||||||
|
last_page: "已經到底了!",
|
||||||
|
execute_result: "評審結果",
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
id: '模塊ID',
|
||||||
|
search: "搜索模塊",
|
||||||
|
rename: "重命名",
|
||||||
|
add_submodule: "添加子模塊",
|
||||||
|
add_module: "添加模塊",
|
||||||
|
name: "模塊名稱",
|
||||||
|
delete_confirm: "確認刪除模塊: ",
|
||||||
|
delete_batch_confirm: "確認批量刪除勾選的場景步驟?",
|
||||||
|
delete_all_resource: "以及模塊下所有子模塊和測試用例",
|
||||||
|
module: "模塊",
|
||||||
|
title: "標題",
|
||||||
|
status: "狀態",
|
||||||
|
describe: "描述",
|
||||||
|
current_owner: "處理人",
|
||||||
|
creation_time: "創建時間",
|
||||||
|
project_name: "所屬項目"
|
||||||
|
},
|
||||||
|
home: {
|
||||||
|
recent_test: "最近測試",
|
||||||
|
my_plan: "我的計劃",
|
||||||
|
test_rate: "測試進度",
|
||||||
|
tested_case: "已測用例",
|
||||||
|
review_progress: "評審進度",
|
||||||
|
case_count: "用例數量統計",
|
||||||
|
relevance_case: "關聯用例數量統計",
|
||||||
|
case_maintenance: "用例責任人分佈",
|
||||||
|
bug_count: "遺留缺陷統計",
|
||||||
|
case_review: "用例評審",
|
||||||
|
review_rate: "評審率",
|
||||||
|
coverage: "覆蓋率",
|
||||||
|
function_case_count: "功能用例數",
|
||||||
|
relevance_case_count: "關聯用例數",
|
||||||
|
serial_number: "序號",
|
||||||
|
test_plan_name: "測試計劃名稱",
|
||||||
|
case_size: "用例數",
|
||||||
|
bug_size: "缺陷數",
|
||||||
|
passing_rate: "通過率",
|
||||||
|
percentage: "佔比"
|
||||||
|
},
|
||||||
|
plan_view: {
|
||||||
|
plan: "計劃",
|
||||||
|
relevance_test_case: "關聯測試用例",
|
||||||
|
cancel_all_relevance: "取消全部關聯",
|
||||||
|
executor: "執行人",
|
||||||
|
executor_match_rule: "執行者匹配規則",
|
||||||
|
execute_result: "執行結果",
|
||||||
|
pass: "通過",
|
||||||
|
not_pass: "不通過",
|
||||||
|
failure: "失敗",
|
||||||
|
blocking: "阻塞",
|
||||||
|
stop: "停止",
|
||||||
|
skip: "跳過",
|
||||||
|
actual_result: "實際結果",
|
||||||
|
step_result: "步驟執行結果",
|
||||||
|
my_case: "我的用例",
|
||||||
|
all_case: "全部用例",
|
||||||
|
pre_case: "上一條用例",
|
||||||
|
next_case: "下一條用例",
|
||||||
|
change_execution_results: "更改執行結果",
|
||||||
|
change_executor: "更改執行人",
|
||||||
|
select_executor: "請選擇執行人",
|
||||||
|
select_execute_result: "選擇執行結果",
|
||||||
|
cancel_relevance: "取消用例關聯",
|
||||||
|
confirm_cancel_relevance: "確認取消關聯",
|
||||||
|
select_manipulate: "請選擇需要操作的數據",
|
||||||
|
select_template: "選擇模版",
|
||||||
|
step: "步驟",
|
||||||
|
submit_issues: "提缺陷",
|
||||||
|
operate_step: "操作步驟",
|
||||||
|
edit_component: "編輯組件",
|
||||||
|
component: "組件",
|
||||||
|
base_info: "基礎信息",
|
||||||
|
mock_info: "Mock服務",
|
||||||
|
test_result: "測試結果",
|
||||||
|
result_distribution: "測試結果分佈",
|
||||||
|
custom_component: "自定義模塊",
|
||||||
|
defect_list: "缺陷列錶",
|
||||||
|
create_report: "創建測試報告",
|
||||||
|
view_report: "查看測試報告",
|
||||||
|
component_library: "組件庫",
|
||||||
|
component_library_tip: "拖拽組件庫中組件,添加至右側,預覽報告效果,每個繫統組件只能添加一個。",
|
||||||
|
delete_component_tip: "請至少保留一個組件",
|
||||||
|
input_template_name: "輸入模版名稱",
|
||||||
|
template_special_characters: '模版名稱不支持特殊字符',
|
||||||
|
case_count: "用例數",
|
||||||
|
issues_count: "缺陷數",
|
||||||
|
result_statistics: "測試結果統計",
|
||||||
|
result_statistics_chart: "測試結果統計圖",
|
||||||
|
create_template: "新建模版",
|
||||||
|
report_template: "測試報告模版",
|
||||||
|
test_detail: "測試詳情",
|
||||||
|
failure_case: "失敗用例",
|
||||||
|
export_report: "導出報告",
|
||||||
|
share_report: "分享報告",
|
||||||
|
no_case_relevance: "沒有關聯用例",
|
||||||
|
automatically_update_status: "自動更新狀態",
|
||||||
|
automatically_update_status_tip: "當功能用例關聯的接口或性能用例在測試計劃執行後,自動更新功能用例的狀態",
|
||||||
|
allow_associated_repetitive_cases: "允許關聯重復用例",
|
||||||
|
allow_associated_repetitive_cases_tip: "是否允許同一個測試計劃中多次關聯相同用例",
|
||||||
|
performance_case_count: "性能測試用例數",
|
||||||
|
running: "運行中",
|
||||||
|
please_choose_test_case: "請選擇測試用例!",
|
||||||
|
execute_tip: "步驟執行結果中含有 失敗 結果,無法標記該用例為 通過 狀態!"
|
||||||
|
},
|
||||||
|
issue: {
|
||||||
|
issue: "缺陷",
|
||||||
|
issue_management: "缺陷管理",
|
||||||
|
platform_status: "平臺狀態",
|
||||||
|
issue_resource: "缺陷來源",
|
||||||
|
create_issue: "創建缺陷",
|
||||||
|
add_issue: "添加缺陷",
|
||||||
|
issue_list: "缺陷列錶",
|
||||||
|
search_name: "根據標題搜索",
|
||||||
|
platform_tip: "在繫統設置-工作空間-服務集成中集成缺陷管理平臺可以提交缺陷到指定缺陷管理平臺",
|
||||||
|
input_title: "請輸入標題",
|
||||||
|
id: "缺陷ID",
|
||||||
|
title: "缺陷標題",
|
||||||
|
description: "缺陷描述",
|
||||||
|
status: "缺陷狀態",
|
||||||
|
issue_project: "所屬項目",
|
||||||
|
platform: "平臺",
|
||||||
|
operate: "操作",
|
||||||
|
close: "關閉缺陷",
|
||||||
|
delete: "刪除缺陷",
|
||||||
|
title_description_required: "標題和描述必填",
|
||||||
|
close_success: "關閉成功",
|
||||||
|
delete_warning: "解除會影響測試計劃相關統計,是否確認",
|
||||||
|
preview: "預覽",
|
||||||
|
status_new: '新建',
|
||||||
|
status_resolved: '已解決',
|
||||||
|
status_closed: '已關閉',
|
||||||
|
status_active: '激活',
|
||||||
|
status_delete: '刪除',
|
||||||
|
status_in_progress: '接受/處理',
|
||||||
|
status_rejected: '拒絕',
|
||||||
|
status_upcoming: '待辦',
|
||||||
|
status_reopened: '重新打開',
|
||||||
|
please_choose_current_owner: "請選擇處理人",
|
||||||
|
tapd_current_owner: "Tapd 處理人",
|
||||||
|
zentao_bug_build: "禪道 影響版本",
|
||||||
|
zentao_bug_assigned: "禪道 處理人",
|
||||||
|
third_party_integrated: "集成第三方平臺",
|
||||||
|
use_third_party: "使用 Jira 缺陷模闆",
|
||||||
|
update_third_party_bugs: "更新第三方平臺的缺陷",
|
||||||
|
sync_bugs: "同步缺陷",
|
||||||
|
sync_complete: "同步完成",
|
||||||
|
issue_sync_tip: "當前項目正在同步缺陷, 請稍等!",
|
||||||
|
save_before_open_comment: "請先保存缺陷再添加評論",
|
||||||
|
delete_tip: "確認刪除缺陷:",
|
||||||
|
check_id_exist: "檢查",
|
||||||
|
save_project_first: "請先保存項目",
|
||||||
|
tapd_status_new: "新",
|
||||||
|
tapd_status_in_progress: "接受/處理",
|
||||||
|
tapd_status_reopened: "重新打開",
|
||||||
|
tapd_status_rejected: "已拒絕",
|
||||||
|
tapd_status_verified: "已驗證",
|
||||||
|
tapd_status_closed: "已關閉",
|
||||||
|
tapd_status_resolved: "已解決",
|
||||||
|
please_choose_platform_status: "請選擇平臺狀態"
|
||||||
|
},
|
||||||
|
report: {
|
||||||
|
name: "測試計劃報告",
|
||||||
|
list: {
|
||||||
|
name: "名稱",
|
||||||
|
test_plan: "測試計劃名稱",
|
||||||
|
creator: "創建人",
|
||||||
|
create_time: "創建時間",
|
||||||
|
trigger_mode: "觸發方式",
|
||||||
|
run_time: "運行耗時(s)",
|
||||||
|
pass_rate: "成功率",
|
||||||
|
status: "狀態",
|
||||||
|
operation: "操作",
|
||||||
|
},
|
||||||
|
trigger_mode: {
|
||||||
|
manual: "手動觸發",
|
||||||
|
automation: "自動觸發",
|
||||||
|
},
|
||||||
|
overview: "概覽",
|
||||||
|
testing_time: "測試時間",
|
||||||
|
total_number_tests: "測試總數",
|
||||||
|
exacutive_rate: "執行率",
|
||||||
|
exacutive_rate_tip: "執行過的用例/所有用例 * 100%",
|
||||||
|
passing_rate: "通過率",
|
||||||
|
passing_rate_tip: "執行通過用例/所有用例 * 100%",
|
||||||
|
content: "目錄",
|
||||||
|
report_summary: "報告總結",
|
||||||
|
analysis_functional: "功能用例統計分析",
|
||||||
|
analysis_api: "接口用例統計分析",
|
||||||
|
analysis_ui: "UI 用例統計分析",
|
||||||
|
analysis_load: "性能用例統計分析",
|
||||||
|
valid_for_24_hours: "24小時有效",
|
||||||
|
configuration: "配置",
|
||||||
|
share: "分享",
|
||||||
|
template_configuration: "模闆配置",
|
||||||
|
test_result: "測試結果",
|
||||||
|
fail_case: "失敗用例",
|
||||||
|
issue_list: "缺陷列錶",
|
||||||
|
all_case: "所有用例",
|
||||||
|
},
|
||||||
|
reporter: '報告人',
|
||||||
|
lastmodify: '最後更改'
|
||||||
|
};
|
|
@ -1,3 +1,5 @@
|
||||||
|
import test_track from "./track/zh-CN";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
commons: {
|
commons: {
|
||||||
project_permission: '请先添加该项目权限',
|
project_permission: '请先添加该项目权限',
|
||||||
|
@ -94,6 +96,7 @@ export default {
|
||||||
input_password: '请输入密码',
|
input_password: '请输入密码',
|
||||||
test: '测试',
|
test: '测试',
|
||||||
create_time: '创建时间',
|
create_time: '创建时间',
|
||||||
|
creator: '创建人',
|
||||||
update_user_id: '更新人ID',
|
update_user_id: '更新人ID',
|
||||||
update_time: '更新时间',
|
update_time: '更新时间',
|
||||||
delete_time: '删除时间',
|
delete_time: '删除时间',
|
||||||
|
@ -2071,512 +2074,7 @@ export default {
|
||||||
please_search: "请搜索",
|
please_search: "请搜索",
|
||||||
date: "日期"
|
date: "日期"
|
||||||
},
|
},
|
||||||
test_track: {
|
test_track,
|
||||||
sync_add_api_load: '同步添加关联的接口和性能测试',
|
|
||||||
next: '下一条',
|
|
||||||
total_size: '共 {0} 条',
|
|
||||||
related_requirements: '关联需求',
|
|
||||||
please_related_requirements: '请选择要关联的需求',
|
|
||||||
please_select_the_test_to_associate: "请选择需要关联的测试",
|
|
||||||
person_responsible: "责任人",
|
|
||||||
test_track: "测试跟踪",
|
|
||||||
planning_execution: "规划&执行",
|
|
||||||
confirm: "确 定",
|
|
||||||
cancel: "取 消",
|
|
||||||
project: "项目",
|
|
||||||
save: "保 存",
|
|
||||||
return: "返 回",
|
|
||||||
length_less_than: "长度必须小于",
|
|
||||||
recent_plan: "我最近的计划",
|
|
||||||
recent_case: "我最近的用例",
|
|
||||||
recent_review: "我最近的评审",
|
|
||||||
pass_rate: "通过率",
|
|
||||||
execution_result: ": 请选择执行结果",
|
|
||||||
actual_result: ": 实际结果为空",
|
|
||||||
cancel_relevance_success: "取消关联成功",
|
|
||||||
switch_project: "切换项目",
|
|
||||||
functional_test_case: "功能测试用例",
|
|
||||||
api_test_case: "接口测试用例",
|
|
||||||
ui_test_case: "UI 测试用例",
|
|
||||||
performance_test_case: "性能测试用例",
|
|
||||||
scenario_test_case: "场景测试用例",
|
|
||||||
ui_scenario_test_case: "UI 测试用例",
|
|
||||||
report_statistics: "报告统计",
|
|
||||||
sort: '种类',
|
|
||||||
automatic_status_update: "自动状态更新",
|
|
||||||
case: {
|
|
||||||
list: "列表",
|
|
||||||
minder: "脑图",
|
|
||||||
step_info: "步骤信息",
|
|
||||||
other_info: "其他信息",
|
|
||||||
step_describe: "步骤描述",
|
|
||||||
step_describe_tip: "适用于需要每一个步骤进行测试的场景,有明确的测试步骤、预期结果",
|
|
||||||
text_describe: "文本描述",
|
|
||||||
text_describe_tip: "使用于简单的测试场景,没有明确的测试步骤",
|
|
||||||
change_type: "更改类型",
|
|
||||||
minder_create_tip: "失败, 无法在脑图创建其父模块",
|
|
||||||
minder_tem_node_tip: "无法在临时节点{0}下创建用例",
|
|
||||||
minder_is_module_tip: "{0}是模块,不能修改为用例",
|
|
||||||
minder_not_module_tip: "模块{0},不能创建在非模块节点下",
|
|
||||||
minder_all_module_tip: "全部用例为虚拟模块,请在其他模块创建用例",
|
|
||||||
minder_issue_delete_tip: "取消缺陷关联成功",
|
|
||||||
|
|
||||||
minder_save_confirm_title: '请保存脑图',
|
|
||||||
minder_save_confirm_tip: '脑图未保存,确认保存脑图吗?',
|
|
||||||
minder_import_save_confirm_tip: '导入成功后会刷新脑图,确认保存脑图吗?',
|
|
||||||
|
|
||||||
check_select: "请勾选用例",
|
|
||||||
export_all_cases: '确定要导出全部用例吗?',
|
|
||||||
input_test_case: '请输入关联用例名称',
|
|
||||||
test_name: '测试名称',
|
|
||||||
other: "--其他--",
|
|
||||||
test_case: "功能用例",
|
|
||||||
move: "移动用例",
|
|
||||||
case_list: "用例列表",
|
|
||||||
create_case: "创建用例",
|
|
||||||
edit_case: "编辑用例",
|
|
||||||
view_case: "查看用例",
|
|
||||||
no_project: "该工作空间下无项目,请先创建项目",
|
|
||||||
priority: "用例等级",
|
|
||||||
type: "类型",
|
|
||||||
method: "测试方式",
|
|
||||||
auto: "自动",
|
|
||||||
manual: "手动",
|
|
||||||
create: "新建用例",
|
|
||||||
case_type: "用例类型",
|
|
||||||
name: "用例名称",
|
|
||||||
module: "所属模块",
|
|
||||||
project: '所属项目',
|
|
||||||
maintainer: "维护人",
|
|
||||||
steps: "执行步骤",
|
|
||||||
number: "编号",
|
|
||||||
prerequisite: "前置条件",
|
|
||||||
step_desc: "用例步骤",
|
|
||||||
expected_results: "预期结果",
|
|
||||||
input_name: "请输入名称",
|
|
||||||
input_module: "请选择模块",
|
|
||||||
input_maintainer: "请选择维护人",
|
|
||||||
input_priority: "请选择用例等级",
|
|
||||||
input_type: "请选择用例类型",
|
|
||||||
input_method: "请选择测试方式",
|
|
||||||
input_prerequisite: "请输入前置条件",
|
|
||||||
input_demand_name: "请输入需求ID或名称",
|
|
||||||
delete_confirm: "确认删除测试用例",
|
|
||||||
delete: "删除用例",
|
|
||||||
save_create_continue: "保存并继续创建",
|
|
||||||
save_add_public: "保存并添加到公共用例库",
|
|
||||||
please_create_project: "暂无项目,请先创建项目",
|
|
||||||
create_module_first: "请先新建模块",
|
|
||||||
relate_test: "关联测试",
|
|
||||||
relate_issue: "关联缺陷",
|
|
||||||
demand_name_id: "需求ID/名称",
|
|
||||||
please_select_relate_test: "请选择要关联的测试",
|
|
||||||
relate_test_not_find: '关联的测试不存在,请检查用例',
|
|
||||||
other_relate_test_not_find: '关联的测试名,请前往第三方平台执行',
|
|
||||||
batch_handle: '批量处理 (选中{0}项)',
|
|
||||||
batch_update: '更新{0}个用例的属性',
|
|
||||||
select_catalog: '请选择用例目录',
|
|
||||||
updated_attr_value: '更新后属性值为',
|
|
||||||
batch_operate: '批量操作',
|
|
||||||
please_select_attr: '请选择属性',
|
|
||||||
please_select_attr_value: '请选择属性对应的值',
|
|
||||||
batch_edit_case: '批量编辑',
|
|
||||||
batch_move_case: '批量移动',
|
|
||||||
batch_delete_case: '批量删除',
|
|
||||||
batch_copy: '批量复制',
|
|
||||||
batch_add_public: '批量添加到公共用例库',
|
|
||||||
batch_link_demand: '批量关联需求',
|
|
||||||
public_warning: '未开启公共用例库配置',
|
|
||||||
generate_dependencies: '生成依赖关系',
|
|
||||||
generate_dependencies_warning: '为了更好的体验,建议勾选一百条以下的数据',
|
|
||||||
batch_unlink: '批量取消关联',
|
|
||||||
unlink: '取消关联',
|
|
||||||
project_name: '所属项目',
|
|
||||||
status: '评审结果',
|
|
||||||
status_prepare: '未开始',
|
|
||||||
status_running: '进行中',
|
|
||||||
status_finished: '已完成',
|
|
||||||
cancel_relevance_project: "取消项目关联会同时取消该项目下已关联的测试用例",
|
|
||||||
img_loading_fail: "图片加载失败",
|
|
||||||
pdf_loading_fail: "PDF加载失败",
|
|
||||||
upload_tip: "文件大小限制[0-500MB]",
|
|
||||||
add_attachment: "添加",
|
|
||||||
attachment: "附件",
|
|
||||||
upload_time: "上传时间",
|
|
||||||
total: "用例总数",
|
|
||||||
node_id: "节点ID",
|
|
||||||
node_path: "节点路径",
|
|
||||||
match_rule: "测试用例匹配规则",
|
|
||||||
import: {
|
|
||||||
import: "导入用例",
|
|
||||||
case_import: "导入测试用例",
|
|
||||||
case_export: "导出测试用例",
|
|
||||||
download_template: "下载模版",
|
|
||||||
click_upload: "点击上传",
|
|
||||||
upload_limit: "只能上传xls/xlsx文件,且不超过100M",
|
|
||||||
upload_xmind: "支持文件类型:.xmind;一次至多导入800 条用例",
|
|
||||||
upload_xmind_format: "上传文件只能是 .xmind 格式",
|
|
||||||
upload_limit_other_size: "上传文件大小不能超过",
|
|
||||||
upload_limit_count: "一次只能上传一个文件",
|
|
||||||
upload_limit_format: "上传文件只能是 xls、xlsx格式!",
|
|
||||||
upload_limit_size: "上传文件大小不能超过 100MB!",
|
|
||||||
success: "导入成功!",
|
|
||||||
importing: "导入中...",
|
|
||||||
excel_title: "表格文件",
|
|
||||||
xmind_title: "思维导图",
|
|
||||||
import_desc: "导入说明",
|
|
||||||
import_file: "上传文件",
|
|
||||||
ignore_error: "忽略错误",
|
|
||||||
continue_upload: "继续上传",
|
|
||||||
import_create: "导入新建",
|
|
||||||
import_update: "导入更新",
|
|
||||||
import_tip1: "项目设置中“测试用例自定义ID” 开关开启时ID为必填项",
|
|
||||||
import_tip2: "导入更新时ID为必填项",
|
|
||||||
import_file_tips: "请先上传文件!",
|
|
||||||
},
|
|
||||||
export: {
|
|
||||||
export: "导出用例",
|
|
||||||
export_tip: "请切换成用例列表勾选用例导出!"
|
|
||||||
},
|
|
||||||
case_desc: "用例描述",
|
|
||||||
passing_rate: '用例通过率',
|
|
||||||
version: "版本",
|
|
||||||
sync_to_new_version: "复制以下信息到新版本",
|
|
||||||
exists_multiple_prerequisite_node: "下存在多个前置条件",
|
|
||||||
exists_multiple_remark_node: "下存在多个备注",
|
|
||||||
},
|
|
||||||
plan: {
|
|
||||||
test_plan: "测试计划",
|
|
||||||
test_plan_id: '测试计划Id',
|
|
||||||
create_plan: "创建测试计划",
|
|
||||||
edit_plan: "编辑测试计划",
|
|
||||||
plan_name: "计划名称",
|
|
||||||
plan_project: "所属项目",
|
|
||||||
related_project: "关联项目",
|
|
||||||
related_tip: "关联项目后可以添加关联项目下的测试用例到测试计划列表",
|
|
||||||
plan_stage: "测试阶段",
|
|
||||||
follow_people: "关注人",
|
|
||||||
plan_status: "状态",
|
|
||||||
smoke_test: "冒烟测试",
|
|
||||||
functional_test: "功能测试",
|
|
||||||
regression_test: "回归测试",
|
|
||||||
integration_testing: "集成测试",
|
|
||||||
system_test: "系统测试",
|
|
||||||
version_validation: "版本验证",
|
|
||||||
plan_principal: "责任人",
|
|
||||||
input_plan_name: "请输入测试计划名称",
|
|
||||||
input_plan_principal: "请选择负责人",
|
|
||||||
input_plan_project: "请选择所属项目",
|
|
||||||
input_related_project: "请选择关联项目",
|
|
||||||
input_plan_stage: "请选择测试阶段",
|
|
||||||
plan_status_prepare: "未开始",
|
|
||||||
plan_status_running: "进行中",
|
|
||||||
plan_status_finished: "已结束",
|
|
||||||
plan_status_completed: "已完成",
|
|
||||||
plan_status_archived: "已归档",
|
|
||||||
plan_status_trash: "废弃",
|
|
||||||
planned_start_time: "计划开始",
|
|
||||||
planned_end_time: "计划结束",
|
|
||||||
actual_start_time: "实际开始",
|
|
||||||
actual_end_time: "实际结束",
|
|
||||||
plan_delete_confirm: "将删除该测试计划下所有用例,确认删除测试计划: ",
|
|
||||||
plan_delete_tip: "该测试计划正在进行中,请确认再删除!",
|
|
||||||
plan_delete: "删除计划",
|
|
||||||
api_case: "接口测试用例",
|
|
||||||
scenario_case: "场景测试用例",
|
|
||||||
execute_result: "执行结果",
|
|
||||||
execute_time: '执行时间',
|
|
||||||
is_api_case_executing: "是否执行接口用例",
|
|
||||||
is_scenario_executing: '是否执行场景',
|
|
||||||
is_performance_executing: '是否执行性能',
|
|
||||||
test_plan_test_case_count: "功能用例数",
|
|
||||||
test_plan_api_case_count: "接口用例数",
|
|
||||||
test_plan_api_scenario_count: "场景用例数",
|
|
||||||
test_plan_ui_scenario_count: "UI 场景用例数",
|
|
||||||
test_plan_load_case_count: "性能用例数",
|
|
||||||
test_plan_component_case_count: "步骤用例数",
|
|
||||||
data_name: "数据名称",
|
|
||||||
test_plan_batch_switch: "批量开/关定时任务",
|
|
||||||
batch_update_schedule_enable: '更新{0}个测试计划的定时任务状态为',
|
|
||||||
batch_update_schedule_enable_alert: '注意:只能更新已设置了定时任务的测试计划',
|
|
||||||
next_run_time: '下次运行时间',
|
|
||||||
schedule_enabled: '已开启',
|
|
||||||
check_schedule_enabled: '您勾选的数据检测到有{0}条定时任务可以修改',
|
|
||||||
no_check_schedule_enabled: '您勾选的数据没有检测到定时任务',
|
|
||||||
load_case: {
|
|
||||||
case: "性能用例",
|
|
||||||
execution_status: "执行状态",
|
|
||||||
report: "报告",
|
|
||||||
view_report: "查看报告",
|
|
||||||
unlink_in_bulk: "批量取消关联",
|
|
||||||
batch_exec_cases: "批量执行用例",
|
|
||||||
exec: "正在执行....",
|
|
||||||
error: "用例执行错误,请单独调试该用例!",
|
|
||||||
report_not_found: "报告不存在",
|
|
||||||
content_empty: "内容为空",
|
|
||||||
}
|
|
||||||
},
|
|
||||||
demand: {
|
|
||||||
id: '需求ID',
|
|
||||||
name: '需求名称',
|
|
||||||
batch_relate: '批量关联需求',
|
|
||||||
relate_is_null_warn: '关联需求不能为空!',
|
|
||||||
relate_name_is_null_warn: '需求名称不能为空!',
|
|
||||||
third_platform_demand: "三方平台需求",
|
|
||||||
other_demand: "其他需求"
|
|
||||||
},
|
|
||||||
step_model: '步骤模型',
|
|
||||||
review: {
|
|
||||||
test_review: "用例评审",
|
|
||||||
create_review: "创建用例评审",
|
|
||||||
edit_review: "编辑用例评审",
|
|
||||||
review_name: "评审名称",
|
|
||||||
reviewer: "评审人",
|
|
||||||
review_project: "所属项目",
|
|
||||||
related_project: "关联项目",
|
|
||||||
related_tip: "关联项目后可以添加关联项目下的测试用例到评审列表",
|
|
||||||
review_creator: "发起人",
|
|
||||||
review_follow_people: "关注人",
|
|
||||||
review_status: "状态",
|
|
||||||
end_time: "截止时间",
|
|
||||||
delete: "删除评审",
|
|
||||||
input_review_name: "请输入评审名称",
|
|
||||||
input_review_project: "请选择所属项目",
|
|
||||||
input_reviewer: "请选择评审人",
|
|
||||||
no_link_case: "没有关联用例!",
|
|
||||||
pass: "通过",
|
|
||||||
un_pass: "未通过",
|
|
||||||
prepare: '未评审',
|
|
||||||
comment: "评论",
|
|
||||||
my_review: "我的评审",
|
|
||||||
my_create: "我创建的评审",
|
|
||||||
reviewed_by_me: "待我评审",
|
|
||||||
creator: "创建人",
|
|
||||||
done: "已评用例",
|
|
||||||
result_distribution: "结果分布",
|
|
||||||
deadline_cannot_early_tips: "截止时间不能早于当前时间!",
|
|
||||||
},
|
|
||||||
comment: {
|
|
||||||
no_comment: "暂无评论",
|
|
||||||
send_comment: "发表评论(Ctrl+Enter发送)",
|
|
||||||
send: "确定",
|
|
||||||
description_is_null: "评论内容不能为空!",
|
|
||||||
send_success: "评论成功!",
|
|
||||||
cannot_edit: "无法编辑此评论!",
|
|
||||||
cannot_delete: "无法删除此评论!",
|
|
||||||
submit_description: "请先提交评论!",
|
|
||||||
},
|
|
||||||
review_view: {
|
|
||||||
review: "评审",
|
|
||||||
all_case: "全部用例",
|
|
||||||
start_review: "开始评审",
|
|
||||||
relevance_case: "关联用例",
|
|
||||||
last_page: "已经到底了!",
|
|
||||||
execute_result: "评审结果",
|
|
||||||
},
|
|
||||||
module: {
|
|
||||||
id: '模块ID',
|
|
||||||
search: "搜索模块",
|
|
||||||
rename: "重命名",
|
|
||||||
add_submodule: "添加子模块",
|
|
||||||
add_module: "添加模块",
|
|
||||||
name: "模块名称",
|
|
||||||
delete_confirm: "确认删除模块: ",
|
|
||||||
delete_batch_confirm: "确认批量删除勾选的场景步骤?",
|
|
||||||
delete_all_resource: "以及模块下所有子模块和测试用例",
|
|
||||||
module: "模块",
|
|
||||||
title: "标题",
|
|
||||||
status: "状态",
|
|
||||||
describe: "描述",
|
|
||||||
current_owner: "处理人",
|
|
||||||
creation_time: "创建时间",
|
|
||||||
project_name: "所属项目"
|
|
||||||
},
|
|
||||||
home: {
|
|
||||||
recent_test: "最近测试",
|
|
||||||
my_plan: "我的计划",
|
|
||||||
test_rate: "测试进度",
|
|
||||||
tested_case: "已测用例",
|
|
||||||
review_progress: "评审进度",
|
|
||||||
case_count: "用例数量统计",
|
|
||||||
relevance_case: "关联用例数量统计",
|
|
||||||
case_maintenance: "用例责任人分布",
|
|
||||||
bug_count: "遗留缺陷统计",
|
|
||||||
case_review: "用例评审",
|
|
||||||
review_rate: "评审率",
|
|
||||||
coverage: "覆盖率",
|
|
||||||
function_case_count: "功能用例数",
|
|
||||||
relevance_case_count: "关联用例数",
|
|
||||||
serial_number: "序号",
|
|
||||||
test_plan_name: "测试计划名称",
|
|
||||||
case_size: "用例数",
|
|
||||||
bug_size: "缺陷数",
|
|
||||||
passing_rate: "通过率",
|
|
||||||
percentage: "占比"
|
|
||||||
},
|
|
||||||
plan_view: {
|
|
||||||
plan: "计划",
|
|
||||||
relevance_test_case: "关联测试用例",
|
|
||||||
cancel_all_relevance: "取消全部关联",
|
|
||||||
executor: "执行人",
|
|
||||||
executor_match_rule: "执行者匹配规则",
|
|
||||||
execute_result: "执行结果",
|
|
||||||
pass: "通过",
|
|
||||||
not_pass: "不通过",
|
|
||||||
failure: "失败",
|
|
||||||
blocking: "阻塞",
|
|
||||||
stop: "停止",
|
|
||||||
skip: "跳过",
|
|
||||||
actual_result: "实际结果",
|
|
||||||
step_result: "步骤执行结果",
|
|
||||||
my_case: "我的用例",
|
|
||||||
all_case: "全部用例",
|
|
||||||
pre_case: "上一条用例",
|
|
||||||
next_case: "下一条用例",
|
|
||||||
change_execution_results: "更改执行结果",
|
|
||||||
change_executor: "更改执行人",
|
|
||||||
select_executor: "请选择执行人",
|
|
||||||
select_execute_result: "选择执行结果",
|
|
||||||
cancel_relevance: "取消用例关联",
|
|
||||||
confirm_cancel_relevance: "确认取消关联",
|
|
||||||
select_manipulate: "请选择需要操作的数据",
|
|
||||||
select_template: "选择模版",
|
|
||||||
step: "步骤",
|
|
||||||
submit_issues: "提缺陷",
|
|
||||||
operate_step: "操作步骤",
|
|
||||||
edit_component: "编辑组件",
|
|
||||||
component: "组件",
|
|
||||||
base_info: "基础信息",
|
|
||||||
mock_info: "Mock服务",
|
|
||||||
test_result: "测试结果",
|
|
||||||
result_distribution: "测试结果分布",
|
|
||||||
custom_component: "自定义模块",
|
|
||||||
defect_list: "缺陷列表",
|
|
||||||
create_report: "创建测试报告",
|
|
||||||
view_report: "查看测试报告",
|
|
||||||
component_library: "组件库",
|
|
||||||
component_library_tip: "拖拽组件库中组件,添加至右侧,预览报告效果,每个系统组件只能添加一个。",
|
|
||||||
delete_component_tip: "请至少保留一个组件",
|
|
||||||
input_template_name: "输入模版名称",
|
|
||||||
template_special_characters: '模版名称不支持特殊字符',
|
|
||||||
case_count: "用例数",
|
|
||||||
issues_count: "缺陷数",
|
|
||||||
result_statistics: "测试结果统计",
|
|
||||||
result_statistics_chart: "测试结果统计图",
|
|
||||||
create_template: "新建模版",
|
|
||||||
report_template: "测试报告模版",
|
|
||||||
test_detail: "测试详情",
|
|
||||||
failure_case: "失败用例",
|
|
||||||
export_report: "导出报告",
|
|
||||||
share_report: "分享报告",
|
|
||||||
no_case_relevance: "没有关联用例",
|
|
||||||
automatically_update_status: "自动更新状态",
|
|
||||||
automatically_update_status_tip: "当功能用例关联的接口或性能用例在测试计划执行后,自动更新功能用例的状态",
|
|
||||||
allow_associated_repetitive_cases: "允许关联重复用例",
|
|
||||||
allow_associated_repetitive_cases_tip: "是否允许同一个测试计划中多次关联相同用例",
|
|
||||||
performance_case_count: "性能测试用例数",
|
|
||||||
running: "运行中",
|
|
||||||
please_choose_test_case: "请选择测试用例!",
|
|
||||||
execute_tip: "步骤执行结果中含有 失败 结果,无法标记该用例为 通过 状态!"
|
|
||||||
},
|
|
||||||
issue: {
|
|
||||||
issue: "缺陷",
|
|
||||||
issue_management: "缺陷管理",
|
|
||||||
platform_status: "平台状态",
|
|
||||||
issue_resource: "缺陷来源",
|
|
||||||
create_issue: "创建缺陷",
|
|
||||||
add_issue: "添加缺陷",
|
|
||||||
issue_list: "缺陷列表",
|
|
||||||
search_name: "根据标题搜索",
|
|
||||||
platform_tip: "在系统设置-工作空间-服务集成中集成缺陷管理平台可以提交缺陷到指定缺陷管理平台",
|
|
||||||
input_title: "请输入标题",
|
|
||||||
id: "缺陷ID",
|
|
||||||
title: "缺陷标题",
|
|
||||||
description: "缺陷描述",
|
|
||||||
status: "缺陷状态",
|
|
||||||
issue_project: "所属项目",
|
|
||||||
platform: "平台",
|
|
||||||
operate: "操作",
|
|
||||||
close: "关闭缺陷",
|
|
||||||
delete: "删除缺陷",
|
|
||||||
title_description_required: "标题和描述必填",
|
|
||||||
close_success: "关闭成功",
|
|
||||||
delete_warning: "解除会影响测试计划相关统计,是否确认",
|
|
||||||
preview: "预览",
|
|
||||||
status_new: '新建',
|
|
||||||
status_resolved: '已解决',
|
|
||||||
status_closed: '已关闭',
|
|
||||||
status_active: '激活',
|
|
||||||
status_delete: '删除',
|
|
||||||
status_in_progress: '接受/处理',
|
|
||||||
status_rejected: '拒绝',
|
|
||||||
status_upcoming: '待办',
|
|
||||||
status_reopened: '重新打开',
|
|
||||||
please_choose_current_owner: "请选择处理人",
|
|
||||||
tapd_current_owner: "Tapd 处理人",
|
|
||||||
zentao_bug_build: "禅道 影响版本",
|
|
||||||
zentao_bug_assigned: "禅道 处理人",
|
|
||||||
third_party_integrated: "集成第三方平台",
|
|
||||||
use_third_party: "使用 Jira 缺陷模板",
|
|
||||||
update_third_party_bugs: "更新第三方平台的缺陷",
|
|
||||||
sync_bugs: "同步缺陷",
|
|
||||||
sync_complete: "同步完成",
|
|
||||||
issue_sync_tip: "当前项目正在同步缺陷, 请稍等!",
|
|
||||||
save_before_open_comment: "请先保存缺陷再添加评论",
|
|
||||||
delete_tip: "确认删除缺陷:",
|
|
||||||
check_id_exist: "检查",
|
|
||||||
save_project_first: "请先保存项目",
|
|
||||||
tapd_status_new: "新",
|
|
||||||
tapd_status_in_progress: "接受/处理",
|
|
||||||
tapd_status_reopened: "重新打开",
|
|
||||||
tapd_status_rejected: "已拒绝",
|
|
||||||
tapd_status_verified: "已验证",
|
|
||||||
tapd_status_closed: "已关闭",
|
|
||||||
tapd_status_resolved: "已解决",
|
|
||||||
please_choose_platform_status: "请选择平台状态"
|
|
||||||
},
|
|
||||||
report: {
|
|
||||||
name: "测试计划报告",
|
|
||||||
list: {
|
|
||||||
name: "名称",
|
|
||||||
test_plan: "测试计划名称",
|
|
||||||
creator: "创建人",
|
|
||||||
create_time: "创建时间",
|
|
||||||
trigger_mode: "触发方式",
|
|
||||||
run_time: "运行耗时(s)",
|
|
||||||
pass_rate: "成功率",
|
|
||||||
status: "状态",
|
|
||||||
operation: "操作",
|
|
||||||
},
|
|
||||||
trigger_mode: {
|
|
||||||
manual: "手动触发",
|
|
||||||
automation: "自动触发",
|
|
||||||
},
|
|
||||||
overview: "概览",
|
|
||||||
testing_time: "测试时间",
|
|
||||||
total_number_tests: "测试总数",
|
|
||||||
exacutive_rate: "执行率",
|
|
||||||
exacutive_rate_tip: "执行过的用例/所有用例 * 100%",
|
|
||||||
passing_rate: "通过率",
|
|
||||||
passing_rate_tip: "执行通过用例/所有用例 * 100%",
|
|
||||||
content: "目录",
|
|
||||||
report_summary: "报告总结",
|
|
||||||
analysis_functional: "功能用例统计分析",
|
|
||||||
analysis_api: "接口用例统计分析",
|
|
||||||
analysis_ui: "UI 用例统计分析",
|
|
||||||
analysis_load: "性能用例统计分析",
|
|
||||||
valid_for_24_hours: "24小时有效",
|
|
||||||
configuration: "配置",
|
|
||||||
share: "分享",
|
|
||||||
template_configuration: "模板配置",
|
|
||||||
test_result: "测试结果",
|
|
||||||
fail_case: "失败用例",
|
|
||||||
issue_list: "缺陷列表",
|
|
||||||
all_case: "所有用例",
|
|
||||||
},
|
|
||||||
reporter: '报告人',
|
|
||||||
lastmodify: '最后更改'
|
|
||||||
},
|
|
||||||
test_resource_pool: {
|
test_resource_pool: {
|
||||||
id: "测试资源池ID",
|
id: "测试资源池ID",
|
||||||
type: '类型',
|
type: '类型',
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import test_track from "./track/zh-TW";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
commons: {
|
commons: {
|
||||||
project_permission: '請先添加該項目權限',
|
project_permission: '請先添加該項目權限',
|
||||||
|
@ -95,6 +97,7 @@ export default {
|
||||||
test: '測試',
|
test: '測試',
|
||||||
create_time: '創建時間',
|
create_time: '創建時間',
|
||||||
update_user_id: '更新人ID',
|
update_user_id: '更新人ID',
|
||||||
|
creator: '創建人',
|
||||||
update_time: '更新時間',
|
update_time: '更新時間',
|
||||||
delete_time: '刪除時間',
|
delete_time: '刪除時間',
|
||||||
delete_user: '刪除人',
|
delete_user: '刪除人',
|
||||||
|
@ -2068,509 +2071,7 @@ export default {
|
||||||
please_search: "請搜索",
|
please_search: "請搜索",
|
||||||
date: "日期"
|
date: "日期"
|
||||||
},
|
},
|
||||||
test_track: {
|
test_track,
|
||||||
sync_add_api_load: '同步添加關聯的接口和性能測試',
|
|
||||||
next: '下一條',
|
|
||||||
total_size: '共 {0} 條',
|
|
||||||
related_requirements: '關聯需求',
|
|
||||||
please_related_requirements: '請選擇要關聯的需求',
|
|
||||||
please_select_the_test_to_associate: "請選擇需要關聯的測試",
|
|
||||||
person_responsible: "責任人",
|
|
||||||
test_track: "測試跟蹤",
|
|
||||||
planning_execution: "規劃&執行",
|
|
||||||
confirm: "確 定",
|
|
||||||
cancel: "取 消",
|
|
||||||
project: "項目",
|
|
||||||
save: "保 存",
|
|
||||||
return: "返 回",
|
|
||||||
length_less_than: "長度必須小於",
|
|
||||||
recent_plan: "我最近的計劃",
|
|
||||||
recent_case: "我最近的用例",
|
|
||||||
recent_review: "我最近的評審",
|
|
||||||
pass_rate: "通過率",
|
|
||||||
execution_result: ": 請選擇執行結果",
|
|
||||||
actual_result: ": 實際結果為空",
|
|
||||||
cancel_relevance_success: "取消關聯成功",
|
|
||||||
switch_project: "切換項目",
|
|
||||||
functional_test_case: "功能測試用例",
|
|
||||||
api_test_case: "接口測試用例",
|
|
||||||
ui_test_case: "UI 測試用例",
|
|
||||||
performance_test_case: "性能測試用例",
|
|
||||||
scenario_test_case: "場景測試用例",
|
|
||||||
ui_scenario_test_case: "UI 測試用例",
|
|
||||||
report_statistics: "報告統計",
|
|
||||||
sort: '種類',
|
|
||||||
automatic_status_update: "自動狀態更新",
|
|
||||||
case: {
|
|
||||||
list: "列表",
|
|
||||||
minder: "腦圖",
|
|
||||||
step_info: "步驟信息",
|
|
||||||
other_info: "其他信息",
|
|
||||||
step_describe: "步驟描述",
|
|
||||||
step_describe_tip: "適用於需要每一個步驟進行測試的場景,有明確的測試步驟、預期結果",
|
|
||||||
text_describe: "文本描述",
|
|
||||||
text_describe_tip: "使用於簡單的測試場景,沒有明確的測試步驟",
|
|
||||||
change_type: "更改類型",
|
|
||||||
minder_create_tip: "失敗, 無法在腦圖創建其父模塊",
|
|
||||||
minder_tem_node_tip: "無法在臨時節點{0}下創建用例",
|
|
||||||
minder_is_module_tip: "{0}是模塊,不能修改為用例",
|
|
||||||
minder_not_module_tip: "模塊{0},不能創建在非模塊節點下",
|
|
||||||
minder_all_module_tip: "全部用例為虛擬模塊,請在其他模塊創建用例",
|
|
||||||
minder_issue_delete_tip: "取消缺陷關聯成功",
|
|
||||||
minder_save_confirm_title: '請保存腦圖',
|
|
||||||
minder_save_confirm_tip: '腦圖未保存,確認保存腦圖嗎?',
|
|
||||||
minder_import_save_confirm_tip: '導入成功後會刷新腦圖,確認保存腦圖嗎?',
|
|
||||||
check_select: "請勾選用例",
|
|
||||||
export_all_cases: '確定要導出全部用例嗎?',
|
|
||||||
input_test_case: '請輸入關聯用例名稱',
|
|
||||||
test_name: '測試名稱',
|
|
||||||
other: "--其他--",
|
|
||||||
test_case: "功能用例",
|
|
||||||
move: "移動用例",
|
|
||||||
case_list: "用例列表",
|
|
||||||
create_case: "創建用例",
|
|
||||||
edit_case: "編輯用例",
|
|
||||||
view_case: "查看用例",
|
|
||||||
no_project: "該工作空間下無項目,請先創建項目",
|
|
||||||
priority: "用例等級",
|
|
||||||
type: "類型",
|
|
||||||
method: "測試方式",
|
|
||||||
auto: "自動",
|
|
||||||
manual: "手動",
|
|
||||||
create: "新建用例",
|
|
||||||
case_type: "用例類型",
|
|
||||||
name: "用例名稱",
|
|
||||||
module: "所屬模塊",
|
|
||||||
project: '所屬項目',
|
|
||||||
maintainer: "維護人",
|
|
||||||
steps: "執行步驟",
|
|
||||||
number: "編號",
|
|
||||||
prerequisite: "前置條件",
|
|
||||||
step_desc: "用例步驟",
|
|
||||||
expected_results: "預期結果",
|
|
||||||
input_name: "請輸入名稱",
|
|
||||||
input_module: "請選擇模塊",
|
|
||||||
input_maintainer: "請選擇維護人",
|
|
||||||
input_priority: "請選擇用例等級",
|
|
||||||
input_type: "請選擇用例類型",
|
|
||||||
input_method: "請選擇測試方式",
|
|
||||||
input_prerequisite: "請輸入前置條件",
|
|
||||||
input_demand_name: "請輸入需求ID或名稱",
|
|
||||||
delete_confirm: "確認刪除測試用例",
|
|
||||||
delete: "刪除用例",
|
|
||||||
save_create_continue: "保存並繼續創建",
|
|
||||||
save_add_public: "保存並添加到公共用例庫",
|
|
||||||
please_create_project: "暫無項目,請先創建項目",
|
|
||||||
create_module_first: "請先新建模塊",
|
|
||||||
relate_test: "關聯測試",
|
|
||||||
relate_issue: "關聯缺陷",
|
|
||||||
demand_name_id: "需求ID/名稱",
|
|
||||||
please_select_relate_test: "請選擇要關聯的測試",
|
|
||||||
relate_test_not_find: '關聯的測試不存在,請檢查用例',
|
|
||||||
other_relate_test_not_find: '關聯的測試名,請前往第三方平臺執行',
|
|
||||||
batch_handle: '批量處理 (選中{0}項)',
|
|
||||||
batch_update: '更新{0}個用例的屬性',
|
|
||||||
select_catalog: '請選擇用例目錄',
|
|
||||||
updated_attr_value: '更新後屬性值為',
|
|
||||||
batch_operate: '批量操作',
|
|
||||||
please_select_attr: '請選擇屬性',
|
|
||||||
please_select_attr_value: '請選擇屬性對應的值',
|
|
||||||
batch_edit_case: '批量編輯',
|
|
||||||
batch_move_case: '批量移動',
|
|
||||||
batch_delete_case: '批量刪除',
|
|
||||||
batch_copy: '批量復製',
|
|
||||||
batch_add_public: '批量添加到公共用例庫',
|
|
||||||
batch_link_demand: '批量關聯需求',
|
|
||||||
public_warning: '未開啟公共用例庫配置',
|
|
||||||
generate_dependencies: '生成依賴關系',
|
|
||||||
generate_dependencies_warning: '為了更好的體驗,建議勾選一百條以下的數據',
|
|
||||||
batch_unlink: '批量取消關聯',
|
|
||||||
unlink: '取消關聯',
|
|
||||||
project_name: '所屬項目',
|
|
||||||
status: '評審結果',
|
|
||||||
status_prepare: '未開始',
|
|
||||||
status_running: '進行中',
|
|
||||||
status_finished: '已完成',
|
|
||||||
cancel_relevance_project: "取消項目關聯會同時取消該項目下已關聯的測試用例",
|
|
||||||
img_loading_fail: "圖片加載失敗",
|
|
||||||
pdf_loading_fail: "PDF加載失敗",
|
|
||||||
upload_tip: "文件大小限制[0-500MB]",
|
|
||||||
add_attachment: "添加",
|
|
||||||
attachment: "附件",
|
|
||||||
upload_time: "上傳時間",
|
|
||||||
total: "用例總數",
|
|
||||||
node_id: "節點ID",
|
|
||||||
node_path: "節點路徑",
|
|
||||||
match_rule: "測試用例匹配規則",
|
|
||||||
import: {
|
|
||||||
import: "導入用例",
|
|
||||||
case_import: "導入測試用例",
|
|
||||||
case_export: "導出測試用例",
|
|
||||||
download_template: "下載模版",
|
|
||||||
click_upload: "點擊上傳",
|
|
||||||
upload_limit: "只能上傳xls/xlsx文件,且不超過100M",
|
|
||||||
upload_xmind: "支持文件類型:.xmind;一次至多導入800 條用例",
|
|
||||||
upload_xmind_format: "上傳文件只能是 .xmind 格式",
|
|
||||||
upload_limit_other_size: "上傳文件大小不能超過",
|
|
||||||
upload_limit_count: "一次只能上傳一個文件",
|
|
||||||
upload_limit_format: "上傳文件只能是 xls、xlsx格式!",
|
|
||||||
upload_limit_size: "上傳文件大小不能超過 100MB!",
|
|
||||||
success: "導入成功!",
|
|
||||||
importing: "導入中...",
|
|
||||||
excel_title: "表格文件",
|
|
||||||
xmind_title: "思維導圖",
|
|
||||||
import_desc: "導入說明",
|
|
||||||
import_file: "上傳文件",
|
|
||||||
ignore_error: "忽略錯誤",
|
|
||||||
continue_upload: "繼續上傳",
|
|
||||||
import_create: "導入新建",
|
|
||||||
import_update: "導入更新",
|
|
||||||
import_tip1: "項目設置中「測試用例自定義ID」 開關開啟時ID為必填項",
|
|
||||||
import_tip2: "導入更新時ID為必填項",
|
|
||||||
import_file_tips: "請先上傳文件!",
|
|
||||||
},
|
|
||||||
export: {
|
|
||||||
export: "導出用例",
|
|
||||||
export_tip: "請切換成用例列表勾選用例導出!"
|
|
||||||
},
|
|
||||||
case_desc: "用例描述",
|
|
||||||
passing_rate: '用例通過率',
|
|
||||||
sync_to_new_version: "復製以下信息到新版本",
|
|
||||||
exists_multiple_prerequisite_node: "下存在多個前置條件",
|
|
||||||
exists_multiple_remark_node: "下存在多個備註"
|
|
||||||
},
|
|
||||||
plan: {
|
|
||||||
test_plan: "測試計劃",
|
|
||||||
test_plan_id: '測試計劃Id',
|
|
||||||
create_plan: "創建測試計劃",
|
|
||||||
edit_plan: "編輯測試計劃",
|
|
||||||
plan_name: "計劃名稱",
|
|
||||||
plan_project: "所屬項目",
|
|
||||||
related_project: "關聯項目",
|
|
||||||
related_tip: "關聯項目後可以添加關聯項目下的測試用例到測試計劃列表",
|
|
||||||
plan_stage: "測試階段",
|
|
||||||
follow_people: "關註人",
|
|
||||||
plan_status: "當前狀態",
|
|
||||||
smoke_test: "冒煙測試",
|
|
||||||
functional_test: "功能測試",
|
|
||||||
regression_test: "回歸測試",
|
|
||||||
integration_testing: "集成測試",
|
|
||||||
system_test: "系統測試",
|
|
||||||
version_validation: "版本驗證",
|
|
||||||
plan_principal: "負責人",
|
|
||||||
input_plan_name: "請輸入測試計劃名稱",
|
|
||||||
input_plan_principal: "請選擇負責人",
|
|
||||||
input_plan_project: "請選擇所屬項目",
|
|
||||||
input_related_project: "請選擇關聯項目",
|
|
||||||
input_plan_stage: "請選擇測試階段",
|
|
||||||
plan_status_prepare: "未開始",
|
|
||||||
plan_status_running: "進行中",
|
|
||||||
plan_status_finished: "已結束",
|
|
||||||
plan_status_completed: "已完成",
|
|
||||||
plan_status_archived: "已歸檔",
|
|
||||||
plan_status_trash: "廢棄",
|
|
||||||
planned_start_time: "計劃開始",
|
|
||||||
planned_end_time: "計劃結束",
|
|
||||||
actual_start_time: "實際開始",
|
|
||||||
actual_end_time: "實際結束",
|
|
||||||
plan_delete_confirm: "將刪除該測試計劃下所有用例,確認刪除測試計劃: ",
|
|
||||||
plan_delete_tip: "該測試計劃正在進行中,請確認再刪除!",
|
|
||||||
plan_delete: "刪除計劃",
|
|
||||||
api_case: "接口測試用例",
|
|
||||||
scenario_case: "場景測試用例",
|
|
||||||
execute_result: "執行結果",
|
|
||||||
execute_time: '執行時間',
|
|
||||||
is_api_case_executing: "是否執行接口用例",
|
|
||||||
is_scenario_executing: '是否執行場景',
|
|
||||||
is_performance_executing: '是否執行性能',
|
|
||||||
test_plan_test_case_count: "功能用例數",
|
|
||||||
test_plan_api_case_count: "接口用例數",
|
|
||||||
test_plan_api_scenario_count: "場景用例數",
|
|
||||||
test_plan_ui_scenario_count: "UI 場景用例數",
|
|
||||||
test_plan_load_case_count: "性能用例數",
|
|
||||||
test_plan_component_case_count: "步驟用例數",
|
|
||||||
data_name: "數據名稱",
|
|
||||||
test_plan_batch_switch: "批量開/關定時任務",
|
|
||||||
batch_update_schedule_enable: '更新{0}個測試計畫的定時任務狀態為',
|
|
||||||
batch_update_schedule_enable_alert: '注意:只能更新已設定了定時任務的測試計畫',
|
|
||||||
next_run_time: '下次運行時間',
|
|
||||||
schedule_enabled: '已開啟',
|
|
||||||
check_schedule_enabled: '您勾選的數據檢測到有{0}條定時任務可以修改',
|
|
||||||
no_check_schedule_enabled: '您勾選的數據沒有檢測到定時任務',
|
|
||||||
load_case: {
|
|
||||||
case: "性能用例",
|
|
||||||
execution_status: "執行狀態",
|
|
||||||
report: "報告",
|
|
||||||
view_report: "查看報告",
|
|
||||||
unlink_in_bulk: "批量取消關聯",
|
|
||||||
batch_exec_cases: "批量執行用例",
|
|
||||||
exec: "正在執行....",
|
|
||||||
error: "用例執行錯誤,請單獨調試該用例!",
|
|
||||||
report_not_found: "報告不存在",
|
|
||||||
content_empty: "內容為空",
|
|
||||||
}
|
|
||||||
},
|
|
||||||
demand: {
|
|
||||||
id: '需求ID',
|
|
||||||
name: '需求名稱',
|
|
||||||
batch_relate: '批量關聯需求',
|
|
||||||
relate_is_null_warn: '關聯需求不能為空!',
|
|
||||||
relate_name_is_null_warn: '需求名稱不能為空!',
|
|
||||||
third_platform_demand: "三方平台需求",
|
|
||||||
other_demand: "其他需求"
|
|
||||||
},
|
|
||||||
step_model: '步驟模型',
|
|
||||||
review: {
|
|
||||||
test_review: "用例評審",
|
|
||||||
create_review: "創建用例評審",
|
|
||||||
edit_review: "編輯用例評審",
|
|
||||||
review_name: "評審名稱",
|
|
||||||
reviewer: "評審人",
|
|
||||||
review_project: "所屬項目",
|
|
||||||
related_project: "關聯項目",
|
|
||||||
related_tip: "關聯項目後可以添加關聯項目下的測試用例到評審列表",
|
|
||||||
review_creator: "發起人",
|
|
||||||
review_follow_people: "關註人",
|
|
||||||
review_status: "當前狀態",
|
|
||||||
end_time: "截止時間",
|
|
||||||
delete: "刪除評審",
|
|
||||||
input_review_name: "請輸入評審名稱",
|
|
||||||
input_review_project: "請選擇所屬項目",
|
|
||||||
input_reviewer: "請選擇評審人",
|
|
||||||
no_link_case: "沒有關聯用例!",
|
|
||||||
pass: "通過",
|
|
||||||
un_pass: "未通過",
|
|
||||||
prepare: '未評審',
|
|
||||||
comment: "評論",
|
|
||||||
my_review: "我的評審",
|
|
||||||
my_create: "我創建的評審",
|
|
||||||
reviewed_by_me: "待我評審",
|
|
||||||
creator: "創建人",
|
|
||||||
done: "已評用例",
|
|
||||||
result_distribution: "結果分布",
|
|
||||||
deadline_cannot_early_tips: "截止時間不能早於當前時間!",
|
|
||||||
},
|
|
||||||
comment: {
|
|
||||||
no_comment: "暫無評論",
|
|
||||||
send_comment: "發表評論(Ctrl+Enter發送)",
|
|
||||||
send: "確定",
|
|
||||||
description_is_null: "評論內容不能為空!",
|
|
||||||
send_success: "評論成功!",
|
|
||||||
cannot_edit: "無法編輯此評論!",
|
|
||||||
cannot_delete: "無法刪除此評論!",
|
|
||||||
submit_description: "請先提交評論!",
|
|
||||||
},
|
|
||||||
review_view: {
|
|
||||||
review: "評審",
|
|
||||||
all_case: "全部用例",
|
|
||||||
start_review: "開始評審",
|
|
||||||
relevance_case: "關聯用例",
|
|
||||||
last_page: "已經到底了!",
|
|
||||||
execute_result: "評審結果",
|
|
||||||
},
|
|
||||||
module: {
|
|
||||||
id: '模塊ID',
|
|
||||||
search: "搜索模塊",
|
|
||||||
rename: "重命名",
|
|
||||||
add_submodule: "添加子模塊",
|
|
||||||
add_module: "添加模塊",
|
|
||||||
name: "模塊名稱",
|
|
||||||
delete_confirm: "確認刪除模塊: ",
|
|
||||||
delete_all_resource: "以及模塊下所有子模塊和測試用例",
|
|
||||||
delete_batch_confirm: "確認批量刪除勾選的場景步驟?",
|
|
||||||
module: "模塊",
|
|
||||||
title: "標題",
|
|
||||||
status: "狀態",
|
|
||||||
describe: "描述",
|
|
||||||
current_owner: "處理人",
|
|
||||||
creation_time: "創建時間",
|
|
||||||
project_name: "所屬項目"
|
|
||||||
},
|
|
||||||
home: {
|
|
||||||
recent_test: "最近測試",
|
|
||||||
my_plan: "我的計劃",
|
|
||||||
test_rate: "測試進度",
|
|
||||||
tested_case: "已測用例",
|
|
||||||
review_progress: "評審進度",
|
|
||||||
case_count: "用例數量統計",
|
|
||||||
relevance_case: "關聯用例數量統計",
|
|
||||||
case_maintenance: "用例責任人分布",
|
|
||||||
bug_count: "遺留缺陷統計",
|
|
||||||
case_review: "用例評審",
|
|
||||||
review_rate: "評審率",
|
|
||||||
coverage: "覆蓋率",
|
|
||||||
function_case_count: "功能用例數",
|
|
||||||
relevance_case_count: "關聯用例數",
|
|
||||||
serial_number: "序號",
|
|
||||||
test_plan_name: "測試計劃名稱",
|
|
||||||
case_size: "用例數",
|
|
||||||
bug_size: "缺陷數",
|
|
||||||
passing_rate: "通過率",
|
|
||||||
percentage: "占比"
|
|
||||||
},
|
|
||||||
plan_view: {
|
|
||||||
plan: "計劃",
|
|
||||||
relevance_test_case: "關聯測試用例",
|
|
||||||
cancel_all_relevance: "取消全部關聯",
|
|
||||||
executor: "執行人",
|
|
||||||
executor_match_rule: "執行者匹配規則",
|
|
||||||
execute_result: "執行結果",
|
|
||||||
pass: "通過",
|
|
||||||
not_pass: "不通過",
|
|
||||||
failure: "失敗",
|
|
||||||
blocking: "阻塞",
|
|
||||||
stop: "停止",
|
|
||||||
skip: "跳過",
|
|
||||||
actual_result: "實際結果",
|
|
||||||
step_result: "步驟執行結果",
|
|
||||||
my_case: "我的用例",
|
|
||||||
all_case: "全部用例",
|
|
||||||
pre_case: "上一條用例",
|
|
||||||
next_case: "下一條用例",
|
|
||||||
change_execution_results: "更改執行結果",
|
|
||||||
change_executor: "更改執行人",
|
|
||||||
select_executor: "請選擇執行人",
|
|
||||||
select_execute_result: "選擇執行結果",
|
|
||||||
cancel_relevance: "取消用例關聯",
|
|
||||||
confirm_cancel_relevance: "確認取消關聯",
|
|
||||||
select_manipulate: "請選擇需要操作的數據",
|
|
||||||
select_template: "選擇模版",
|
|
||||||
step: "步驟",
|
|
||||||
submit_issues: "提缺陷",
|
|
||||||
operate_step: "操作步驟",
|
|
||||||
edit_component: "編輯組件",
|
|
||||||
component: "組件",
|
|
||||||
base_info: "基礎信息",
|
|
||||||
mock_info: "Mock服務",
|
|
||||||
test_result: "測試結果",
|
|
||||||
result_distribution: "測試結果分布",
|
|
||||||
custom_component: "自定義模塊",
|
|
||||||
defect_list: "缺陷列表",
|
|
||||||
create_report: "創建測試報告",
|
|
||||||
view_report: "查看測試報告",
|
|
||||||
component_library: "組件庫",
|
|
||||||
component_library_tip: "拖拽組件庫中組件,添加至右側,預覽報告效果,每個系統組件只能添加一個。",
|
|
||||||
delete_component_tip: "請至少保留一個組件",
|
|
||||||
input_template_name: "輸入模版名稱",
|
|
||||||
template_special_characters: '模版名稱不支持特殊字符',
|
|
||||||
case_count: "用例數",
|
|
||||||
issues_count: "缺陷數",
|
|
||||||
result_statistics: "測試結果統計",
|
|
||||||
result_statistics_chart: "測試結果統計圖",
|
|
||||||
create_template: "新建模版",
|
|
||||||
report_template: "測試報告模版",
|
|
||||||
test_detail: "測試詳情",
|
|
||||||
failure_case: "失敗用例",
|
|
||||||
export_report: "導出報告",
|
|
||||||
share_report: "分享報告",
|
|
||||||
no_case_relevance: "沒有關聯用例",
|
|
||||||
automatically_update_status: "自動更新狀態",
|
|
||||||
automatically_update_status_tip: "當功能用例關聯的接口或性能用例在測試計劃執行後,自動更新功能用例的狀態",
|
|
||||||
allow_associated_repetitive_cases: "允許關聯重復用例",
|
|
||||||
allow_associated_repetitive_cases_tip: "是否允許同一個測試計劃中多次關聯相同用例",
|
|
||||||
performance_case_count: "性能測試用例數",
|
|
||||||
running: "運行中",
|
|
||||||
please_choose_test_case: "请选择测试用例!",
|
|
||||||
execute_tip: "步驟執行結果中含有 失敗 結果,無法標記該用例為 通過 狀態!"
|
|
||||||
},
|
|
||||||
issue: {
|
|
||||||
issue: "缺陷",
|
|
||||||
issue_management: "缺陷管理",
|
|
||||||
platform_status: "平臺狀態",
|
|
||||||
issue_resource: "缺陷來源",
|
|
||||||
create_issue: "創建缺陷",
|
|
||||||
add_issue: "添加缺陷",
|
|
||||||
issue_list: "缺陷列表",
|
|
||||||
search_name: "根據標題搜索",
|
|
||||||
platform_tip: "在系統設置-工作空間-服務集成中集成缺陷管理平臺可以提交缺陷到指定缺陷管理平臺",
|
|
||||||
input_title: "請輸入標題",
|
|
||||||
id: "缺陷ID",
|
|
||||||
title: "缺陷標題",
|
|
||||||
description: "缺陷描述",
|
|
||||||
status: "缺陷狀態",
|
|
||||||
issue_project: "所屬項目",
|
|
||||||
platform: "平臺",
|
|
||||||
operate: "操作",
|
|
||||||
close: "關閉缺陷",
|
|
||||||
delete: "刪除缺陷",
|
|
||||||
title_description_required: "標題和描述必填",
|
|
||||||
close_success: "關閉成功",
|
|
||||||
delete_warning: "解除會影響測試計畫相關統計,是否確認",
|
|
||||||
preview: "預覽",
|
|
||||||
status_new: '新建',
|
|
||||||
status_resolved: '已解決',
|
|
||||||
status_closed: '已關閉',
|
|
||||||
status_active: '激活',
|
|
||||||
status_delete: '刪除',
|
|
||||||
status_in_progress: '接受/處理',
|
|
||||||
status_rejected: '拒絕',
|
|
||||||
status_upcoming: '待辦',
|
|
||||||
status_reopened: '重新打開',
|
|
||||||
please_choose_current_owner: "請選擇處理人",
|
|
||||||
tapd_current_owner: "Tapd 處理人",
|
|
||||||
zentao_bug_build: "禪道 影響版本",
|
|
||||||
zentao_bug_assigned: "禪道 處理人",
|
|
||||||
third_party_integrated: "集成第三方平臺",
|
|
||||||
use_third_party: "使用 Jira 缺陷模板",
|
|
||||||
update_third_party_bugs: "更新第三方平臺的缺陷",
|
|
||||||
sync_bugs: "同步缺陷",
|
|
||||||
sync_complete: "同步完成",
|
|
||||||
issue_sync_tip: "當前項目正在同步缺陷, 請稍等!",
|
|
||||||
save_before_open_comment: "請先保存缺陷再添加評論",
|
|
||||||
delete_tip: "確認刪除缺陷:",
|
|
||||||
check_id_exist: "檢查",
|
|
||||||
save_project_first: "請先保存項目",
|
|
||||||
tapd_status_new: "新",
|
|
||||||
tapd_status_in_progress: "接受/處理",
|
|
||||||
tapd_status_reopened: "重新打開",
|
|
||||||
tapd_status_rejected: "已拒絕",
|
|
||||||
tapd_status_verified: "已驗證",
|
|
||||||
tapd_status_closed: "已關閉",
|
|
||||||
tapd_status_resolved: "已解決",
|
|
||||||
please_choose_platform_status: "請選擇平臺狀態",
|
|
||||||
},
|
|
||||||
report: {
|
|
||||||
name: "測試計劃報告",
|
|
||||||
list: {
|
|
||||||
name: "名稱",
|
|
||||||
test_plan: "測試計劃名稱",
|
|
||||||
creator: "創建人",
|
|
||||||
create_time: "創建時間",
|
|
||||||
trigger_mode: "觸發方式",
|
|
||||||
run_time: "運行耗時(s)",
|
|
||||||
pass_rate: "成功率",
|
|
||||||
status: "狀態",
|
|
||||||
operation: "操作",
|
|
||||||
},
|
|
||||||
trigger_mode: {
|
|
||||||
manual: "手動觸發",
|
|
||||||
automation: "自動觸發",
|
|
||||||
},
|
|
||||||
overview: "概覽",
|
|
||||||
testing_time: "測試時間",
|
|
||||||
total_number_tests: "測試總數",
|
|
||||||
exacutive_rate: "執行率",
|
|
||||||
exacutive_rate_tip: "執行過的用例/所有用例 * 100%",
|
|
||||||
passing_rate: "通過率",
|
|
||||||
passing_rate_tip: "執行通過用例/所有用例 * 100%",
|
|
||||||
content: "目錄",
|
|
||||||
report_summary: "報告總結",
|
|
||||||
analysis_functional: "功能用例統計分析",
|
|
||||||
analysis_api: "接口用例統計分析",
|
|
||||||
analysis_ui: "UI 用例統計分析",
|
|
||||||
analysis_load: "性能用例統計分析",
|
|
||||||
valid_for_24_hours: "24小時有效",
|
|
||||||
configuration: "配置",
|
|
||||||
share: "分享",
|
|
||||||
template_configuration: "模板配置",
|
|
||||||
test_result: "測試結果",
|
|
||||||
fail_case: "失敗用例",
|
|
||||||
issue_list: "缺陷列表",
|
|
||||||
all_case: "所有用例",
|
|
||||||
},
|
|
||||||
reporter: '報告人',
|
|
||||||
lastmodify: '最後更改',
|
|
||||||
},
|
|
||||||
test_resource_pool: {
|
test_resource_pool: {
|
||||||
id: "測試資源池ID",
|
id: "測試資源池ID",
|
||||||
type: '類型',
|
type: '類型',
|
||||||
|
|
Loading…
Reference in New Issue