diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/MsScenario.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/MsScenario.java
index 642b71b976..b4325f33ff 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/MsScenario.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/MsScenario.java
@@ -73,6 +73,10 @@ public class MsScenario extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
+ return;
+ }
if (this.getReferenced() != null && this.getReferenced().equals("Deleted")) {
return;
} else if (this.getReferenced() != null && this.getReferenced().equals("REF")) {
@@ -198,6 +202,8 @@ public class MsScenario extends MsTestElement {
config.getConfig().get(this.getProjectId()).getCommonConfig().getVariables().stream().filter(KeyValue::isValid).filter(KeyValue::isEnable).forEach(keyValue ->
arguments.addArgument(keyValue.getName(), keyValue.getValue(), "=")
);
+ // 清空变量,防止重复添加
+ config.getConfig().get(this.getProjectId()).getCommonConfig().getVariables().clear();
}
if (arguments.getArguments() != null && arguments.getArguments().size() > 0) {
return arguments;
diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/assertions/MsAssertions.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/assertions/MsAssertions.java
index 8197028c78..35d4503d11 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/assertions/MsAssertions.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/assertions/MsAssertions.java
@@ -27,6 +27,10 @@ public class MsAssertions extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
+ return;
+ }
addAssertions(tree);
}
diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/controller/MsIfController.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/controller/MsIfController.java
index 80e1cf017b..5b7df4a228 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/controller/MsIfController.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/controller/MsIfController.java
@@ -26,6 +26,10 @@ public class MsIfController extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
+ return;
+ }
final HashTree groupTree = tree.add(ifController());
if (CollectionUtils.isNotEmpty(hashTree)) {
hashTree.forEach(el -> {
diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/controller/MsLoopController.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/controller/MsLoopController.java
index 3e6059f5ba..b1d038c51f 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/controller/MsLoopController.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/controller/MsLoopController.java
@@ -44,6 +44,10 @@ public class MsLoopController extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
+ return;
+ }
final HashTree groupTree = controller(tree);
if (CollectionUtils.isNotEmpty(config.getVariables())) {
this.addCsvDataSet(groupTree, config.getVariables());
diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/dns/MsDNSCacheManager.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/dns/MsDNSCacheManager.java
index 871b834286..38166128b8 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/dns/MsDNSCacheManager.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/dns/MsDNSCacheManager.java
@@ -26,7 +26,8 @@ public class MsDNSCacheManager extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
- if (!this.isEnable()) {
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
return;
}
for (MsTestElement el : hashTree) {
diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/extract/MsExtract.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/extract/MsExtract.java
index 45b6051347..79951094a1 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/extract/MsExtract.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/extract/MsExtract.java
@@ -30,6 +30,10 @@ public class MsExtract extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
+ return;
+ }
addRequestExtractors(tree);
}
diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/MsJSR223Processor.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/MsJSR223Processor.java
index 10136f6356..cb9982c704 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/MsJSR223Processor.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/MsJSR223Processor.java
@@ -29,6 +29,10 @@ public class MsJSR223Processor extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
+ return;
+ }
JSR223Sampler processor = new JSR223Sampler();
processor.setEnabled(this.isEnable());
if (StringUtils.isNotEmpty(this.getName())) {
diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/post/MsJSR223PostProcessor.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/post/MsJSR223PostProcessor.java
index 3172f2855e..8901e29b66 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/post/MsJSR223PostProcessor.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/post/MsJSR223PostProcessor.java
@@ -29,6 +29,10 @@ public class MsJSR223PostProcessor extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
+ return;
+ }
JSR223PostProcessor processor = new JSR223PostProcessor();
processor.setEnabled(this.isEnable());
if (StringUtils.isNotEmpty(this.getName())) {
diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/pre/MsJSR223PreProcessor.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/pre/MsJSR223PreProcessor.java
index 9cc8b35e56..ccf7fe7362 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/pre/MsJSR223PreProcessor.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/pre/MsJSR223PreProcessor.java
@@ -30,6 +30,10 @@ public class MsJSR223PreProcessor extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
+ return;
+ }
final HashTree jsr223PreTree = tree.add(getJSR223PreProcessor());
if (CollectionUtils.isNotEmpty(hashTree)) {
hashTree.forEach(el -> {
diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsDubboSampler.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsDubboSampler.java
index 36e85f2570..80d78efe23 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsDubboSampler.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsDubboSampler.java
@@ -60,6 +60,10 @@ public class MsDubboSampler extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
+ return;
+ }
if (this.getReferenced() != null && "Deleted".equals(this.getReferenced())) {
return;
}
diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java
index d09567ba5d..1b428fc29d 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java
@@ -93,7 +93,10 @@ public class MsHTTPSamplerProxy extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
-
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
+ return;
+ }
if (this.getReferenced() != null && MsTestElementConstants.REF.name().equals(this.getReferenced())) {
this.getRefElement(this);
}
@@ -315,7 +318,9 @@ public class MsHTTPSamplerProxy extends MsTestElement {
headers.stream().filter(KeyValue::isValid).filter(KeyValue::isEnable).forEach(keyValue ->
headerManager.add(new Header(keyValue.getName(), keyValue.getValue()))
);
- tree.add(headerManager);
+ if (headerManager.getHeaders().size() > 0) {
+ tree.add(headerManager);
+ }
}
public boolean isURL(String str) {
diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsJDBCSampler.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsJDBCSampler.java
index 3411db8234..c0a105e651 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsJDBCSampler.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsJDBCSampler.java
@@ -58,6 +58,10 @@ public class MsJDBCSampler extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
+ return;
+ }
if (this.getReferenced() != null && MsTestElementConstants.REF.name().equals(this.getReferenced())) {
this.getRefElement(this);
}
diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsTCPSampler.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsTCPSampler.java
index d50913b27d..dbc95ad00c 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsTCPSampler.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsTCPSampler.java
@@ -72,6 +72,10 @@ public class MsTCPSampler extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
+ return;
+ }
if (this.getReferenced() != null && MsTestElementConstants.REF.name().equals(this.getReferenced())) {
this.getRefElement(this);
}
diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/timer/MsConstantTimer.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/timer/MsConstantTimer.java
index 393cae0966..ad481db7f5 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/timer/MsConstantTimer.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/timer/MsConstantTimer.java
@@ -26,7 +26,10 @@ public class MsConstantTimer extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
-
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
+ return;
+ }
final HashTree groupTree = tree.add(constantTimer());
if (CollectionUtils.isNotEmpty(hashTree)) {
hashTree.forEach(el -> {
diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/unknown/MsJmeterElement.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/unknown/MsJmeterElement.java
index 96fcf10f33..38237e19f9 100644
--- a/backend/src/main/java/io/metersphere/api/dto/definition/request/unknown/MsJmeterElement.java
+++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/unknown/MsJmeterElement.java
@@ -3,6 +3,7 @@ package io.metersphere.api.dto.definition.request.unknown;
import com.alibaba.fastjson.annotation.JSONType;
import io.metersphere.api.dto.definition.request.MsTestElement;
import io.metersphere.api.dto.definition.request.ParameterConfig;
+import io.metersphere.commons.utils.LogUtil;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.collections.CollectionUtils;
@@ -31,22 +32,31 @@ public class MsJmeterElement extends MsTestElement {
@Override
public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) {
try {
+ // 非导出操作,且不是启用状态则跳过执行
+ if (!config.isOperating() && !this.isEnable()) {
+ return;
+ }
InputStream inputSource = getStrToStream(jmeterElement);
if (inputSource != null) {
Object scriptWrapper = SaveService.loadElement(inputSource);
HashTree elementTree = tree;
this.setElementType(scriptWrapper.getClass().getName());
+ if (scriptWrapper instanceof TestElement) {
+ ((TestElement) scriptWrapper).setName(this.getName());
+ ((TestElement) scriptWrapper).setEnabled(this.isEnable());
+ }
if (config.isOperating()) {
elementTree = tree.add(scriptWrapper);
} else if (!(scriptWrapper instanceof TestPlan) && !(scriptWrapper instanceof ThreadGroup)) {
elementTree = tree.add(scriptWrapper);
}
- if (scriptWrapper instanceof TestElement) {
- ((TestElement) scriptWrapper).setName(this.getName());
- }
- if (CollectionUtils.isNotEmpty(hashTree)) {
- for (MsTestElement el : hashTree) {
- el.toHashTree(elementTree, el.getHashTree(), config);
+ if (!config.isOperating() && scriptWrapper instanceof ThreadGroup && !((ThreadGroup) scriptWrapper).isEnabled()) {
+ LogUtil.info(((ThreadGroup) scriptWrapper).getName() + "是被禁用线程组不加入执行");
+ } else {
+ if (CollectionUtils.isNotEmpty(hashTree)) {
+ for (MsTestElement el : hashTree) {
+ el.toHashTree(elementTree, el.getHashTree(), config);
+ }
}
}
}
diff --git a/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java b/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java
index 7483b5e6e2..8096f1e974 100644
--- a/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java
+++ b/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java
@@ -115,7 +115,9 @@ public class ApiAutomationService {
if (map != null) {
if (map.isEmpty()) {
List ids = (List) JSONPath.read(definition, "$..projectId");
- idList.addAll(new HashSet<>(ids));
+ if (CollectionUtils.isNotEmpty(ids)) {
+ idList.addAll(new HashSet<>(ids));
+ }
} else {
Set set = d.getEnvironmentMap().keySet();
idList = new ArrayList<>(set);
diff --git a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java
index 20bd8c32ae..1e13fd0f3b 100644
--- a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java
+++ b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java
@@ -447,6 +447,7 @@ public class ApiDefinitionService {
}
HashTree hashTree = request.getTestElement().generateHashTree(config);
+
String runMode = ApiRunMode.DEFINITION.name();
if (StringUtils.isNotBlank(request.getType()) && StringUtils.equals(request.getType(), ApiRunMode.API_PLAN.name())) {
runMode = ApiRunMode.API_PLAN.name();
diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml
index edb7e5ec9b..aeef002a4e 100644
--- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml
+++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml
@@ -372,20 +372,20 @@
diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestReviewCaseMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestReviewCaseMapper.xml
index a520d29d33..2e56a206ce 100644
--- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestReviewCaseMapper.xml
+++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestReviewCaseMapper.xml
@@ -161,12 +161,12 @@
#{value}
-
- and test_case_review_test_case.status in
+
+ and test_case.review_status in
#{value}
-
+
diff --git a/backend/src/main/java/io/metersphere/config/ShiroConfig.java b/backend/src/main/java/io/metersphere/config/ShiroConfig.java
index 4755bbe8d4..a6ef0f4214 100644
--- a/backend/src/main/java/io/metersphere/config/ShiroConfig.java
+++ b/backend/src/main/java/io/metersphere/config/ShiroConfig.java
@@ -5,7 +5,7 @@ import io.metersphere.security.ApiKeyFilter;
import io.metersphere.security.CsrfFilter;
import io.metersphere.security.UserModularRealmAuthenticator;
import io.metersphere.security.realm.LdapRealm;
-import io.metersphere.security.realm.ShiroDBRealm;
+import io.metersphere.security.realm.LocalRealm;
import org.apache.shiro.authc.pam.FirstSuccessfulStrategy;
import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
import org.apache.shiro.cache.MemoryConstrainedCacheManager;
@@ -70,7 +70,7 @@ public class ShiroConfig implements EnvironmentAware {
}
/**
- * securityManager 不用直接注入shiroDBRealm,可能会导致事务失效
+ * securityManager 不用直接注入 Realm,可能会导致事务失效
* 解决方法见 handleContextRefresh
* http://www.debugrun.com/a/NKS9EJQ.html
*/
@@ -85,8 +85,8 @@ public class ShiroConfig implements EnvironmentAware {
@Bean
@DependsOn("lifecycleBeanPostProcessor")
- public ShiroDBRealm shiroDBRealm() {
- return new ShiroDBRealm();
+ public LocalRealm localRealm() {
+ return new LocalRealm();
}
@Bean
@@ -135,10 +135,10 @@ public class ShiroConfig implements EnvironmentAware {
public void handleContextRefresh(ContextRefreshedEvent event) {
ApplicationContext context = event.getApplicationContext();
List realmList = new ArrayList<>();
- ShiroDBRealm shiroDBRealm = context.getBean(ShiroDBRealm.class);
+ LocalRealm localRealm = context.getBean(LocalRealm.class);
LdapRealm ldapRealm = context.getBean(LdapRealm.class);
// 基本realm
- realmList.add(shiroDBRealm);
+ realmList.add(localRealm);
realmList.add(ldapRealm);
context.getBean(DefaultWebSecurityManager.class).setRealms(realmList);
}
diff --git a/backend/src/main/java/io/metersphere/excel/annotation/NotRequired.java b/backend/src/main/java/io/metersphere/excel/annotation/NotRequired.java
new file mode 100644
index 0000000000..ba07866442
--- /dev/null
+++ b/backend/src/main/java/io/metersphere/excel/annotation/NotRequired.java
@@ -0,0 +1,9 @@
+package io.metersphere.excel.annotation;
+
+import java.lang.annotation.*;
+
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+public @interface NotRequired {
+}
diff --git a/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelData.java b/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelData.java
index 8c344e6e3f..161486e0fc 100644
--- a/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelData.java
+++ b/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelData.java
@@ -20,8 +20,8 @@ public class TestCaseExcelData {
private String priority;
@ExcelIgnore
private String tags;
- @ExcelIgnore
- private String method;
+// @ExcelIgnore
+// private String method;
@ExcelIgnore
private String prerequisite;
@ExcelIgnore
diff --git a/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelDataCn.java b/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelDataCn.java
index 5bca529228..218a59e01e 100644
--- a/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelDataCn.java
+++ b/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelDataCn.java
@@ -2,6 +2,7 @@ package io.metersphere.excel.domain;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import io.metersphere.excel.annotation.NotRequired;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
@@ -40,13 +41,14 @@ public class TestCaseExcelDataCn extends TestCaseExcelData {
@ColumnWidth(50)
@ExcelProperty("标签")
+ @NotRequired
@Length(min = 0, max = 1000)
private String tags;
- @NotBlank(message = "{cannot_be_null}")
- @ExcelProperty("测试方式")
- @Pattern(regexp = "(^manual$)|(^auto$)", message = "{test_case_method_validate}")
- private String method;
+// @NotBlank(message = "{cannot_be_null}")
+// @ExcelProperty("测试方式")
+// @Pattern(regexp = "(^manual$)|(^auto$)", message = "{test_case_method_validate}")
+// private String method;
@ColumnWidth(50)
@ExcelProperty("前置条件")
diff --git a/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelDataTw.java b/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelDataTw.java
index 3c9560a051..d60c24fa2a 100644
--- a/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelDataTw.java
+++ b/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelDataTw.java
@@ -2,6 +2,7 @@ package io.metersphere.excel.domain;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import io.metersphere.excel.annotation.NotRequired;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
@@ -38,10 +39,16 @@ public class TestCaseExcelDataTw extends TestCaseExcelData {
@Pattern(regexp = "(^P0$)|(^P1$)|(^P2$)|(^P3$)", message = "{test_case_priority_validate}")
private String priority;
- @NotBlank(message = "{cannot_be_null}")
- @ExcelProperty("測試方式")
- @Pattern(regexp = "(^manual$)|(^auto$)", message = "{test_case_method_validate}")
- private String method;
+ @ColumnWidth(50)
+ @ExcelProperty("標簽")
+ @NotRequired
+ @Length(min = 0, max = 1000)
+ private String tags;
+
+// @NotBlank(message = "{cannot_be_null}")
+// @ExcelProperty("測試方式")
+// @Pattern(regexp = "(^manual$)|(^auto$)", message = "{test_case_method_validate}")
+// private String method;
@ColumnWidth(50)
@ExcelProperty("前置條件")
diff --git a/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelDataUs.java b/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelDataUs.java
index 9dcce7ad83..6916c3a5ec 100644
--- a/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelDataUs.java
+++ b/backend/src/main/java/io/metersphere/excel/domain/TestCaseExcelDataUs.java
@@ -2,6 +2,7 @@ package io.metersphere.excel.domain;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import io.metersphere.excel.annotation.NotRequired;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
@@ -39,10 +40,16 @@ public class TestCaseExcelDataUs extends TestCaseExcelData {
@Pattern(regexp = "(^P0$)|(^P1$)|(^P2$)|(^P3$)", message = "{test_case_priority_validate}")
private String priority;
- @NotBlank(message = "{cannot_be_null}")
- @ExcelProperty("Method")
- @Pattern(regexp = "(^manual$)|(^auto$)", message = "{test_case_method_validate}")
- private String method;
+ @ColumnWidth(50)
+ @ExcelProperty("Tag")
+ @NotRequired
+ @Length(min = 0, max = 1000)
+ private String tags;
+
+// @NotBlank(message = "{cannot_be_null}")
+// @ExcelProperty("Method")
+// @Pattern(regexp = "(^manual$)|(^auto$)", message = "{test_case_method_validate}")
+// private String method;
@ColumnWidth(50)
@ExcelProperty("Prerequisite")
diff --git a/backend/src/main/java/io/metersphere/excel/listener/EasyExcelListener.java b/backend/src/main/java/io/metersphere/excel/listener/EasyExcelListener.java
index 3f2dbf0326..e96023d90a 100644
--- a/backend/src/main/java/io/metersphere/excel/listener/EasyExcelListener.java
+++ b/backend/src/main/java/io/metersphere/excel/listener/EasyExcelListener.java
@@ -6,15 +6,13 @@ import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.exception.ExcelAnalysisException;
import com.alibaba.excel.util.StringUtils;
import io.metersphere.commons.utils.LogUtil;
+import io.metersphere.excel.annotation.NotRequired;
import io.metersphere.excel.domain.ExcelErrData;
import io.metersphere.excel.domain.TestCaseExcelData;
-import io.metersphere.excel.domain.UserExcelData;
import io.metersphere.excel.utils.ExcelValidateHelper;
import io.metersphere.i18n.Translator;
import java.lang.reflect.Field;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
import java.util.*;
public abstract class EasyExcelListener extends AnalysisEventListener {
@@ -131,7 +129,10 @@ public abstract class EasyExcelListener extends AnalysisEventListener {
for (String v : excelProperty.value()) {
value.append(v);
}
- result.add(value.toString());
+ // 检查是否必有的头部信息
+ if (field.getAnnotation(NotRequired.class) == null) {
+ result.add(value.toString());
+ }
}
}
return result;
@@ -140,4 +141,4 @@ public abstract class EasyExcelListener extends AnalysisEventListener {
public List> getErrList() {
return errList;
}
-}
\ No newline at end of file
+}
diff --git a/backend/src/main/java/io/metersphere/excel/listener/TestCaseDataListener.java b/backend/src/main/java/io/metersphere/excel/listener/TestCaseDataListener.java
index 1dff285527..0e5bf1d6ae 100644
--- a/backend/src/main/java/io/metersphere/excel/listener/TestCaseDataListener.java
+++ b/backend/src/main/java/io/metersphere/excel/listener/TestCaseDataListener.java
@@ -53,9 +53,9 @@ public class TestCaseDataListener extends EasyExcelListener {
}
}
- if (StringUtils.equals(data.getType(), TestCaseConstants.Type.Functional.getValue()) && StringUtils.equals(data.getMethod(), TestCaseConstants.Method.Auto.getValue())) {
- stringBuilder.append(Translator.get("functional_method_tip") + "; ");
- }
+// if (StringUtils.equals(data.getType(), TestCaseConstants.Type.Functional.getValue()) && StringUtils.equals(data.getMethod(), TestCaseConstants.Method.Auto.getValue())) {
+// stringBuilder.append(Translator.get("functional_method_tip") + "; ");
+// }
if (!userIds.contains(data.getMaintainer())) {
stringBuilder.append(Translator.get("user_not_exists") + ":" + data.getMaintainer() + "; ");
@@ -144,12 +144,12 @@ public class TestCaseDataListener extends EasyExcelListener {
String[] stepRes = new String[1];
if (data.getStepDesc() != null) {
- stepDesc = data.getStepDesc().split("\n");
+ stepDesc = data.getStepDesc().split("\r\n");
} else {
stepDesc[0] = "";
}
if (data.getStepResult() != null) {
- stepRes = data.getStepResult().split("\n");
+ stepRes = data.getStepResult().split("\r\n");
} else {
stepRes[0] = "";
}
diff --git a/backend/src/main/java/io/metersphere/ldap/controller/LdapController.java b/backend/src/main/java/io/metersphere/ldap/controller/LdapController.java
index abf6b7299b..b345cdfed6 100644
--- a/backend/src/main/java/io/metersphere/ldap/controller/LdapController.java
+++ b/backend/src/main/java/io/metersphere/ldap/controller/LdapController.java
@@ -68,7 +68,7 @@ public class LdapController {
userService.addLdapUser(user);
}
- // 执行 ShiroDBRealm 中 LDAP 登录逻辑
+ // 执行 LocalRealm 中 LDAP 登录逻辑
LoginRequest loginRequest = new LoginRequest();
loginRequest.setUsername(userId);
return userService.login(loginRequest);
diff --git a/backend/src/main/java/io/metersphere/security/realm/ShiroDBRealm.java b/backend/src/main/java/io/metersphere/security/realm/LocalRealm.java
similarity index 97%
rename from backend/src/main/java/io/metersphere/security/realm/ShiroDBRealm.java
rename to backend/src/main/java/io/metersphere/security/realm/LocalRealm.java
index 337e282eb6..97a9ef746a 100644
--- a/backend/src/main/java/io/metersphere/security/realm/ShiroDBRealm.java
+++ b/backend/src/main/java/io/metersphere/security/realm/LocalRealm.java
@@ -34,9 +34,9 @@ import java.util.stream.Collectors;
* set realm
*
*/
-public class ShiroDBRealm extends AuthorizingRealm {
+public class LocalRealm extends AuthorizingRealm {
- private Logger logger = LoggerFactory.getLogger(ShiroDBRealm.class);
+ private Logger logger = LoggerFactory.getLogger(LocalRealm.class);
@Resource
private UserService userService;
diff --git a/backend/src/main/java/io/metersphere/track/controller/TestPlanApiCaseController.java b/backend/src/main/java/io/metersphere/track/controller/TestPlanApiCaseController.java
index f3fcecf316..4865aa12b8 100644
--- a/backend/src/main/java/io/metersphere/track/controller/TestPlanApiCaseController.java
+++ b/backend/src/main/java/io/metersphere/track/controller/TestPlanApiCaseController.java
@@ -33,9 +33,7 @@ public class TestPlanApiCaseController {
@PostMapping("/relevance/list/{goPage}/{pageSize}")
public Pager> relevanceList(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody ApiTestCaseRequest request) {
- Page