feat: 导入用例时,用例所有字段值都相同才判断用例重复
This commit is contained in:
parent
d7df95c7f6
commit
ff9965b2e7
|
@ -7,6 +7,7 @@ import com.alibaba.excel.exception.ExcelAnalysisException;
|
|||
import com.alibaba.excel.util.StringUtils;
|
||||
import io.metersphere.commons.utils.LogUtil;
|
||||
import io.metersphere.excel.domain.ExcelErrData;
|
||||
import io.metersphere.excel.domain.TestCaseExcelData;
|
||||
import io.metersphere.excel.utils.EasyExcelI18nTranslator;
|
||||
import io.metersphere.excel.utils.ExcelValidateHelper;
|
||||
import io.metersphere.i18n.Translator;
|
||||
|
@ -24,6 +25,8 @@ public abstract class EasyExcelListener<T> extends AnalysisEventListener<T> {
|
|||
|
||||
protected EasyExcelI18nTranslator easyExcelI18nTranslator;
|
||||
|
||||
protected List<TestCaseExcelData> excelDataList = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 每隔2000条存储数据库,然后清理list ,方便内存回收
|
||||
*/
|
||||
|
|
|
@ -10,10 +10,7 @@ import io.metersphere.i18n.Translator;
|
|||
import io.metersphere.track.service.TestCaseService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -57,10 +54,35 @@ public class TestCaseDataListener extends EasyExcelListener<TestCaseExcelData> {
|
|||
if (!userIds.contains(data.getMaintainer())) {
|
||||
stringBuilder.append(Translator.get("user_not_exists") + ":" + data.getMaintainer() + "; ");
|
||||
}
|
||||
|
||||
if (testCaseNames.contains(data.getName())) {
|
||||
stringBuilder.append(Translator.get("test_case_already_exists_excel") + ":" + data.getName() + "; ");
|
||||
TestCaseWithBLOBs testCase = new TestCaseWithBLOBs();
|
||||
BeanUtils.copyBean(testCase, data);
|
||||
testCase.setProjectId(projectId);
|
||||
String steps = getSteps(data);
|
||||
testCase.setSteps(steps);
|
||||
|
||||
boolean dbExist = testCaseService.exist(testCase);
|
||||
boolean excelExist = false;
|
||||
|
||||
if (dbExist) {
|
||||
// db exist
|
||||
stringBuilder.append(Translator.get("test_case_already_exists_excel") + ":" + data.getName() + "; ");
|
||||
} else {
|
||||
// @Data 重写了 equals 和 hashCode 方法
|
||||
excelExist = excelDataList.contains(data);
|
||||
}
|
||||
|
||||
if (excelExist) {
|
||||
// excel exist
|
||||
stringBuilder.append(Translator.get("test_case_already_exists_excel") + ":" + data.getName() + "; ");
|
||||
} else {
|
||||
excelDataList.add(data);
|
||||
}
|
||||
|
||||
} else {
|
||||
testCaseNames.add(data.getName());
|
||||
excelDataList.add(data);
|
||||
}
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
@ -103,6 +125,13 @@ public class TestCaseDataListener extends EasyExcelListener<TestCaseExcelData> {
|
|||
testCase.setNodePath(nodePath);
|
||||
|
||||
|
||||
String steps = getSteps(data);
|
||||
testCase.setSteps(steps);
|
||||
|
||||
return testCase;
|
||||
}
|
||||
|
||||
public String getSteps(TestCaseExcelData data) {
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
|
||||
String[] stepDesc = new String[1];
|
||||
|
@ -124,7 +153,8 @@ public class TestCaseDataListener extends EasyExcelListener<TestCaseExcelData> {
|
|||
|
||||
for (int i = 0; i < index; i++) {
|
||||
|
||||
JSONObject step = new JSONObject();
|
||||
// 保持插入顺序,判断用例是否有相同的steps
|
||||
JSONObject step = new JSONObject(true);
|
||||
step.put("num", i + 1);
|
||||
|
||||
Pattern descPattern = Pattern.compile(pattern);
|
||||
|
@ -150,10 +180,7 @@ public class TestCaseDataListener extends EasyExcelListener<TestCaseExcelData> {
|
|||
|
||||
jsonArray.add(step);
|
||||
}
|
||||
|
||||
testCase.setSteps(jsonArray.toJSONString());
|
||||
|
||||
return testCase;
|
||||
return jsonArray.toJSONString();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -106,13 +106,16 @@ public class TestCaseService {
|
|||
TestCaseExample.Criteria criteria = example.createCriteria();
|
||||
criteria.andNameEqualTo(testCase.getName())
|
||||
.andProjectIdEqualTo(testCase.getProjectId())
|
||||
.andNodeIdEqualTo(testCase.getNodeId())
|
||||
.andNodePathEqualTo(testCase.getNodePath())
|
||||
.andTypeEqualTo(testCase.getType())
|
||||
.andMaintainerEqualTo(testCase.getMaintainer())
|
||||
.andPriorityEqualTo(testCase.getPriority())
|
||||
.andMethodEqualTo(testCase.getMethod());
|
||||
|
||||
// if (StringUtils.isNotBlank(testCase.getNodeId())) {
|
||||
// criteria.andNodeIdEqualTo(testCase.getTestId());
|
||||
// }
|
||||
|
||||
if (StringUtils.isNotBlank(testCase.getTestId())) {
|
||||
criteria.andTestIdEqualTo(testCase.getTestId());
|
||||
}
|
||||
|
@ -371,8 +374,8 @@ public class TestCaseService {
|
|||
JSONArray jsonArray = JSON.parseArray(steps);
|
||||
for (int j = 0; j < jsonArray.size(); j++) {
|
||||
int num = j + 1;
|
||||
step.append(num + ":" + jsonArray.getJSONObject(j).getString("desc") + "\n");
|
||||
result.append(num + ":" + jsonArray.getJSONObject(j).getString("result") + "\n");
|
||||
step.append(num + "." + jsonArray.getJSONObject(j).getString("desc") + "\n");
|
||||
result.append(num + "." + jsonArray.getJSONObject(j).getString("result") + "\n");
|
||||
|
||||
}
|
||||
data.setStepDesc(step.toString());
|
||||
|
@ -471,4 +474,21 @@ public class TestCaseService {
|
|||
return Optional.ofNullable(testCase.getNum() + 1).orElse(100001);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 导入用例前,检查数据库是否存在此用例
|
||||
* @param testCaseWithBLOBs
|
||||
* @return
|
||||
*/
|
||||
public boolean exist(TestCaseWithBLOBs testCaseWithBLOBs) {
|
||||
|
||||
try {
|
||||
checkTestCaseExist(testCaseWithBLOBs);
|
||||
} catch (MSException e) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue