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 page = PageHelper.startPage(goPage, pageSize, true); - request.setWorkspaceId(SessionUtils.getCurrentWorkspaceId()); - return PageUtils.setPageInfo(page, testPlanApiCaseService.relevanceList(request)); + return testPlanApiCaseService.relevanceList(goPage, pageSize, request); } @GetMapping("/delete/{id}") diff --git a/backend/src/main/java/io/metersphere/track/service/TestCaseService.java b/backend/src/main/java/io/metersphere/track/service/TestCaseService.java index 36579a7de3..85e342970a 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestCaseService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestCaseService.java @@ -131,8 +131,8 @@ public class TestCaseService { .andNodePathEqualTo(testCase.getNodePath()) .andTypeEqualTo(testCase.getType()) .andMaintainerEqualTo(testCase.getMaintainer()) - .andPriorityEqualTo(testCase.getPriority()) - .andMethodEqualTo(testCase.getMethod()); + .andPriorityEqualTo(testCase.getPriority()); +// .andMethodEqualTo(testCase.getMethod()); // if (StringUtils.isNotBlank(testCase.getNodeId())) { // criteria.andNodeIdEqualTo(testCase.getTestId()); @@ -432,7 +432,7 @@ public class TestCaseService { List list = new ArrayList<>(); StringBuilder path = new StringBuilder(""); List types = TestCaseConstants.Type.getValues(); - List methods = TestCaseConstants.Method.getValues(); +// List methods = TestCaseConstants.Method.getValues(); SessionUser user = SessionUtils.getUser(); for (int i = 1; i <= 5; i++) { TestCaseExcelData data = new TestCaseExcelData(); @@ -442,11 +442,11 @@ public class TestCaseService { data.setPriority("P" + i % 4); String type = types.get(i % 3); data.setType(type); - if (StringUtils.equals(TestCaseConstants.Type.Functional.getValue(), type)) { - data.setMethod(TestCaseConstants.Method.Manual.getValue()); - } else { - data.setMethod(methods.get(i % 2)); - } +// if (StringUtils.equals(TestCaseConstants.Type.Functional.getValue(), type)) { +// data.setMethod(TestCaseConstants.Method.Manual.getValue()); +// } else { +// data.setMethod(methods.get(i % 2)); +// } data.setPrerequisite(Translator.get("preconditions_optional")); data.setStepDesc("1. " + Translator.get("step_tip_separate") + "\n2. " + Translator.get("step_tip_order") + "\n3. " + Translator.get("step_tip_optional")); @@ -461,7 +461,7 @@ public class TestCaseService { explain.setName(Translator.get("do_not_modify_header_order")); explain.setNodePath(Translator.get("module_created_automatically")); explain.setType(Translator.get("options") + "(functional、performance、api)"); - explain.setMethod(Translator.get("options") + "(manual、auto)"); +// explain.setMethod(Translator.get("options") + "(manual、auto)"); explain.setPriority(Translator.get("options") + "(P0、P1、P2、P3)"); explain.setMaintainer(Translator.get("please_input_workspace_member")); @@ -483,7 +483,11 @@ public class TestCaseService { private List generateTestCaseExcel(TestCaseBatchRequest request) { ServiceUtils.getSelectAllIds(request, request.getCondition(), (query) -> extTestCaseMapper.selectIds(query)); - List orderList = ServiceUtils.getDefaultOrder(request.getOrders()); + QueryTestCaseRequest condition = request.getCondition(); + List orderList = new ArrayList<>(); + if (condition != null) { + orderList = ServiceUtils.getDefaultOrder(condition.getOrders()); + } OrderRequest order = new OrderRequest(); order.setName("sort"); order.setType("desc"); @@ -499,10 +503,10 @@ public class TestCaseService { data.setNodePath(t.getNodePath()); data.setPriority(t.getPriority()); data.setType(t.getType()); - data.setMethod(t.getMethod()); +// data.setMethod(t.getMethod()); data.setPrerequisite(t.getPrerequisite()); data.setTags(t.getTags()); - if (t.getMethod().equals("manual")) { + if (StringUtils.equals(t.getMethod(), "manual") || StringUtils.isBlank(t.getMethod())) { String steps = t.getSteps(); String setp = ""; setp = steps; @@ -520,8 +524,8 @@ public class TestCaseService { 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") + "\r\n"); + result.append(num + "." + jsonArray.getJSONObject(j).getString("result") + "\r\n"); } data.setStepDesc(step.toString()); @@ -530,19 +534,19 @@ public class TestCaseService { result.setLength(0); data.setRemark(t.getRemark()); - } else if (t.getMethod().equals("auto") && t.getType().equals("api")) { + } else if ("auto".equals(t.getMethod()) && "api".equals(t.getType())) { data.setStepDesc(""); data.setStepResult(""); - if (t.getTestId() != null && t.getTestId().equals("other")) { + if (t.getTestId() != null && "other".equals(t.getTestId())) { data.setRemark(t.getOtherTestName()); } else { data.setRemark("[" + t.getApiName() + "]" + "\n" + t.getRemark()); } - } else if (t.getMethod().equals("auto") && t.getType().equals("performance")) { + } else if ("auto".equals(t.getMethod()) && "performance".equals(t.getType())) { data.setStepDesc(""); data.setStepResult(""); - if (t.getTestId() != null && t.getTestId().equals("other")) { + if (t.getTestId() != null && "other".equals(t.getTestId())) { data.setRemark(t.getOtherTestName()); } else { data.setRemark(t.getPerformName()); diff --git a/backend/src/main/java/io/metersphere/track/service/TestPlanApiCaseService.java b/backend/src/main/java/io/metersphere/track/service/TestPlanApiCaseService.java index 4f5ae37971..df789f41ad 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestPlanApiCaseService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestPlanApiCaseService.java @@ -2,6 +2,8 @@ package io.metersphere.track.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; import io.metersphere.api.dto.definition.ApiTestCaseDTO; import io.metersphere.api.dto.definition.ApiTestCaseRequest; import io.metersphere.api.dto.definition.RunDefinitionRequest; @@ -18,7 +20,10 @@ import io.metersphere.base.domain.TestPlanApiCase; import io.metersphere.base.domain.TestPlanApiCaseExample; import io.metersphere.base.mapper.TestPlanApiCaseMapper; import io.metersphere.base.mapper.ext.ExtTestPlanApiCaseMapper; +import io.metersphere.commons.utils.PageUtils; +import io.metersphere.commons.utils.Pager; import io.metersphere.commons.utils.ServiceUtils; +import io.metersphere.commons.utils.SessionUtils; import io.metersphere.track.request.testcase.TestPlanApiCaseBatchRequest; import org.apache.jmeter.testelement.TestElement; import org.springframework.context.annotation.Lazy; @@ -61,13 +66,15 @@ public class TestPlanApiCaseService { return extTestPlanApiCaseMapper.getExecResultByPlanId(plan); } - public List relevanceList(ApiTestCaseRequest request) { + public Pager> relevanceList(int goPage, int pageSize, ApiTestCaseRequest request) { List ids = apiTestCaseService.selectIdsNotExistsInPlan(request.getProjectId(), request.getPlanId()); + Page page = PageHelper.startPage(goPage, pageSize, true); if (CollectionUtils.isEmpty(ids)) { - return new ArrayList<>(); + return PageUtils.setPageInfo(page, new ArrayList<>()); } request.setIds(ids); - return apiTestCaseService.listSimple(request); + request.setWorkspaceId(SessionUtils.getCurrentWorkspaceId()); + return PageUtils.setPageInfo(page, apiTestCaseService.listSimple(request)); } public int delete(String id) { diff --git a/backend/src/main/java/io/metersphere/track/service/TestPlanService.java b/backend/src/main/java/io/metersphere/track/service/TestPlanService.java index 1b1a647ea8..bc850fe47d 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestPlanService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestPlanService.java @@ -551,8 +551,8 @@ public class TestPlanService { queryTestPlanRequest.setId(planId); TestPlanDTO testPlan = extTestPlanMapper.list(queryTestPlanRequest).get(0); - String projectName = getProjectNameByPlanId(planId); - testPlan.setProjectName(projectName); + Project project = projectMapper.selectByPrimaryKey(testPlan.getProjectId()); + testPlan.setProjectName(project.getName()); TestCaseReport testCaseReport = testCaseReportMapper.selectByPrimaryKey(testPlan.getReportId()); JSONObject content = JSONObject.parseObject(testCaseReport.getContent()); @@ -708,8 +708,8 @@ public class TestPlanService { queryTestPlanRequest.setId(planId); TestPlanDTO testPlan = extTestPlanMapper.list(queryTestPlanRequest).get(0); - String projectName = getProjectNameByPlanId(planId); - testPlan.setProjectName(projectName); + Project project = projectMapper.selectByPrimaryKey(testPlan.getProjectId()); + testPlan.setProjectName(project.getName()); TestCaseReport testCaseReport = testCaseReportMapper.selectByPrimaryKey(testPlan.getReportId()); JSONObject content = JSONObject.parseObject(testCaseReport.getContent()); diff --git a/backend/src/main/java/io/metersphere/track/service/TrackService.java b/backend/src/main/java/io/metersphere/track/service/TrackService.java index 3bcdf1cf79..f870907533 100644 --- a/backend/src/main/java/io/metersphere/track/service/TrackService.java +++ b/backend/src/main/java/io/metersphere/track/service/TrackService.java @@ -1,13 +1,19 @@ package io.metersphere.track.service; +import io.metersphere.api.dto.automation.ScenarioStatus; import io.metersphere.base.domain.*; import io.metersphere.base.mapper.*; import io.metersphere.base.mapper.ext.ExtTestCaseMapper; +import io.metersphere.base.mapper.ext.ExtTestPlanTestCaseMapper; +import io.metersphere.commons.constants.TestPlanTestCaseStatus; import io.metersphere.commons.utils.DateUtils; +import io.metersphere.commons.utils.MathUtils; import io.metersphere.performance.base.ChartsData; +import io.metersphere.track.dto.TestPlanDTOWithMetric; import io.metersphere.track.response.BugStatustics; import io.metersphere.track.response.TestPlanBugCount; import io.metersphere.track.response.TrackCountResult; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; @@ -28,13 +34,13 @@ public class TrackService { @Resource private TestPlanMapper testPlanMapper; @Resource - private TestPlanTestCaseMapper testPlanTestCaseMapper; + private ExtTestPlanTestCaseMapper extTestPlanTestCaseMapper; @Resource - private TestPlanLoadCaseMapper testPlanLoadCaseMapper; + private TestPlanApiCaseService testPlanApiCaseService; @Resource - private TestPlanApiCaseMapper testPlanApiCaseMapper; + private TestPlanScenarioCaseService testPlanScenarioCaseService; @Resource - private TestPlanApiScenarioMapper testPlanApiScenarioMapper; + private TestPlanLoadCaseService testPlanLoadCaseService; public List countPriority(String projectId) { return extTestCaseMapper.countPriority(projectId); @@ -132,11 +138,13 @@ public class TrackService { int planBugSize = getPlanBugSize(plan.getId()); testPlanBug.setBugSize(planBugSize); - testPlanBug.setPassRage(getPlanPassRage(plan.getId(), planCaseSize)); + double planPassRage = getPlanPassRage(plan.getId()); + testPlanBug.setPassRage(planPassRage + "%"); list.add(testPlanBug); totalBugSize += planBugSize; totalCaseSize += planCaseSize; + } bugStatustics.setList(list); @@ -156,13 +164,52 @@ public class TrackService { return extTestCaseMapper.getTestPlanBug(planId); } - private String getPlanPassRage(String planId, int totalSize) { - if (totalSize == 0) { - return "-"; - } - int passSize = extTestCaseMapper.getTestPlanPassCase(planId); - float rage = (float) passSize * 100 / totalSize; - DecimalFormat df = new DecimalFormat("0.0"); - return df.format(rage) + "%"; + private double getPlanPassRage(String planId) { + TestPlanDTOWithMetric testPlan = new TestPlanDTOWithMetric(); + testPlan.setTested(0); + testPlan.setPassed(0); + testPlan.setTotal(0); + + List functionalExecResults = extTestPlanTestCaseMapper.getExecResultByPlanId(planId); + functionalExecResults.forEach(item -> { + if (!StringUtils.equals(item, TestPlanTestCaseStatus.Prepare.name()) + && !StringUtils.equals(item, TestPlanTestCaseStatus.Underway.name())) { + testPlan.setTested(testPlan.getTested() + 1); + if (StringUtils.equals(item, TestPlanTestCaseStatus.Pass.name())) { + testPlan.setPassed(testPlan.getPassed() + 1); + } + } + }); + + List apiExecResults = testPlanApiCaseService.getExecResultByPlanId(planId); + apiExecResults.forEach(item -> { + if (StringUtils.isNotBlank(item)) { + testPlan.setTested(testPlan.getTested() + 1); + if (StringUtils.equals(item, "success")) { + testPlan.setPassed(testPlan.getPassed() + 1); + } + } + }); + + List scenarioExecResults = testPlanScenarioCaseService.getExecResultByPlanId(planId); + scenarioExecResults.forEach(item -> { + if (StringUtils.isNotBlank(item)) { + testPlan.setTested(testPlan.getTested() + 1); + if (StringUtils.equals(item, ScenarioStatus.Success.name())) { + testPlan.setPassed(testPlan.getPassed() + 1); + } + } + }); + + List loadResults = testPlanLoadCaseService.getStatus(planId); + loadResults.forEach(item -> { + if (StringUtils.isNotBlank(item)) { + testPlan.setTested(testPlan.getTested() + 1); + if (StringUtils.equals(item, "success")) { + testPlan.setPassed(testPlan.getPassed() + 1); + } + } + }); + return MathUtils.getPercentWithDecimal(testPlan.getTested() == 0 ? 0 : testPlan.getPassed() * 1.0 / testPlan.getTested()); } } diff --git a/backend/src/main/java/io/metersphere/xpack b/backend/src/main/java/io/metersphere/xpack index adefde265f..c9fd084c8f 160000 --- a/backend/src/main/java/io/metersphere/xpack +++ b/backend/src/main/java/io/metersphere/xpack @@ -1 +1 @@ -Subproject commit adefde265ff12d4ea909353c3f46008f8a8e17e7 +Subproject commit c9fd084c8f4453d7697677a79d9a0a953c045e38 diff --git a/backend/src/main/resources/db/migration/V78__v1.8_release.sql b/backend/src/main/resources/db/migration/V78__v1.8_release.sql index 9d4ff537cf..3b0558731e 100644 --- a/backend/src/main/resources/db/migration/V78__v1.8_release.sql +++ b/backend/src/main/resources/db/migration/V78__v1.8_release.sql @@ -161,4 +161,6 @@ UPDATE file_metadata JOIN (SELECT file_id, project_id SET file_metadata.project_id = temp.project_id; -- add execution_times testPlan alter table test_plan - add execution_times int null; \ No newline at end of file + add execution_times int null; + +alter table test_case modify method varchar(15) null comment 'Test case method type'; \ No newline at end of file diff --git a/frontend/src/business/components/api/automation/scenario/component/JmeterElementComponent.vue b/frontend/src/business/components/api/automation/scenario/component/JmeterElementComponent.vue index 7c47a3484b..5a80f68f70 100644 --- a/frontend/src/business/components/api/automation/scenario/component/JmeterElementComponent.vue +++ b/frontend/src/business/components/api/automation/scenario/component/JmeterElementComponent.vue @@ -54,10 +54,10 @@ }, methods: { remove() { - this.$emit('remove', this.jsr223Processor, this.node); + this.$emit('remove', this.request, this.node); }, copyRow() { - this.$emit('copyRow', this.jsr223Processor, this.node); + this.$emit('copyRow', this.request, this.node); }, active() { this.request.active = !this.request.active; diff --git a/frontend/src/business/components/api/definition/components/case/ApiCaseItem.vue b/frontend/src/business/components/api/definition/components/case/ApiCaseItem.vue index f39fce3b76..af20e63c9b 100644 --- a/frontend/src/business/components/api/definition/components/case/ApiCaseItem.vue +++ b/frontend/src/business/components/api/definition/components/case/ApiCaseItem.vue @@ -194,7 +194,7 @@ this.$emit('batchEditCase'); }, deleteCase(index, row) { - this.$alert(this.$t('api_test.definition.request.delete_confirm') + ' ' + row.name + " ?", '', { + this.$alert(this.$t('api_test.definition.request.delete_case_confirm') + ' ' + row.name + " ?", '', { confirmButtonText: this.$t('commons.confirm'), callback: (action) => { if (action === 'confirm') { @@ -305,10 +305,6 @@ row.id = data.id; row.createTime = data.createTime; row.updateTime = data.updateTime; - if (!row.message) { - this.$success(this.$t('commons.save_success')); - this.$emit('refresh'); - } }); }, saveTestCase(row) { @@ -317,7 +313,6 @@ } else { this.saveCase(row); } - }, showInput(row) { // row.type = "create"; diff --git a/frontend/src/business/components/common/components/MsDrawer.vue b/frontend/src/business/components/common/components/MsDrawer.vue index fa675d267f..472c8007ad 100644 --- a/frontend/src/business/components/common/components/MsDrawer.vue +++ b/frontend/src/business/components/common/components/MsDrawer.vue @@ -8,8 +8,7 @@
- - +
@@ -23,9 +22,10 @@ import MsRight2LeftDragBar from "./dragbar/MsRight2LeftDragBar"; import MsLeft2RightDragBar from "./dragbar/MsLeft2RightDragBar"; import MsBottom2TopDragBar from "./dragbar/MsBottom2TopDragBar"; + import MsFullScreenButton from "@/business/components/common/components/MsFullScreenButton"; export default { name: "MsDrawer", - components: {MsBottom2TopDragBar, MsLeft2RightDragBar, MsRight2LeftDragBar}, + components: {MsFullScreenButton, MsBottom2TopDragBar, MsLeft2RightDragBar, MsRight2LeftDragBar}, data() { return { x: 0, @@ -74,6 +74,15 @@ mounted() { this.init(); }, + watch: { + isFullScreen() { + if (this.isFullScreen) { + this.fullScreen() + } else { + this.unFullScreen(); + } + } + }, methods: { init() { // todo 其他方向待优化 @@ -123,12 +132,10 @@ this.originalH = this.h; this.w = document.body.clientWidth; this.h = document.body.clientHeight; - this.isFullScreen = true; }, unFullScreen() { this.w = this.originalW; this.h = this.originalH; - this.isFullScreen = false; }, close() { this.$emit('close') @@ -206,18 +213,10 @@ color: red; } - .alt-ico { + /deep/ .alt-ico { position: absolute; - font-size: 15px; right: 40px; top: 15px; - color: #8c939d; } - .alt-ico:hover { - color: black; - font-size: 18px; - } - - diff --git a/frontend/src/business/components/common/components/MsFullScreenButton.vue b/frontend/src/business/components/common/components/MsFullScreenButton.vue new file mode 100644 index 0000000000..44ddc031cb --- /dev/null +++ b/frontend/src/business/components/common/components/MsFullScreenButton.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/frontend/src/business/components/common/components/MsModuleMinder.vue b/frontend/src/business/components/common/components/MsModuleMinder.vue index 9f879a88fc..ac8df743b5 100644 --- a/frontend/src/business/components/common/components/MsModuleMinder.vue +++ b/frontend/src/business/components/common/components/MsModuleMinder.vue @@ -1,10 +1,10 @@ - + {{ $t("project.create") }} diff --git a/frontend/src/business/components/performance/test/components/PerformanceAdvancedConfig.vue b/frontend/src/business/components/performance/test/components/PerformanceAdvancedConfig.vue index fcacb7434e..388f7a2047 100644 --- a/frontend/src/business/components/performance/test/components/PerformanceAdvancedConfig.vue +++ b/frontend/src/business/components/performance/test/components/PerformanceAdvancedConfig.vue @@ -159,7 +159,7 @@ export default { data() { return { timeout: 60000, - responseTimeout: null, + responseTimeout: 60000, statusCode: [], domains: [], params: [], diff --git a/frontend/src/business/components/performance/test/components/PerformancePressureConfig.vue b/frontend/src/business/components/performance/test/components/PerformancePressureConfig.vue index b4c4317915..ee4f21d433 100644 --- a/frontend/src/business/components/performance/test/components/PerformancePressureConfig.vue +++ b/frontend/src/business/components/performance/test/components/PerformancePressureConfig.vue @@ -42,12 +42,11 @@
- diff --git a/frontend/src/business/components/track/case/TestCase.vue b/frontend/src/business/components/track/case/TestCase.vue index f3bae0ef40..5dd3b0690f 100644 --- a/frontend/src/business/components/track/case/TestCase.vue +++ b/frontend/src/business/components/track/case/TestCase.vue @@ -8,6 +8,7 @@ @setTreeNodes="setTreeNodes" @exportTestCase="exportTestCase" @saveAsEdit="editTestCase" + @refreshAll="refreshAll" :type="'edit'" ref="nodeTree" /> diff --git a/frontend/src/business/components/track/common/TestCaseNodeTree.vue b/frontend/src/business/components/track/common/TestCaseNodeTree.vue index ed31d2c7df..37dfbfb333 100644 --- a/frontend/src/business/components/track/common/TestCaseNodeTree.vue +++ b/frontend/src/business/components/track/common/TestCaseNodeTree.vue @@ -101,7 +101,6 @@ export default { this.$emit("refreshTable"); }, refreshAll() { - this.selectRows.clear(); this.$emit('refreshAll'); }, handleCommand(e) { diff --git a/frontend/src/business/components/track/home/components/CaseCountCard.vue b/frontend/src/business/components/track/home/components/CaseCountCard.vue index fe96b3d429..fcac031ba3 100644 --- a/frontend/src/business/components/track/home/components/CaseCountCard.vue +++ b/frontend/src/business/components/track/home/components/CaseCountCard.vue @@ -94,8 +94,8 @@ 未通过 {{"\xa0\xa0"}} - - {{trackCountData.passCount}} + + {{trackCountData.unPassCount}} @@ -103,8 +103,8 @@ 已通过 {{"\xa0\xa0"}} - - {{trackCountData.unPassCount}} + + {{trackCountData.passCount}} diff --git a/frontend/src/business/components/track/home/components/ReviewList.vue b/frontend/src/business/components/track/home/components/ReviewList.vue index b46bb93d01..3bfe162347 100644 --- a/frontend/src/business/components/track/home/components/ReviewList.vue +++ b/frontend/src/business/components/track/home/components/ReviewList.vue @@ -2,7 +2,7 @@
- 遗留缺陷统计 + 用例评审 diff --git a/frontend/src/business/components/track/plan/components/TestPlanList.vue b/frontend/src/business/components/track/plan/components/TestPlanList.vue index eae5fdf3bc..2447032590 100644 --- a/frontend/src/business/components/track/plan/components/TestPlanList.vue +++ b/frontend/src/business/components/track/plan/components/TestPlanList.vue @@ -310,8 +310,6 @@ export default { } item.passRate=item.passRate+'%' }) - console.log(this.tableData) - }); }, copyData(status) { diff --git a/frontend/src/business/components/track/plan/view/TestPlanView.vue b/frontend/src/business/components/track/plan/view/TestPlanView.vue index adece5b6d9..570ad8f804 100644 --- a/frontend/src/business/components/track/plan/view/TestPlanView.vue +++ b/frontend/src/business/components/track/plan/view/TestPlanView.vue @@ -10,7 +10,7 @@ @dataChange="changePlan"/>