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 3ed8eeb4..c9f76cd4 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 @@ -196,7 +196,7 @@ public class TestController { @PathVariable int pageId) { ScenarioContext context = this.getScenarioEngine().getRunningTests() .get(runId); - if (context == null || context.isFinished()) { + if (context == null) { return null; } return (AgentPageBriefModel) context.getDataStatistics() @@ -210,7 +210,7 @@ public class TestController { List behaviorBriefModels = new ArrayList(); ScenarioContext scenarioContext = this.getScenarioEngine() .getRunningTests().get(runId); - if (scenarioContext == null || scenarioContext.isFinished()) { + if (scenarioContext == null) { return null; } for (Behavior behavior : scenarioContext.getScenario() diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/datacollector/impl/ScenarioResultCollector.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/datacollector/impl/ScenarioResultCollector.java index f58328b6..4491cd45 100644 --- a/Bench4Q-Agent/src/main/java/org/bench4q/agent/datacollector/impl/ScenarioResultCollector.java +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/datacollector/impl/ScenarioResultCollector.java @@ -6,6 +6,7 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import org.bench4q.agent.scenario.engine.BehaviorResult; import org.bench4q.agent.scenario.engine.PageResult; @@ -114,7 +115,7 @@ public class ScenarioResultCollector extends AbstractDataCollector { reset(); this.setCumulativeFailCount(0); this.setCumulativeSucessfulCount(0); - this.setDetailMap(new HashMap>()); + this.setDetailMap(new ConcurrentHashMap>()); } private void reset() { diff --git a/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/datastatistics/DetailStatisticsTest.java b/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/datastatistics/DetailStatisticsTest.java index f5bebd3d..f892c05d 100644 --- a/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/datastatistics/DetailStatisticsTest.java +++ b/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/datastatistics/DetailStatisticsTest.java @@ -158,4 +158,9 @@ public class DetailStatisticsTest { buildCodeResult(0, 1, Long.MIN_VALUE, Long.MAX_VALUE, 0)); return retMap; } + + @Test + public void test_addSomeSameUrlResult() { + + } } diff --git a/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/datastatistics/ScenarioStatisticsTest.java b/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/datastatistics/ScenarioStatisticsTest.java index b24923d4..8b233eb9 100644 --- a/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/datastatistics/ScenarioStatisticsTest.java +++ b/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/datastatistics/ScenarioStatisticsTest.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.UUID; import org.bench4q.agent.datacollector.DataCollector; +import org.bench4q.agent.datacollector.impl.BehaviorStatusCodeResult; import org.bench4q.agent.datacollector.impl.ScenarioResultCollector; import org.bench4q.agent.scenario.engine.BehaviorResult; import org.bench4q.agent.scenario.engine.PageResult; @@ -57,7 +58,8 @@ public class ScenarioStatisticsTest { @Test public void addOneBriefTest() throws InterruptedException { - for (BehaviorResult behaviorResult : makeBehaviorListWhoseBehaviorIdIsOne(1)) { + List generatedBehaviorResults = makeBehaviorListWhoseBehaviorIdIsOne(1); + for (BehaviorResult behaviorResult : generatedBehaviorResults) { this.getDataStatistics().add(behaviorResult); } @@ -68,11 +70,29 @@ public class ScenarioStatisticsTest { modelExpect.setTimeFrame(model.getTimeFrame()); makeUpStatusModelForOneBehavior(modelExpect); assertTrue(model.equals(modelExpect)); + judgeBehaviorTotalAndScenarioTotal(generatedBehaviorResults, model); + } + + private void judgeBehaviorTotalAndScenarioTotal( + List generatedBehaviorResults, + AgentBriefStatusModel model) { + int successCount = 0; + for (BehaviorResult unit : generatedBehaviorResults) { + BehaviorStatusCodeResult behaviorStatusCodeResult = this + .getDataStatistics() + .getBehaviorBriefStatistics(unit.getBehaviorId()).get(200); + if (behaviorStatusCodeResult == null) { + continue; + } + successCount += behaviorStatusCodeResult.count; + } + assertEquals(successCount, model.getSuccessCountFromBegin()); } @Test public void addTwoBriefTest() throws InterruptedException { - for (BehaviorResult behaviorResult : makeBehaviorListWhoseBehaviorIdIsOne(2)) { + List behaviorResults = makeBehaviorListWhoseBehaviorIdIsOne(2); + for (BehaviorResult behaviorResult : behaviorResults) { this.getDataStatistics().add(behaviorResult); } Thread.sleep(100); @@ -81,6 +101,7 @@ public class ScenarioStatisticsTest { AgentBriefStatusModel modelExpect = makeUpStatusModelForTwoBehavior(model .getTimeFrame()); assertTrue(model.equals(modelExpect)); + judgeBehaviorTotalAndScenarioTotal(behaviorResults, model); } public static AgentBriefStatusModel makeUpStatusModelForTwoBehavior( @@ -141,7 +162,7 @@ public class ScenarioStatisticsTest { for (int i = 0; i < count; i++) { int statusCode = i % 2 == 0 ? 200 : 400; behaviorResults.add(buildBehaviorResult(200 + 10 * i, i % 2 == 0, - statusCode, 1, 200 + 10 * i)); + statusCode, i, 200 + 10 * i)); } return behaviorResults; } diff --git a/Bench4Q-Master/src/main/java/org/bench4q/master/domain/valueobject/datastatistics/PagesBriefStatistics.java b/Bench4Q-Master/src/main/java/org/bench4q/master/domain/valueobject/datastatistics/PagesBriefStatistics.java index a24118f0..891eea2c 100644 --- a/Bench4Q-Master/src/main/java/org/bench4q/master/domain/valueobject/datastatistics/PagesBriefStatistics.java +++ b/Bench4Q-Master/src/main/java/org/bench4q/master/domain/valueobject/datastatistics/PagesBriefStatistics.java @@ -1,7 +1,7 @@ package org.bench4q.master.domain.valueobject.datastatistics; -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.bench4q.share.models.agent.statistics.AgentPageBriefModel; import org.bench4q.share.models.agent.statistics.AgentPagesBriefModel; @@ -21,7 +21,7 @@ public class PagesBriefStatistics extends ScriptStatistics { } public PagesBriefStatistics() { - this.setMap(new HashMap()); + this.setMap(new ConcurrentHashMap()); } public void add(DataStatisticsModel dataUnit) { @@ -33,15 +33,14 @@ public class PagesBriefStatistics extends ScriptStatistics { private void add(AgentPagesBriefModel agentPagesBriefModel) { for (AgentPageBriefModel unit : agentPagesBriefModel .getPageBriefModels()) { - this.getValueFromMap(unit.getPageId()).add(unit); + int key = unit.getPageId(); + if (!this.getMap().containsKey(key)) { + guardMapKeyExists(key); + } + this.getMap().get(key).add(unit); } } - private PageBriefStatistics getValueFromMap(int key) { - guardMapKeyExists(key); - return this.getMap().get(key); - } - private synchronized void guardMapKeyExists(int key) { if (!this.getMap().containsKey(key)) { this.getMap().put(key, new PageBriefStatistics()); @@ -52,7 +51,7 @@ public class PagesBriefStatistics extends ScriptStatistics { ScriptPagesBriefModel scriptPagesBriefModel = new ScriptPagesBriefModel(); for (Integer key : this.getMap().keySet()) { scriptPagesBriefModel.getScriptPageBriefModels().add( - (ScriptPageBriefModel) this.getValueFromMap(key) + (ScriptPageBriefModel) this.getMap().get(key) .getStatistics()); } return scriptPagesBriefModel; diff --git a/Bench4Q-Master/src/main/java/org/bench4q/master/domain/valueobject/datastatistics/RunningScriptSampler.java b/Bench4Q-Master/src/main/java/org/bench4q/master/domain/valueobject/datastatistics/RunningScriptSampler.java index 85d5e56d..21f0b746 100644 --- a/Bench4Q-Master/src/main/java/org/bench4q/master/domain/valueobject/datastatistics/RunningScriptSampler.java +++ b/Bench4Q-Master/src/main/java/org/bench4q/master/domain/valueobject/datastatistics/RunningScriptSampler.java @@ -60,7 +60,6 @@ public class RunningScriptSampler { TestBriefStatusModel testBriefStatusModel = runningAgent.briefAll(); addScriptResultModelStatistics(testBriefStatusModel); } - return getScriptResultModel(); }