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 20deb68707..c39b108766 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 @@ -8,6 +8,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import io.metersphere.api.dto.EnvironmentType; +import io.metersphere.api.dto.definition.request.controller.MsCriticalSectionController; import io.metersphere.api.dto.definition.request.variable.ScenarioVariable; import io.metersphere.api.dto.mockconfig.MockConfigStaticData; import io.metersphere.api.dto.scenario.KeyValue; @@ -158,7 +159,10 @@ public class MsScenario extends MsTestElement { if (CollectionUtils.isNotEmpty(this.getVariables())) { config.setVariables(this.variables); } - final HashTree scenarioTree = tree; + HashTree scenarioTree = tree; + if (config != null && !config.getExcludeScenarioIds().contains(this.getId())) { + scenarioTree = MsCriticalSectionController.createHashTree(tree, this.getName()); + } // 场景变量和环境变量 Arguments arguments = arguments(config); if (arguments != null) { diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/ParameterConfig.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/ParameterConfig.java index 4767d90913..d103389793 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/ParameterConfig.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/ParameterConfig.java @@ -67,6 +67,10 @@ public class ParameterConfig extends MsParameter { private String scenarioId; private String reportType; + /** + * 排除生成临界控制器的场景 + */ + private List excludeScenarioIds = new ArrayList<>(); private List csvFilePaths = new ArrayList<>(); diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/controller/MsCriticalSectionController.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/controller/MsCriticalSectionController.java index 92a98afc5e..0dd1596585 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/controller/MsCriticalSectionController.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/controller/MsCriticalSectionController.java @@ -8,6 +8,7 @@ import org.apache.jmeter.testelement.TestElement; import org.apache.jorphan.collections.HashTree; import java.util.List; +import java.util.UUID; public class MsCriticalSectionController extends MsTestElement { @@ -18,11 +19,21 @@ public class MsCriticalSectionController extends MsTestElement { public static HashTree createHashTree(HashTree tree, String name) { CriticalSectionController criticalSectionController = new CriticalSectionController(); - criticalSectionController.setName(StringUtils.isNotEmpty(name) ? "Csc_" + name : "Scenario Critical Section Controller"); - criticalSectionController.setLockName("global_lock"); + criticalSectionController.setName(StringUtils.isNotEmpty(name) ? "Csc_" + name + : "Scenario Critical Section Controller"); + criticalSectionController.setLockName("global_lock_" + getUUID(8)); criticalSectionController.setEnabled(true); criticalSectionController.setProperty(TestElement.TEST_CLASS, CriticalSectionController.class.getName()); criticalSectionController.setProperty(TestElement.GUI_CLASS, "CriticalSectionControllerGui"); return tree.add(criticalSectionController); } + + public static String getUUID(int len) { + String uuid = UUID.randomUUID().toString(); + StringBuffer str = new StringBuffer(); + for (int i = 0; i < len; i++) { + str.append(uuid.charAt(i)); + } + return str.toString(); + } } 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 ef270b0f74..8e80dc8933 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java @@ -871,6 +871,7 @@ public class ApiAutomationService { testPlan.setHashTree(new LinkedList<>()); ParameterConfig config = new ParameterConfig(); config.setOperating(true); + config.getExcludeScenarioIds().add(apiScenario.getId()); try { MsScenario scenario = JSONObject.parseObject(apiScenario.getScenarioDefinition(), MsScenario.class);