From 29e2bd8edad226bb8f9addc717f841ee0d342871 Mon Sep 17 00:00:00 2001 From: coderfengyun Date: Thu, 18 Sep 2014 14:23:40 +0800 Subject: [PATCH] adding the ifNode to Scenario adding the ifNode to Scenario --- .../org/bench4q/agent/api/TestController.java | 4 +- .../org/bench4q/agent/scenario/Batch.java | 2 +- .../org/bench4q/agent/scenario/Scenario.java | 2 +- .../bench4q/agent/scenario/engine/VUser.java | 2 +- .../scenario/instruction/GotoInstruction.java | 5 + .../scenario/instruction/Instruction.java | 5 + .../scenario/instruction/TestInstruction.java | 7 ++ .../bench4q/agent/scenario/node/Behavior.java | 116 ++++++++++++++++++ .../agent/scenario/node/ConditionNode.java | 5 + .../scenario/node/ConditionedBehavior.java | 20 +++ .../agent/scenario/node/ControlBehavior.java | 24 ++++ .../agent/scenario/node/IfBehavior.java | 13 ++ .../agent/scenario/node/TimerBehavior.java | 23 ++++ .../scenario/node/TransactionBehavior.java | 23 ++++ .../agent/scenario/node/UserBehavior.java | 25 ++++ .../agent/test/scenario/Test_Scenario.java | 2 +- .../agent/test/scenario/Test_VUser.java | 2 +- 17 files changed, 273 insertions(+), 7 deletions(-) create mode 100644 Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/instruction/GotoInstruction.java create mode 100644 Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/instruction/Instruction.java create mode 100644 Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/instruction/TestInstruction.java create mode 100644 Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/Behavior.java create mode 100644 Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/ConditionNode.java create mode 100644 Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/ConditionedBehavior.java create mode 100644 Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/ControlBehavior.java create mode 100644 Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/IfBehavior.java create mode 100644 Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/TimerBehavior.java create mode 100644 Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/TransactionBehavior.java create mode 100644 Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/UserBehavior.java diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/api/TestController.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/api/TestController.java index a2bdab4c..aaf90162 100644 --- a/Bench4Q-Agent/src/main/java/org/bench4q/agent/api/TestController.java +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/api/TestController.java @@ -7,11 +7,11 @@ import java.util.UUID; import org.apache.log4j.Logger; import org.bench4q.agent.plugin.ParameterFileCollector; import org.bench4q.agent.scenario.Scenario; -import org.bench4q.agent.scenario.behavior.Behavior; -import org.bench4q.agent.scenario.behavior.UserBehavior; import org.bench4q.agent.scenario.engine.ScenarioContext; import org.bench4q.agent.scenario.engine.ScenarioEngine; import org.bench4q.agent.scenario.engine.Schedule; +import org.bench4q.agent.scenario.node.Behavior; +import org.bench4q.agent.scenario.node.UserBehavior; import org.bench4q.share.helper.MarshalHelper; import org.bench4q.share.models.agent.CleanTestResultModel; import org.bench4q.share.models.agent.RunScenarioModel; diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/Batch.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/Batch.java index f05a3a2f..2af555cb 100644 --- a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/Batch.java +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/Batch.java @@ -1,6 +1,6 @@ package org.bench4q.agent.scenario; -import org.bench4q.agent.scenario.behavior.Behavior; +import org.bench4q.agent.scenario.node.Behavior; public class Batch { private int id; diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/Scenario.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/Scenario.java index 1bc2ea1a..21a11f78 100644 --- a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/Scenario.java +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/Scenario.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import org.bench4q.agent.scenario.behavior.Behavior; +import org.bench4q.agent.scenario.node.Behavior; import org.bench4q.share.helper.MarshalHelper; import org.bench4q.share.models.agent.ParameterModel; import org.bench4q.share.models.agent.RunScenarioModel; diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/engine/VUser.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/engine/VUser.java index 7c499b99..2761e042 100644 --- a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/engine/VUser.java +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/engine/VUser.java @@ -17,8 +17,8 @@ import org.bench4q.agent.scenario.Page; import org.bench4q.agent.scenario.Parameter; import org.bench4q.agent.scenario.Scenario; import org.bench4q.agent.scenario.UsePlugin; -import org.bench4q.agent.scenario.behavior.Behavior; import org.bench4q.agent.scenario.dfa.ParamPart; +import org.bench4q.agent.scenario.node.Behavior; public class VUser implements Runnable { private ScenarioContext scenarioContext; diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/instruction/GotoInstruction.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/instruction/GotoInstruction.java new file mode 100644 index 00000000..506f62ad --- /dev/null +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/instruction/GotoInstruction.java @@ -0,0 +1,5 @@ +package org.bench4q.agent.scenario.instruction; + +public class GotoInstruction { + +} diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/instruction/Instruction.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/instruction/Instruction.java new file mode 100644 index 00000000..e42aa049 --- /dev/null +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/instruction/Instruction.java @@ -0,0 +1,5 @@ +package org.bench4q.agent.scenario.instruction; + +public interface Instruction { + +} diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/instruction/TestInstruction.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/instruction/TestInstruction.java new file mode 100644 index 00000000..3a760e04 --- /dev/null +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/instruction/TestInstruction.java @@ -0,0 +1,7 @@ +package org.bench4q.agent.scenario.instruction; + +public class TestInstruction implements Instruction { + + public TestInstruction(String pluginName, String behaviorName) { + } +} diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/Behavior.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/Behavior.java new file mode 100644 index 00000000..190b0611 --- /dev/null +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/Behavior.java @@ -0,0 +1,116 @@ +package org.bench4q.agent.scenario.node; + +import org.bench4q.agent.datacollector.DataCollector; +import org.bench4q.agent.scenario.Parameter; +import org.bench4q.share.models.agent.ParameterModel; +import org.bench4q.share.models.agent.scriptrecord.BehaviorModel; +import org.bench4q.share.models.agent.statistics.BehaviorBriefModel; + +/** + * + * @author coderfengyun + * + */ +public abstract class Behavior { + private static final String CONTROL_BEHAVIOR = "CONTROLBEHAVIOR"; + private static final String USER_BEHAVIOR = "USERBEHAVIOR"; + private static final String TIMER_BEHAVIOR = "TIMERBEHAVIOR"; + private static final String TEST_BEHAVIOR = "TESTBEHAVIOR"; + + private int id; + private String use; + private String name; + private Parameter[] parameters; + + protected Behavior() { + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUse() { + return use; + } + + public void setUse(String use) { + this.use = use; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Parameter[] getParameters() { + return parameters; + } + + public void setParameters(Parameter[] parameters) { + this.parameters = parameters; + } + + public abstract boolean shouldBeCount(); + + public abstract BehaviorBriefModel getBehaviorBriefResult( + DataCollector dataStatistics); + + public String getSpecificParamValue(String paramName) { + for (Parameter parameter : this.getParameters()) { + if (parameter.getKey().equalsIgnoreCase(paramName)) { + return parameter.getValue(); + } + } + return ""; + } + + /** + * No matter which one to inherit from this class, it should call + * baseCompile in its own compile function + */ + + public abstract void compile(); + + protected void baseCompile() { + for (Parameter parameter : this.getParameters()) { + parameter.compileToGenerateParts(); + } + } + + public static Behavior buildWith(BehaviorModel behaviorModel) { + Behavior behavior = null; + if (behaviorModel.getType().equalsIgnoreCase(TIMER_BEHAVIOR)) { + behavior = new TimerBehavior(); + } else if (behaviorModel.getType().equalsIgnoreCase(USER_BEHAVIOR)) { + behavior = new UserBehavior(); + } else if (behaviorModel.getType().equalsIgnoreCase(CONTROL_BEHAVIOR)) { + behavior = new ControlBehavior(); + } else if (behaviorModel.getType().equalsIgnoreCase(TEST_BEHAVIOR)) { + // TODO: refactor this + behavior = new IfBehavior(); + } else { + throw new IllegalArgumentException( + "The input BehaviorModel's type is not proper"); + } + behavior.setName(behaviorModel.getName()); + behavior.setUse(behaviorModel.getUse()); + behavior.setId(behaviorModel.getId()); + behavior.setParameters(new Parameter[behaviorModel.getParameters() + .size()]); + + for (int k = 0; k < behaviorModel.getParameters().size(); k++) { + ParameterModel parameterModel = behaviorModel.getParameters() + .get(k); + behavior.getParameters()[k] = new Parameter( + parameterModel.getKey(), parameterModel.getValue()); + } + return behavior; + } +} diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/ConditionNode.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/ConditionNode.java new file mode 100644 index 00000000..d784b3cc --- /dev/null +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/ConditionNode.java @@ -0,0 +1,5 @@ +package org.bench4q.agent.scenario.node; + +public class ConditionNode { + +} diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/ConditionedBehavior.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/ConditionedBehavior.java new file mode 100644 index 00000000..a06b46f2 --- /dev/null +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/ConditionedBehavior.java @@ -0,0 +1,20 @@ +package org.bench4q.agent.scenario.node; + +import org.bench4q.agent.datacollector.DataCollector; +import org.bench4q.share.models.agent.statistics.BehaviorBriefModel; + +public abstract class ConditionedBehavior extends Behavior { + protected ConditionNode condition; + + @Override + public boolean shouldBeCount() { + return false; + } + + @Override + public BehaviorBriefModel getBehaviorBriefResult( + DataCollector dataStatistics) { + return null; + } + +} diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/ControlBehavior.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/ControlBehavior.java new file mode 100644 index 00000000..8fe881ee --- /dev/null +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/ControlBehavior.java @@ -0,0 +1,24 @@ +package org.bench4q.agent.scenario.node; + +import org.bench4q.agent.datacollector.DataCollector; +import org.bench4q.share.models.agent.statistics.BehaviorBriefModel; + +public class ControlBehavior extends Behavior { + + @Override + public boolean shouldBeCount() { + return false; + } + + @Override + public BehaviorBriefModel getBehaviorBriefResult( + DataCollector dataStatistics) { + return null; + } + + @Override + public void compile() { + this.baseCompile(); + } + +} diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/IfBehavior.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/IfBehavior.java new file mode 100644 index 00000000..4e960cc9 --- /dev/null +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/IfBehavior.java @@ -0,0 +1,13 @@ +package org.bench4q.agent.scenario.node; + +import java.util.List; + +public class IfBehavior extends ConditionedBehavior { + private List thenBehaviors; + private List elseBehaviors; + + @Override + public void compile() { + this.baseCompile(); + } +} diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/TimerBehavior.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/TimerBehavior.java new file mode 100644 index 00000000..fc222707 --- /dev/null +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/TimerBehavior.java @@ -0,0 +1,23 @@ +package org.bench4q.agent.scenario.node; + +import org.bench4q.agent.datacollector.DataCollector; +import org.bench4q.share.models.agent.statistics.BehaviorBriefModel; + +public class TimerBehavior extends Behavior { + @Override + public void compile() { + this.baseCompile(); + } + + @Override + public boolean shouldBeCount() { + return false; + } + + @Override + public BehaviorBriefModel getBehaviorBriefResult( + DataCollector dataStatistics) { + return null; + } + +} diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/TransactionBehavior.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/TransactionBehavior.java new file mode 100644 index 00000000..66e004a2 --- /dev/null +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/TransactionBehavior.java @@ -0,0 +1,23 @@ +package org.bench4q.agent.scenario.node; + +import org.bench4q.agent.datacollector.DataCollector; +import org.bench4q.share.models.agent.statistics.BehaviorBriefModel; + +public class TransactionBehavior extends Behavior { + @Override + public void compile() { + this.baseCompile(); + } + + @Override + public boolean shouldBeCount() { + return true; + } + + @Override + public BehaviorBriefModel getBehaviorBriefResult( + DataCollector dataStatistics) { + return null; + } + +} diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/UserBehavior.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/UserBehavior.java new file mode 100644 index 00000000..7bf4ac7b --- /dev/null +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/node/UserBehavior.java @@ -0,0 +1,25 @@ +package org.bench4q.agent.scenario.node; + +import org.bench4q.agent.datacollector.DataCollector; +import org.bench4q.share.models.agent.statistics.BehaviorBriefModel; + +public class UserBehavior extends Behavior { + + @Override + public void compile() { + this.baseCompile(); + } + + @Override + public boolean shouldBeCount() { + return true; + } + + @Override + public BehaviorBriefModel getBehaviorBriefResult( + DataCollector dataStatistics) { + return (BehaviorBriefModel) dataStatistics + .getBehaviorBriefStatistics(this.getId()); + } + +} diff --git a/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/scenario/Test_Scenario.java b/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/scenario/Test_Scenario.java index 15bb4cdd..e20a28e3 100644 --- a/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/scenario/Test_Scenario.java +++ b/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/scenario/Test_Scenario.java @@ -13,9 +13,9 @@ import java.util.UUID; import org.apache.commons.io.FileUtils; import org.bench4q.agent.scenario.Parameter; import org.bench4q.agent.scenario.Scenario; -import org.bench4q.agent.scenario.behavior.Behavior; import org.bench4q.agent.scenario.dfa.ParamPart; import org.bench4q.agent.scenario.dfa.ParamPart.ParamPartType; +import org.bench4q.agent.scenario.node.Behavior; import org.bench4q.agent.test.TestBase; import org.bench4q.share.helper.MarshalHelper; import org.bench4q.share.helper.TestHelper; diff --git a/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/scenario/Test_VUser.java b/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/scenario/Test_VUser.java index 5dbb124a..9da341f5 100644 --- a/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/scenario/Test_VUser.java +++ b/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/scenario/Test_VUser.java @@ -9,8 +9,8 @@ import static org.junit.Assert.*; import org.bench4q.agent.plugin.basic.csvprovider.CsvProvider; import org.bench4q.agent.scenario.Scenario; -import org.bench4q.agent.scenario.behavior.Behavior; import org.bench4q.agent.scenario.engine.VUser; +import org.bench4q.agent.scenario.node.Behavior; import org.bench4q.agent.test.TestBase; import org.bench4q.share.helper.TestHelper; import org.bench4q.share.models.agent.ParameterModel;