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;