remove the bug while using threadPool
This commit is contained in:
parent
bddf2b538e
commit
540ffeac25
|
@ -1,239 +1,244 @@
|
|||
package org.bench4q.agent.api;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Marshaller;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.bench4q.agent.datacollector.impl.BehaviorStatusCodeResult;
|
||||
import org.bench4q.agent.scenario.Scenario;
|
||||
import org.bench4q.agent.scenario.ScenarioContext;
|
||||
import org.bench4q.agent.scenario.ScenarioEngine;
|
||||
import org.bench4q.agent.scenario.behavior.Behavior;
|
||||
import org.bench4q.share.models.agent.BehaviorBriefModel;
|
||||
import org.bench4q.share.models.agent.BehaviorStatusCodeResultModel;
|
||||
import org.bench4q.share.models.agent.CleanTestResultModel;
|
||||
import org.bench4q.share.models.agent.RunScenarioModel;
|
||||
import org.bench4q.share.models.agent.RunScenarioResultModel;
|
||||
import org.bench4q.share.models.agent.StopTestModel;
|
||||
import org.bench4q.share.models.agent.statistics.AgentBriefStatusModel;
|
||||
import org.bench4q.share.models.agent.statistics.AgentBehaviorsBriefModel;
|
||||
import org.bench4q.share.models.agent.statistics.AgentPageBriefModel;
|
||||
import org.bench4q.share.models.agent.statistics.AgentPagesBriefModel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/test")
|
||||
public class TestController {
|
||||
private ScenarioEngine scenarioEngine;
|
||||
private Logger logger = Logger.getLogger(TestController.class);
|
||||
|
||||
private Logger getLogger() {
|
||||
return logger;
|
||||
}
|
||||
|
||||
private ScenarioEngine getScenarioEngine() {
|
||||
return scenarioEngine;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private void setScenarioEngine(ScenarioEngine scenarioEngine) {
|
||||
this.scenarioEngine = scenarioEngine;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/run", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public RunScenarioResultModel run(
|
||||
@RequestBody RunScenarioModel runScenarioModel)
|
||||
throws UnknownHostException {
|
||||
// Scenario scenario = extractScenario(runScenarioModel);
|
||||
Scenario scenario = Scenario.scenarioBuilder(runScenarioModel);
|
||||
UUID runId = UUID.randomUUID();
|
||||
System.out.println(runScenarioModel.getPoolSize());
|
||||
this.getLogger().info(marshalRunScenarioModel(runScenarioModel));
|
||||
this.getScenarioEngine().runScenario(runId, scenario,
|
||||
runScenarioModel.getPoolSize());
|
||||
RunScenarioResultModel runScenarioResultModel = new RunScenarioResultModel();
|
||||
runScenarioResultModel.setRunId(runId);
|
||||
return runScenarioResultModel;
|
||||
}
|
||||
|
||||
private String marshalRunScenarioModel(RunScenarioModel inModel) {
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
Marshaller marshaller;
|
||||
try {
|
||||
marshaller = JAXBContext.newInstance(RunScenarioModel.class)
|
||||
.createMarshaller();
|
||||
marshaller.marshal(inModel, outputStream);
|
||||
return outputStream.toString();
|
||||
} catch (JAXBException e) {
|
||||
return "exception in marshal";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/brief/{runId}/{behaviorId}", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public BehaviorBriefModel behaviorBrief(@PathVariable UUID runId,
|
||||
@PathVariable int behaviorId) {
|
||||
ScenarioContext scenarioContext = this.getScenarioEngine()
|
||||
.getRunningTests().get(runId);
|
||||
if (scenarioContext == null) {
|
||||
return null;
|
||||
}
|
||||
Map<Integer, BehaviorStatusCodeResult> map = scenarioContext
|
||||
.getDataStatistics().getBehaviorBriefStatistics(behaviorId);
|
||||
return buildBehaviorBrief(runId, behaviorId, "", map);
|
||||
}
|
||||
|
||||
private BehaviorBriefModel buildBehaviorBrief(UUID runId, int behaviorId,
|
||||
String behaviorUrl, Map<Integer, BehaviorStatusCodeResult> map) {
|
||||
List<BehaviorStatusCodeResultModel> detailStatusCodeResultModels = new ArrayList<BehaviorStatusCodeResultModel>();
|
||||
for (int statusCode : map.keySet()) {
|
||||
BehaviorStatusCodeResultModel behaviorStatusCodeResultModel = new BehaviorStatusCodeResultModel();
|
||||
BehaviorStatusCodeResult detailStatusCodeResult = map
|
||||
.get(statusCode);
|
||||
behaviorStatusCodeResultModel.setStatusCode(statusCode);
|
||||
behaviorStatusCodeResultModel
|
||||
.setCount(detailStatusCodeResult.count);
|
||||
behaviorStatusCodeResultModel
|
||||
.setContentLength(detailStatusCodeResult.contentLength);
|
||||
behaviorStatusCodeResultModel
|
||||
.setMinResponseTime(detailStatusCodeResult.minResponseTime);
|
||||
behaviorStatusCodeResultModel
|
||||
.setMaxResponseTime(detailStatusCodeResult.maxResponseTime);
|
||||
behaviorStatusCodeResultModel
|
||||
.setContentType(detailStatusCodeResult.contentType);
|
||||
behaviorStatusCodeResultModel
|
||||
.setTotalResponseTimeThisTime(detailStatusCodeResult.totalResponseTimeThisTime);
|
||||
detailStatusCodeResultModels.add(behaviorStatusCodeResultModel);
|
||||
}
|
||||
BehaviorBriefModel behaviorBriefModel = new BehaviorBriefModel();
|
||||
behaviorBriefModel.setBehaviorId(behaviorId);
|
||||
behaviorBriefModel
|
||||
.setDetailStatusCodeResultModels(detailStatusCodeResultModels);
|
||||
behaviorBriefModel.setBehaviorUrl(behaviorUrl);
|
||||
return behaviorBriefModel;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/pagesBrief/{runId}")
|
||||
@ResponseBody
|
||||
public AgentPagesBriefModel pagesBrief(@PathVariable UUID runId) {
|
||||
ScenarioContext context = this.getScenarioEngine().getRunningTests()
|
||||
.get(runId);
|
||||
AgentPagesBriefModel result = new AgentPagesBriefModel();
|
||||
List<AgentPageBriefModel> pageBrieves = new ArrayList<AgentPageBriefModel>();
|
||||
|
||||
if (context == null || context.isFinished()) {
|
||||
return null;
|
||||
}
|
||||
for (int i = 0; i < context.getScenario().getPages().length; i++) {
|
||||
pageBrieves.add((AgentPageBriefModel) context.getDataStatistics()
|
||||
.getPageBriefStatistics(i));
|
||||
}
|
||||
result.setPageBriefModels(pageBrieves);
|
||||
return result;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/pageBrief/{runId}/{pageId}")
|
||||
@ResponseBody
|
||||
public AgentPageBriefModel pageBrief(@PathVariable UUID runId,
|
||||
@PathVariable int pageId) {
|
||||
ScenarioContext context = this.getScenarioEngine().getRunningTests()
|
||||
.get(runId);
|
||||
if (context == null || context.isFinished()) {
|
||||
return null;
|
||||
}
|
||||
return (AgentPageBriefModel) context.getDataStatistics()
|
||||
.getPageBriefStatistics(pageId);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/behaviorsBrief/{runId}")
|
||||
@ResponseBody
|
||||
public AgentBehaviorsBriefModel behaviorsBrief(@PathVariable UUID runId) {
|
||||
AgentBehaviorsBriefModel ret = new AgentBehaviorsBriefModel();
|
||||
List<BehaviorBriefModel> behaviorBriefModels = new ArrayList<BehaviorBriefModel>();
|
||||
ScenarioContext scenarioContext = this.getScenarioEngine()
|
||||
.getRunningTests().get(runId);
|
||||
if (scenarioContext == null || scenarioContext.isFinished()) {
|
||||
return null;
|
||||
}
|
||||
for (Behavior behavior : scenarioContext.getScenario()
|
||||
.getAllBehaviorsInScenario()) {
|
||||
int behaviorId = behavior.getId();
|
||||
Map<Integer, BehaviorStatusCodeResult> map = behavior
|
||||
.getBehaviorBriefResult(scenarioContext.getDataStatistics());
|
||||
if (map == null) {
|
||||
continue;
|
||||
}
|
||||
behaviorBriefModels.add(buildBehaviorBrief(runId, behaviorId,
|
||||
behavior.getUrl(), map));
|
||||
}
|
||||
ret.setBehaviorBriefModels(behaviorBriefModels);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/brief/{runId}", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public AgentBriefStatusModel brief(@PathVariable UUID runId) {
|
||||
ScenarioContext scenarioContext = this.getScenarioEngine()
|
||||
.getRunningTests().get(runId);
|
||||
if (scenarioContext == null) {
|
||||
return null;
|
||||
}
|
||||
AgentBriefStatusModel agentStatusModel = (AgentBriefStatusModel) scenarioContext
|
||||
.getDataStatistics().getScenarioBriefStatistics();
|
||||
agentStatusModel.setvUserCount(scenarioContext.getExecutor()
|
||||
.getActiveCount());
|
||||
return agentStatusModel;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/stop/{runId}", method = { RequestMethod.GET,
|
||||
RequestMethod.POST })
|
||||
@ResponseBody
|
||||
public StopTestModel stop(@PathVariable UUID runId) {
|
||||
System.out.println("stop method");
|
||||
ScenarioContext scenarioContext = this.getScenarioEngine()
|
||||
.getRunningTests().get(runId);
|
||||
if (scenarioContext == null) {
|
||||
return null;
|
||||
}
|
||||
scenarioContext.setEndDate(new Date(System.currentTimeMillis()));
|
||||
scenarioContext.getExecutor().shutdownNow();
|
||||
scenarioContext.setFinished(true);
|
||||
StopTestModel stopTestModel = new StopTestModel();
|
||||
stopTestModel.setSuccess(true);
|
||||
clean(runId);
|
||||
return stopTestModel;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/clean/{runId}", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public CleanTestResultModel clean(@PathVariable UUID runId) {
|
||||
ScenarioContext scenarioContext = this.getScenarioEngine()
|
||||
.getRunningTests().get(runId);
|
||||
if (scenarioContext == null) {
|
||||
return null;
|
||||
}
|
||||
scenarioContext.getExecutor().shutdownNow();
|
||||
this.getScenarioEngine().getRunningTests().remove(runId);
|
||||
System.gc();
|
||||
CleanTestResultModel cleanTestResultModel = new CleanTestResultModel();
|
||||
cleanTestResultModel.setSuccess(true);
|
||||
return cleanTestResultModel;
|
||||
}
|
||||
}
|
||||
package org.bench4q.agent.api;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Marshaller;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.bench4q.agent.datacollector.impl.BehaviorStatusCodeResult;
|
||||
import org.bench4q.agent.scenario.Scenario;
|
||||
import org.bench4q.agent.scenario.ScenarioContext;
|
||||
import org.bench4q.agent.scenario.ScenarioEngine;
|
||||
import org.bench4q.agent.scenario.behavior.Behavior;
|
||||
import org.bench4q.share.models.agent.BehaviorBriefModel;
|
||||
import org.bench4q.share.models.agent.BehaviorStatusCodeResultModel;
|
||||
import org.bench4q.share.models.agent.CleanTestResultModel;
|
||||
import org.bench4q.share.models.agent.RunScenarioModel;
|
||||
import org.bench4q.share.models.agent.RunScenarioResultModel;
|
||||
import org.bench4q.share.models.agent.StopTestModel;
|
||||
import org.bench4q.share.models.agent.statistics.AgentBriefStatusModel;
|
||||
import org.bench4q.share.models.agent.statistics.AgentBehaviorsBriefModel;
|
||||
import org.bench4q.share.models.agent.statistics.AgentPageBriefModel;
|
||||
import org.bench4q.share.models.agent.statistics.AgentPagesBriefModel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/test")
|
||||
public class TestController {
|
||||
private ScenarioEngine scenarioEngine;
|
||||
private Logger logger = Logger.getLogger(TestController.class);
|
||||
|
||||
private Logger getLogger() {
|
||||
return logger;
|
||||
}
|
||||
|
||||
private ScenarioEngine getScenarioEngine() {
|
||||
return scenarioEngine;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private void setScenarioEngine(ScenarioEngine scenarioEngine) {
|
||||
this.scenarioEngine = scenarioEngine;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/run", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public RunScenarioResultModel run(
|
||||
@RequestBody RunScenarioModel runScenarioModel)
|
||||
throws UnknownHostException {
|
||||
// Scenario scenario = extractScenario(runScenarioModel);
|
||||
Scenario scenario = Scenario.scenarioBuilder(runScenarioModel);
|
||||
UUID runId = UUID.randomUUID();
|
||||
System.out.println(runScenarioModel.getPoolSize());
|
||||
this.getLogger().info(marshalRunScenarioModel(runScenarioModel));
|
||||
this.getScenarioEngine().runScenario(runId, scenario,
|
||||
runScenarioModel.getPoolSize());
|
||||
RunScenarioResultModel runScenarioResultModel = new RunScenarioResultModel();
|
||||
runScenarioResultModel.setRunId(runId);
|
||||
return runScenarioResultModel;
|
||||
}
|
||||
|
||||
private String marshalRunScenarioModel(RunScenarioModel inModel) {
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
Marshaller marshaller;
|
||||
try {
|
||||
marshaller = JAXBContext.newInstance(RunScenarioModel.class)
|
||||
.createMarshaller();
|
||||
marshaller.marshal(inModel, outputStream);
|
||||
return outputStream.toString();
|
||||
} catch (JAXBException e) {
|
||||
return "exception in marshal";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/brief/{runId}/{behaviorId}", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public BehaviorBriefModel behaviorBrief(@PathVariable UUID runId,
|
||||
@PathVariable int behaviorId) {
|
||||
ScenarioContext scenarioContext = this.getScenarioEngine()
|
||||
.getRunningTests().get(runId);
|
||||
if (scenarioContext == null) {
|
||||
return null;
|
||||
}
|
||||
Map<Integer, BehaviorStatusCodeResult> map = scenarioContext
|
||||
.getDataStatistics().getBehaviorBriefStatistics(behaviorId);
|
||||
return buildBehaviorBrief(runId, behaviorId, "", map);
|
||||
}
|
||||
|
||||
private BehaviorBriefModel buildBehaviorBrief(UUID runId, int behaviorId,
|
||||
String behaviorUrl, Map<Integer, BehaviorStatusCodeResult> map) {
|
||||
List<BehaviorStatusCodeResultModel> detailStatusCodeResultModels = new ArrayList<BehaviorStatusCodeResultModel>();
|
||||
for (int statusCode : map.keySet()) {
|
||||
BehaviorStatusCodeResultModel behaviorStatusCodeResultModel = new BehaviorStatusCodeResultModel();
|
||||
BehaviorStatusCodeResult detailStatusCodeResult = map
|
||||
.get(statusCode);
|
||||
behaviorStatusCodeResultModel.setStatusCode(statusCode);
|
||||
behaviorStatusCodeResultModel
|
||||
.setCount(detailStatusCodeResult.count);
|
||||
behaviorStatusCodeResultModel
|
||||
.setContentLength(detailStatusCodeResult.contentLength);
|
||||
behaviorStatusCodeResultModel
|
||||
.setMinResponseTime(detailStatusCodeResult.minResponseTime);
|
||||
behaviorStatusCodeResultModel
|
||||
.setMaxResponseTime(detailStatusCodeResult.maxResponseTime);
|
||||
behaviorStatusCodeResultModel
|
||||
.setContentType(detailStatusCodeResult.contentType);
|
||||
behaviorStatusCodeResultModel
|
||||
.setTotalResponseTimeThisTime(detailStatusCodeResult.totalResponseTimeThisTime);
|
||||
detailStatusCodeResultModels.add(behaviorStatusCodeResultModel);
|
||||
}
|
||||
BehaviorBriefModel behaviorBriefModel = new BehaviorBriefModel();
|
||||
behaviorBriefModel.setBehaviorId(behaviorId);
|
||||
behaviorBriefModel
|
||||
.setDetailStatusCodeResultModels(detailStatusCodeResultModels);
|
||||
behaviorBriefModel.setBehaviorUrl(behaviorUrl);
|
||||
return behaviorBriefModel;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/pagesBrief/{runId}")
|
||||
@ResponseBody
|
||||
public AgentPagesBriefModel pagesBrief(@PathVariable UUID runId) {
|
||||
ScenarioContext context = this.getScenarioEngine().getRunningTests()
|
||||
.get(runId);
|
||||
AgentPagesBriefModel result = new AgentPagesBriefModel();
|
||||
List<AgentPageBriefModel> pageBrieves = new ArrayList<AgentPageBriefModel>();
|
||||
|
||||
if (context == null || context.isFinished()) {
|
||||
return null;
|
||||
}
|
||||
for (int i = 0; i < context.getScenario().getPages().length; i++) {
|
||||
pageBrieves.add((AgentPageBriefModel) context.getDataStatistics()
|
||||
.getPageBriefStatistics(i));
|
||||
}
|
||||
result.setPageBriefModels(pageBrieves);
|
||||
return result;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/pageBrief/{runId}/{pageId}")
|
||||
@ResponseBody
|
||||
public AgentPageBriefModel pageBrief(@PathVariable UUID runId,
|
||||
@PathVariable int pageId) {
|
||||
ScenarioContext context = this.getScenarioEngine().getRunningTests()
|
||||
.get(runId);
|
||||
if (context == null || context.isFinished()) {
|
||||
return null;
|
||||
}
|
||||
return (AgentPageBriefModel) context.getDataStatistics()
|
||||
.getPageBriefStatistics(pageId);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/behaviorsBrief/{runId}")
|
||||
@ResponseBody
|
||||
public AgentBehaviorsBriefModel behaviorsBrief(@PathVariable UUID runId) {
|
||||
AgentBehaviorsBriefModel ret = new AgentBehaviorsBriefModel();
|
||||
List<BehaviorBriefModel> behaviorBriefModels = new ArrayList<BehaviorBriefModel>();
|
||||
ScenarioContext scenarioContext = this.getScenarioEngine()
|
||||
.getRunningTests().get(runId);
|
||||
if (scenarioContext == null || scenarioContext.isFinished()) {
|
||||
return null;
|
||||
}
|
||||
for (Behavior behavior : scenarioContext.getScenario()
|
||||
.getAllBehaviorsInScenario()) {
|
||||
int behaviorId = behavior.getId();
|
||||
Map<Integer, BehaviorStatusCodeResult> map = behavior
|
||||
.getBehaviorBriefResult(scenarioContext.getDataStatistics());
|
||||
if (map == null) {
|
||||
continue;
|
||||
}
|
||||
behaviorBriefModels.add(buildBehaviorBrief(runId, behaviorId,
|
||||
behavior.getUrl(), map));
|
||||
}
|
||||
ret.setBehaviorBriefModels(behaviorBriefModels);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/brief/{runId}", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public AgentBriefStatusModel brief(@PathVariable UUID runId) {
|
||||
ScenarioContext scenarioContext = this.getScenarioEngine()
|
||||
.getRunningTests().get(runId);
|
||||
if (scenarioContext == null) {
|
||||
return null;
|
||||
}
|
||||
AgentBriefStatusModel agentStatusModel = (AgentBriefStatusModel) scenarioContext
|
||||
.getDataStatistics().getScenarioBriefStatistics();
|
||||
agentStatusModel.setvUserCount(scenarioContext.getExecutor()
|
||||
.getActiveCount());
|
||||
return agentStatusModel;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/stop/{runId}", method = { RequestMethod.GET,
|
||||
RequestMethod.POST })
|
||||
@ResponseBody
|
||||
public StopTestModel stop(@PathVariable UUID runId) {
|
||||
System.out.println("stop method");
|
||||
ScenarioContext scenarioContext = this.getScenarioEngine()
|
||||
.getRunningTests().get(runId);
|
||||
if (scenarioContext == null) {
|
||||
return null;
|
||||
}
|
||||
scenarioContext.setEndDate(new Date(System.currentTimeMillis()));
|
||||
System.out.println("when before stop, classId:"
|
||||
+ scenarioContext.getExecutor().toString());
|
||||
scenarioContext.getExecutor().shutdown();
|
||||
scenarioContext.getExecutor().shutdownNow();
|
||||
System.out.println("when after stop, classId:"
|
||||
+ scenarioContext.getExecutor().toString());
|
||||
scenarioContext.setFinished(true);
|
||||
StopTestModel stopTestModel = new StopTestModel();
|
||||
stopTestModel.setSuccess(true);
|
||||
clean(runId);
|
||||
return stopTestModel;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/clean/{runId}", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public CleanTestResultModel clean(@PathVariable UUID runId) {
|
||||
ScenarioContext scenarioContext = this.getScenarioEngine()
|
||||
.getRunningTests().get(runId);
|
||||
if (scenarioContext == null) {
|
||||
return null;
|
||||
}
|
||||
scenarioContext.getExecutor().shutdownNow();
|
||||
this.getScenarioEngine().getRunningTests().remove(runId);
|
||||
System.gc();
|
||||
CleanTestResultModel cleanTestResultModel = new CleanTestResultModel();
|
||||
cleanTestResultModel.setSuccess(true);
|
||||
return cleanTestResultModel;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,82 +1,82 @@
|
|||
package org.bench4q.agent.datacollector.impl;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import org.bench4q.agent.Main;
|
||||
import org.bench4q.agent.datacollector.interfaces.DataCollector;
|
||||
import org.bench4q.agent.helper.ApplicationContextHelper;
|
||||
import org.bench4q.agent.scenario.BehaviorResult;
|
||||
import org.bench4q.agent.storage.StorageHelper;
|
||||
import org.bench4q.share.models.agent.BehaviorResultModel;
|
||||
|
||||
public abstract class AbstractDataCollector implements DataCollector {
|
||||
protected StorageHelper storageHelper;
|
||||
|
||||
protected StorageHelper getStorageHelper() {
|
||||
return storageHelper;
|
||||
}
|
||||
|
||||
public void setStorageHelper(StorageHelper storageHelper) {
|
||||
this.storageHelper = storageHelper;
|
||||
}
|
||||
|
||||
public AbstractDataCollector() {
|
||||
mustDoWhenIniti();
|
||||
}
|
||||
|
||||
// Each sub class should call this in their constructor
|
||||
protected void mustDoWhenIniti() {
|
||||
this.setStorageHelper(ApplicationContextHelper.getContext().getBean(
|
||||
StorageHelper.class));
|
||||
}
|
||||
|
||||
public void add(final BehaviorResult behaviorResult) {
|
||||
if (!Main.IS_TO_SAVE_DETAIL) {
|
||||
return;
|
||||
}
|
||||
if (behaviorResult == null) {
|
||||
return;
|
||||
}
|
||||
Runnable runnable = new Runnable() {
|
||||
public void run() {
|
||||
storageHelper.getLocalStorage().writeFile(
|
||||
buildBehaviorResultModel(behaviorResult)
|
||||
.getModelString(),
|
||||
calculateSavePath(behaviorResult));
|
||||
}
|
||||
};
|
||||
ExecutorService executorService = Executors
|
||||
.newSingleThreadScheduledExecutor();
|
||||
executorService.execute(runnable);
|
||||
executorService.shutdown();
|
||||
}
|
||||
|
||||
private BehaviorResultModel buildBehaviorResultModel(
|
||||
BehaviorResult behaviorResult) {
|
||||
BehaviorResultModel resultModel = new BehaviorResultModel();
|
||||
resultModel.setBehaviorId(behaviorResult.getBehaviorId());
|
||||
resultModel.setBehaviorName(behaviorResult.getBehaviorName());
|
||||
resultModel.setContentLength(behaviorResult.getContentLength());
|
||||
resultModel.setContentType(behaviorResult.getContentType());
|
||||
resultModel.setEndDate(behaviorResult.getEndDate());
|
||||
resultModel.setPluginId(behaviorResult.getPluginId());
|
||||
resultModel.setPluginName(behaviorResult.getPluginName());
|
||||
resultModel.setResponseTime(behaviorResult.getResponseTime());
|
||||
resultModel.setShouldBeCountResponseTime(behaviorResult
|
||||
.isShouldBeCountResponseTime());
|
||||
resultModel.setStartDate(behaviorResult.getStartDate());
|
||||
resultModel.setStatusCode(behaviorResult.getStatusCode());
|
||||
resultModel.setSuccess(behaviorResult.isSuccess());
|
||||
return resultModel;
|
||||
}
|
||||
|
||||
protected abstract String calculateSavePath(BehaviorResult behaviorResult);
|
||||
|
||||
public abstract Object getScenarioBriefStatistics();
|
||||
|
||||
public abstract Map<Integer, BehaviorStatusCodeResult> getBehaviorBriefStatistics(
|
||||
int id);
|
||||
|
||||
}
|
||||
package org.bench4q.agent.datacollector.impl;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import org.bench4q.agent.Main;
|
||||
import org.bench4q.agent.datacollector.interfaces.DataCollector;
|
||||
import org.bench4q.agent.helper.ApplicationContextHelper;
|
||||
import org.bench4q.agent.scenario.BehaviorResult;
|
||||
import org.bench4q.agent.storage.StorageHelper;
|
||||
import org.bench4q.share.models.agent.BehaviorResultModel;
|
||||
|
||||
public abstract class AbstractDataCollector implements DataCollector {
|
||||
protected StorageHelper storageHelper;
|
||||
|
||||
protected StorageHelper getStorageHelper() {
|
||||
return storageHelper;
|
||||
}
|
||||
|
||||
public void setStorageHelper(StorageHelper storageHelper) {
|
||||
this.storageHelper = storageHelper;
|
||||
}
|
||||
|
||||
public AbstractDataCollector() {
|
||||
mustDoWhenIniti();
|
||||
}
|
||||
|
||||
// Each sub class should call this in their constructor
|
||||
protected void mustDoWhenIniti() {
|
||||
this.setStorageHelper(ApplicationContextHelper.getContext().getBean(
|
||||
StorageHelper.class));
|
||||
}
|
||||
|
||||
public void add(final BehaviorResult behaviorResult) {
|
||||
if (!Main.IS_TO_SAVE_DETAIL) {
|
||||
return;
|
||||
}
|
||||
if (behaviorResult == null) {
|
||||
return;
|
||||
}
|
||||
Runnable runnable = new Runnable() {
|
||||
public void run() {
|
||||
storageHelper.getLocalStorage().writeFile(
|
||||
buildBehaviorResultModel(behaviorResult)
|
||||
.getModelString(),
|
||||
calculateSavePath(behaviorResult));
|
||||
}
|
||||
};
|
||||
ExecutorService executorService = Executors
|
||||
.newSingleThreadScheduledExecutor();
|
||||
executorService.execute(runnable);
|
||||
executorService.shutdown();
|
||||
}
|
||||
|
||||
private BehaviorResultModel buildBehaviorResultModel(
|
||||
BehaviorResult behaviorResult) {
|
||||
BehaviorResultModel resultModel = new BehaviorResultModel();
|
||||
resultModel.setBehaviorId(behaviorResult.getBehaviorId());
|
||||
resultModel.setBehaviorName(behaviorResult.getBehaviorName());
|
||||
resultModel.setContentLength(behaviorResult.getContentLength());
|
||||
resultModel.setContentType(behaviorResult.getContentType());
|
||||
resultModel.setEndDate(behaviorResult.getEndDate());
|
||||
resultModel.setPluginId(behaviorResult.getPluginId());
|
||||
resultModel.setPluginName(behaviorResult.getPluginName());
|
||||
resultModel.setResponseTime(behaviorResult.getResponseTime());
|
||||
resultModel.setShouldBeCountResponseTime(behaviorResult
|
||||
.isShouldBeCountResponseTime());
|
||||
resultModel.setStartDate(behaviorResult.getStartDate());
|
||||
resultModel.setStatusCode(behaviorResult.getStatusCode());
|
||||
resultModel.setSuccess(behaviorResult.isSuccess());
|
||||
return resultModel;
|
||||
}
|
||||
|
||||
protected abstract String calculateSavePath(BehaviorResult behaviorResult);
|
||||
|
||||
public abstract Object getScenarioBriefStatistics();
|
||||
|
||||
public abstract Map<Integer, BehaviorStatusCodeResult> getBehaviorBriefStatistics(
|
||||
int id);
|
||||
|
||||
}
|
||||
|
|
|
@ -1,203 +1,204 @@
|
|||
package org.bench4q.agent.scenario;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.SynchronousQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.ThreadPoolExecutor.DiscardPolicy;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.bench4q.agent.datacollector.interfaces.DataCollector;
|
||||
import org.bench4q.agent.plugin.Plugin;
|
||||
import org.bench4q.agent.plugin.PluginManager;
|
||||
import org.bench4q.agent.plugin.result.HttpReturn;
|
||||
import org.bench4q.agent.plugin.result.PluginReturn;
|
||||
import org.bench4q.agent.scenario.behavior.Behavior;
|
||||
import org.bench4q.agent.storage.StorageHelper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class ScenarioEngine {
|
||||
private static final long keepAliveTime = 10;
|
||||
private PluginManager pluginManager;
|
||||
private Map<UUID, ScenarioContext> runningTests;
|
||||
private StorageHelper storageHelper;
|
||||
private Logger logger;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private Logger getLogger() {
|
||||
return logger;
|
||||
}
|
||||
|
||||
private void setLogger(Logger logger) {
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
public ScenarioEngine() {
|
||||
this.setRunningTests(new HashMap<UUID, ScenarioContext>());
|
||||
this.setLogger(Logger.getLogger(ScenarioEngine.class));
|
||||
}
|
||||
|
||||
private PluginManager getPluginManager() {
|
||||
return pluginManager;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private void setPluginManager(PluginManager pluginManager) {
|
||||
this.pluginManager = pluginManager;
|
||||
}
|
||||
|
||||
public StorageHelper getStorageHelper() {
|
||||
return storageHelper;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
public void setStorageHelper(StorageHelper storageHelper) {
|
||||
this.storageHelper = storageHelper;
|
||||
}
|
||||
|
||||
public Map<UUID, ScenarioContext> getRunningTests() {
|
||||
return runningTests;
|
||||
}
|
||||
|
||||
private void setRunningTests(Map<UUID, ScenarioContext> runningTests) {
|
||||
this.runningTests = runningTests;
|
||||
}
|
||||
|
||||
public void runScenario(UUID runId, final Scenario scenario, int poolSize) {
|
||||
try {
|
||||
final SynchronousQueue<Runnable> workQueue = new SynchronousQueue<Runnable>();
|
||||
ThreadPoolExecutor executor = new ThreadPoolExecutor(poolSize,
|
||||
poolSize, keepAliveTime, TimeUnit.MINUTES, workQueue,
|
||||
new DiscardPolicy());
|
||||
final ScenarioContext scenarioContext = ScenarioContext
|
||||
.buildScenarioContext(runId, scenario, poolSize, executor);
|
||||
this.getRunningTests().put(runId, scenarioContext);
|
||||
System.out.println(poolSize);
|
||||
executeTasks(executor, scenarioContext);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void executeTasks(final ExecutorService executorService,
|
||||
final ScenarioContext scenarioContext) {
|
||||
ExecutorService taskMaker = Executors.newSingleThreadExecutor();
|
||||
taskMaker.execute(new Runnable() {
|
||||
public void run() {
|
||||
while (true) {
|
||||
executorService.execute(new Runnable() {
|
||||
public void run() {
|
||||
doRunScenario(scenarioContext);
|
||||
logger.info("end for once!");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void doRunScenario(ScenarioContext context) {
|
||||
Map<String, Object> plugins = new HashMap<String, Object>();
|
||||
preparePlugins(context.getScenario(), plugins);
|
||||
for (int i = 0; i < context.getScenario().getPages().length; i++) {
|
||||
Page page = context.getScenario().getPages()[i];
|
||||
context.getDataStatistics().add(
|
||||
PageResult.buildPageResult(
|
||||
i,
|
||||
doRunBatchesInPage(plugins, page,
|
||||
context.getDataStatistics())));
|
||||
}
|
||||
}
|
||||
|
||||
private List<BehaviorResult> doRunBatchesInPage(
|
||||
Map<String, Object> plugins, Page page, DataCollector dataCollector) {
|
||||
List<BehaviorResult> results = new ArrayList<BehaviorResult>();
|
||||
for (Batch batch : page.getBatches()) {
|
||||
results.addAll(doRunBatch(plugins, batch, dataCollector));
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
private List<BehaviorResult> doRunBatch(Map<String, Object> plugins,
|
||||
Batch batch, DataCollector dataCollector) {
|
||||
List<BehaviorResult> results = new ArrayList<BehaviorResult>();
|
||||
for (Behavior behavior : batch.getBehaviors()) {
|
||||
Object plugin = plugins.get(behavior.getUse());
|
||||
Map<String, String> behaviorParameters = prepareBehaviorParameters(behavior);
|
||||
Date startDate = new Date(System.currentTimeMillis());
|
||||
PluginReturn pluginReturn = (PluginReturn) this.getPluginManager()
|
||||
.doBehavior(plugin, behavior.getName(), behaviorParameters);
|
||||
Date endDate = new Date(System.currentTimeMillis());
|
||||
if (!behavior.shouldBeCountResponseTime()) {
|
||||
continue;
|
||||
}
|
||||
BehaviorResult behaviorResult = buildBehaviorResult(behavior,
|
||||
plugin, startDate, pluginReturn, endDate);
|
||||
dataCollector.add(behaviorResult);
|
||||
results.add(behaviorResult);
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
private BehaviorResult buildBehaviorResult(Behavior behavior,
|
||||
Object plugin, Date startDate, PluginReturn pluginReturn,
|
||||
Date endDate) {
|
||||
BehaviorResult result = new BehaviorResult();
|
||||
result.setStartDate(startDate);
|
||||
result.setEndDate(endDate);
|
||||
result.setSuccess(pluginReturn.isSuccess());
|
||||
result.setResponseTime(endDate.getTime() - startDate.getTime());
|
||||
result.setBehaviorName(behavior.getName());
|
||||
result.setPluginId(behavior.getUse());
|
||||
result.setPluginName(plugin.getClass().getAnnotation(Plugin.class)
|
||||
.value());
|
||||
result.setShouldBeCountResponseTime(behavior
|
||||
.shouldBeCountResponseTime());
|
||||
if (pluginReturn instanceof HttpReturn) {
|
||||
HttpReturn httpReturn = (HttpReturn) pluginReturn;
|
||||
result.setBehaviorId(behavior.getId());
|
||||
for (Parameter parameter : behavior.getParameters()) {
|
||||
if (parameter.getKey().equals("url")) {
|
||||
result.setBehaviorUrl(parameter.getValue());
|
||||
}
|
||||
}
|
||||
result.setContentLength(httpReturn.getContentLength());
|
||||
result.setContentType(httpReturn.getContentType());
|
||||
result.setStatusCode(httpReturn.getStatusCode());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private Map<String, String> prepareBehaviorParameters(Behavior behavior) {
|
||||
Map<String, String> behaviorParameters = new HashMap<String, String>();
|
||||
for (Parameter parameter : behavior.getParameters()) {
|
||||
behaviorParameters.put(parameter.getKey(), parameter.getValue());
|
||||
}
|
||||
return behaviorParameters;
|
||||
}
|
||||
|
||||
private void preparePlugins(Scenario scenario, Map<String, Object> plugins) {
|
||||
for (UsePlugin usePlugin : scenario.getUsePlugins()) {
|
||||
String pluginId = usePlugin.getId();
|
||||
Class<?> pluginClass = this.getPluginManager().getPlugins()
|
||||
.get(usePlugin.getName());
|
||||
Map<String, String> initParameters = new HashMap<String, String>();
|
||||
for (Parameter parameter : usePlugin.getParameters()) {
|
||||
initParameters.put(parameter.getKey(), parameter.getValue());
|
||||
}
|
||||
Object plugin = this.getPluginManager().initializePlugin(
|
||||
pluginClass, initParameters);
|
||||
plugins.put(pluginId, plugin);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
package org.bench4q.agent.scenario;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.SynchronousQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.ThreadPoolExecutor.DiscardPolicy;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.bench4q.agent.datacollector.interfaces.DataCollector;
|
||||
import org.bench4q.agent.plugin.Plugin;
|
||||
import org.bench4q.agent.plugin.PluginManager;
|
||||
import org.bench4q.agent.plugin.result.HttpReturn;
|
||||
import org.bench4q.agent.plugin.result.PluginReturn;
|
||||
import org.bench4q.agent.scenario.behavior.Behavior;
|
||||
import org.bench4q.agent.storage.StorageHelper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class ScenarioEngine {
|
||||
private static final long keepAliveTime = 10;
|
||||
private PluginManager pluginManager;
|
||||
private Map<UUID, ScenarioContext> runningTests;
|
||||
private StorageHelper storageHelper;
|
||||
private Logger logger;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private Logger getLogger() {
|
||||
return logger;
|
||||
}
|
||||
|
||||
private void setLogger(Logger logger) {
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
public ScenarioEngine() {
|
||||
this.setRunningTests(new HashMap<UUID, ScenarioContext>());
|
||||
this.setLogger(Logger.getLogger(ScenarioEngine.class));
|
||||
}
|
||||
|
||||
private PluginManager getPluginManager() {
|
||||
return pluginManager;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private void setPluginManager(PluginManager pluginManager) {
|
||||
this.pluginManager = pluginManager;
|
||||
}
|
||||
|
||||
public StorageHelper getStorageHelper() {
|
||||
return storageHelper;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
public void setStorageHelper(StorageHelper storageHelper) {
|
||||
this.storageHelper = storageHelper;
|
||||
}
|
||||
|
||||
public Map<UUID, ScenarioContext> getRunningTests() {
|
||||
return runningTests;
|
||||
}
|
||||
|
||||
private void setRunningTests(Map<UUID, ScenarioContext> runningTests) {
|
||||
this.runningTests = runningTests;
|
||||
}
|
||||
|
||||
public void runScenario(UUID runId, final Scenario scenario, int poolSize) {
|
||||
try {
|
||||
final SynchronousQueue<Runnable> workQueue = new SynchronousQueue<Runnable>();
|
||||
ThreadPoolExecutor executor = new ThreadPoolExecutor(poolSize,
|
||||
poolSize, keepAliveTime, TimeUnit.MINUTES, workQueue,
|
||||
new DiscardPolicy());
|
||||
final ScenarioContext scenarioContext = ScenarioContext
|
||||
.buildScenarioContext(runId, scenario, poolSize, executor);
|
||||
System.out.println("when run, classId:" + executor.toString());
|
||||
this.getRunningTests().put(runId, scenarioContext);
|
||||
System.out.println(poolSize);
|
||||
executeTasks(executor, scenarioContext);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void executeTasks(final ExecutorService executor,
|
||||
final ScenarioContext scenarioContext) {
|
||||
ExecutorService taskMaker = Executors.newSingleThreadExecutor();
|
||||
taskMaker.execute(new Runnable() {
|
||||
public void run() {
|
||||
while (!scenarioContext.isFinished()) {
|
||||
executor.execute(new Runnable() {
|
||||
public void run() {
|
||||
doRunScenario(scenarioContext);
|
||||
logger.info("end for once!");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void doRunScenario(ScenarioContext context) {
|
||||
Map<String, Object> plugins = new HashMap<String, Object>();
|
||||
preparePlugins(context.getScenario(), plugins);
|
||||
for (int i = 0; i < context.getScenario().getPages().length; i++) {
|
||||
Page page = context.getScenario().getPages()[i];
|
||||
context.getDataStatistics().add(
|
||||
PageResult.buildPageResult(
|
||||
i,
|
||||
doRunBatchesInPage(plugins, page,
|
||||
context.getDataStatistics())));
|
||||
}
|
||||
}
|
||||
|
||||
private List<BehaviorResult> doRunBatchesInPage(
|
||||
Map<String, Object> plugins, Page page, DataCollector dataCollector) {
|
||||
List<BehaviorResult> results = new ArrayList<BehaviorResult>();
|
||||
for (Batch batch : page.getBatches()) {
|
||||
results.addAll(doRunBatch(plugins, batch, dataCollector));
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
private List<BehaviorResult> doRunBatch(Map<String, Object> plugins,
|
||||
Batch batch, DataCollector dataCollector) {
|
||||
List<BehaviorResult> results = new ArrayList<BehaviorResult>();
|
||||
for (Behavior behavior : batch.getBehaviors()) {
|
||||
Object plugin = plugins.get(behavior.getUse());
|
||||
Map<String, String> behaviorParameters = prepareBehaviorParameters(behavior);
|
||||
Date startDate = new Date(System.currentTimeMillis());
|
||||
PluginReturn pluginReturn = (PluginReturn) this.getPluginManager()
|
||||
.doBehavior(plugin, behavior.getName(), behaviorParameters);
|
||||
Date endDate = new Date(System.currentTimeMillis());
|
||||
if (!behavior.shouldBeCountResponseTime()) {
|
||||
continue;
|
||||
}
|
||||
BehaviorResult behaviorResult = buildBehaviorResult(behavior,
|
||||
plugin, startDate, pluginReturn, endDate);
|
||||
dataCollector.add(behaviorResult);
|
||||
results.add(behaviorResult);
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
private BehaviorResult buildBehaviorResult(Behavior behavior,
|
||||
Object plugin, Date startDate, PluginReturn pluginReturn,
|
||||
Date endDate) {
|
||||
BehaviorResult result = new BehaviorResult();
|
||||
result.setStartDate(startDate);
|
||||
result.setEndDate(endDate);
|
||||
result.setSuccess(pluginReturn.isSuccess());
|
||||
result.setResponseTime(endDate.getTime() - startDate.getTime());
|
||||
result.setBehaviorName(behavior.getName());
|
||||
result.setPluginId(behavior.getUse());
|
||||
result.setPluginName(plugin.getClass().getAnnotation(Plugin.class)
|
||||
.value());
|
||||
result.setShouldBeCountResponseTime(behavior
|
||||
.shouldBeCountResponseTime());
|
||||
if (pluginReturn instanceof HttpReturn) {
|
||||
HttpReturn httpReturn = (HttpReturn) pluginReturn;
|
||||
result.setBehaviorId(behavior.getId());
|
||||
for (Parameter parameter : behavior.getParameters()) {
|
||||
if (parameter.getKey().equals("url")) {
|
||||
result.setBehaviorUrl(parameter.getValue());
|
||||
}
|
||||
}
|
||||
result.setContentLength(httpReturn.getContentLength());
|
||||
result.setContentType(httpReturn.getContentType());
|
||||
result.setStatusCode(httpReturn.getStatusCode());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private Map<String, String> prepareBehaviorParameters(Behavior behavior) {
|
||||
Map<String, String> behaviorParameters = new HashMap<String, String>();
|
||||
for (Parameter parameter : behavior.getParameters()) {
|
||||
behaviorParameters.put(parameter.getKey(), parameter.getValue());
|
||||
}
|
||||
return behaviorParameters;
|
||||
}
|
||||
|
||||
private void preparePlugins(Scenario scenario, Map<String, Object> plugins) {
|
||||
for (UsePlugin usePlugin : scenario.getUsePlugins()) {
|
||||
String pluginId = usePlugin.getId();
|
||||
Class<?> pluginClass = this.getPluginManager().getPlugins()
|
||||
.get(usePlugin.getName());
|
||||
Map<String, String> initParameters = new HashMap<String, String>();
|
||||
for (Parameter parameter : usePlugin.getParameters()) {
|
||||
initParameters.put(parameter.getKey(), parameter.getValue());
|
||||
}
|
||||
Object plugin = this.getPluginManager().initializePlugin(
|
||||
pluginClass, initParameters);
|
||||
plugins.put(pluginId, plugin);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue