refactor to testplanRepository completely

This commit is contained in:
coderfengyun 2014-02-19 09:12:41 +08:00
parent 5f631374ae
commit 4aefb273a5
11 changed files with 626 additions and 611 deletions

View File

@ -186,7 +186,6 @@ public class BusinessModelMapFactory {
ret.setFailTimes(testPlanDB.getFailTimes());
ret.setId(testPlanDB.getId());
ret.setName(testPlanDB.getName());
ret.setTestPlanModelContent(testPlanDB.getTestPlanModelContent());
ret.setTestPlanRunId(testPlanDB.getTestPlanRunId());
ret.setUserModel(toModel(testPlanDB.getUser()));
return ret;

View File

@ -1,69 +1,56 @@
package org.bench4q.master.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "planedConfig")
public class PlanedConfig {
private int id;
private TestPlanScript testPlanScript;
private long warmUp;
private long executeRange;
private long coolDown;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@OneToOne
@JoinColumn(name = "testPlanScriptId", nullable = false)
public TestPlanScript getTestPlanScript() {
return testPlanScript;
}
public void setTestPlanScript(TestPlanScript testPlanScript) {
this.testPlanScript = testPlanScript;
}
@Column(name = "warmUp", nullable = false)
public long getWarmUp() {
return warmUp;
}
public void setWarmUp(long warmUp) {
this.warmUp = warmUp;
}
@Column(name = "excuteRange", nullable = false)
public long getExecuteRange() {
return executeRange;
}
public void setExecuteRange(long executeRange) {
this.executeRange = executeRange;
}
@Column(name = "coolDown", nullable = false)
public long getCoolDown() {
return coolDown;
}
public void setCoolDown(long coolDown) {
this.coolDown = coolDown;
}
}
package org.bench4q.master.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "planedConfig")
public class PlanedConfig {
private int id;
private long warmUp;
private long executeRange;
private long coolDown;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name = "warmUp", nullable = false)
public long getWarmUp() {
return warmUp;
}
public void setWarmUp(long warmUp) {
this.warmUp = warmUp;
}
@Column(name = "excuteRange", nullable = false)
public long getExecuteRange() {
return executeRange;
}
public void setExecuteRange(long executeRange) {
this.executeRange = executeRange;
}
@Column(name = "coolDown", nullable = false)
public long getCoolDown() {
return coolDown;
}
public void setCoolDown(long coolDown) {
this.coolDown = coolDown;
}
}

View File

@ -1,14 +1,18 @@
package org.bench4q.master.entity;
import java.util.Date;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@ -19,9 +23,9 @@ public class TestPlanDB {
private Date createDateTime;
private User user;
private String testPlanRunId;
private String testPlanModelContent;
private String currentStatus;
private int failTimes;
private Set<TestPlanScript> testPlanScripts;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@ -71,15 +75,6 @@ public class TestPlanDB {
this.user = user;
}
@Column(name = "testPlanModelContent", columnDefinition = "LONGText", nullable = false)
public String getTestPlanModelContent() {
return testPlanModelContent;
}
public void setTestPlanModelContent(String testPlanModelContent) {
this.testPlanModelContent = testPlanModelContent;
}
@Column(name = "currentStatus", nullable = false)
public String getCurrentStatus() {
return currentStatus;
@ -98,4 +93,22 @@ public class TestPlanDB {
this.failTimes = failTimes;
}
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
@JoinColumn(name = "testPlanId")
public Set<TestPlanScript> getTestPlanScripts() {
return testPlanScripts;
}
public void setTestPlanScripts(Set<TestPlanScript> testPlanScripts) {
this.testPlanScripts = testPlanScripts;
}
public TestPlanScript extracSpecifiedScript(Script script) {
for (TestPlanScript testPlanScript : testPlanScripts) {
if (testPlanScript.getScript().getId() == script.getId()) {
return testPlanScript;
}
}
return null;
}
}

View File

@ -1,61 +1,62 @@
package org.bench4q.master.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "TestPlanScript")
public class TestPlanScript {
private int id;
private Script script;
private int requireLoad;
private TestPlanDB testPlanDB;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@OneToOne
@JoinColumn(name = "scriptId", nullable = false)
public Script getScript() {
return script;
}
public void setScript(Script script) {
this.script = script;
}
@Column(name = "requireLoad", nullable = false)
public int getRequireLoad() {
return requireLoad;
}
public void setRequireLoad(int requireLoad) {
this.requireLoad = requireLoad;
}
@ManyToOne
@JoinColumn(name = "testPlanId", nullable = false)
public TestPlanDB getTestPlanDB() {
return testPlanDB;
}
public void setTestPlanDB(TestPlanDB testPlanDB) {
this.testPlanDB = testPlanDB;
}
}
package org.bench4q.master.entity;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "TestPlanScript")
public class TestPlanScript {
private int id;
private Script script;
private int requireLoad;
private PlanedConfig planedConfig;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@OneToOne
@JoinColumn(name = "scriptId", nullable = false)
public Script getScript() {
return script;
}
public void setScript(Script script) {
this.script = script;
}
@Column(name = "requireLoad", nullable = false)
public int getRequireLoad() {
return requireLoad;
}
public void setRequireLoad(int requireLoad) {
this.requireLoad = requireLoad;
}
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
@JoinColumn(name = "configId", nullable = false)
public PlanedConfig getPlanedConfig() {
return planedConfig;
}
public void setPlanedConfig(PlanedConfig planedConfig) {
this.planedConfig = planedConfig;
}
}

View File

@ -0,0 +1,70 @@
package org.bench4q.master.factory;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import org.bench4q.master.entity.PlanedConfig;
import org.bench4q.master.entity.TestPlanDB;
import org.bench4q.master.entity.TestPlanScript;
import org.bench4q.master.entity.User;
import org.bench4q.master.service.infrastructure.ScriptService;
import org.bench4q.share.enums.master.TestPlanStatus;
import org.bench4q.share.models.master.RunningScriptModel;
import org.bench4q.share.models.master.TestPlanBusinessModel;
import org.bench4q.share.models.master.TestScriptConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class TestPlanFactory {
private ScriptService scriptService;
private ScriptService getScriptService() {
return scriptService;
}
@Autowired
private void setScriptService(ScriptService scriptService) {
this.scriptService = scriptService;
}
public TestPlanDB createATestPlanWithoutIdentity(
TestPlanBusinessModel testPlanBusinessModel, User user, UUID runId) {
TestPlanDB result = new TestPlanDB();
result.setCreateDateTime(new Date());
result.setCurrentStatus(TestPlanStatus.NotStart.name());
result.setFailTimes(0);
result.setName(testPlanBusinessModel.getName());
result.setTestPlanRunId(runId.toString());
result.setUser(user);
Set<TestPlanScript> testPlanScripts = new HashSet<TestPlanScript>();
for (RunningScriptModel runningScriptModel : testPlanBusinessModel
.getRunningScriptModels()) {
testPlanScripts.add(createATestPlanScriptWithoutId(
runningScriptModel.getRequireLoad(),
runningScriptModel.getScriptId(),
runningScriptModel.getConfig()));
}
result.setTestPlanScripts(testPlanScripts);
return result;
}
public TestPlanScript createATestPlanScriptWithoutId(int requireLoad,
int scriptId, TestScriptConfig config) {
TestPlanScript testPlanScript = new TestPlanScript();
testPlanScript.setRequireLoad(requireLoad);
testPlanScript.setScript(this.getScriptService().getScript(scriptId));
testPlanScript.setPlanedConfig(createAPlanedConfigWithoutId(config));
return testPlanScript;
}
private PlanedConfig createAPlanedConfigWithoutId(TestScriptConfig config) {
PlanedConfig planedConfig = new PlanedConfig();
planedConfig.setWarmUp(config.getWarmUp());
planedConfig.setExecuteRange(config.getExecuteRange());
planedConfig.setCoolDown(config.getCoolDown());
return planedConfig;
}
}

View File

@ -1,128 +1,140 @@
package org.bench4q.master.report;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.apache.log4j.Logger;
import org.bench4q.master.entity.TestPlanScript;
import org.bench4q.master.entity.TestPlanScriptResult;
import org.bench4q.master.service.infrastructure.MonitorResultService;
import org.bench4q.master.service.infrastructure.TestPlanScriptService;
import org.bench4q.master.service.infrastructure.TestPlanService;
import org.bench4q.share.models.master.statistics.ScriptBriefResultModel;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.lowagie.text.Document;
@Component
public class ScriptReportService {
public static String SCRIPT_TITLE = "Script result";
public static String Average_Response_Time = "averageResponseTime(unit: ms)";
public static String MAX_RESPONSE_TIME = "maxResponseTime(unit : time)";
private TestPlanScriptService testPlanScriptService;
private TestPlanService testPlanService;
private MonitorResultService monitorResultService;
private Logger logger = Logger.getLogger(ScriptReportService.class);
public TestPlanScriptService getTestPlanScriptService() {
return testPlanScriptService;
}
@Autowired
public void setTestPlanScriptService(
TestPlanScriptService testPlanScriptService) {
this.testPlanScriptService = testPlanScriptService;
}
public TestPlanService getTestPlanService() {
return testPlanService;
}
@Autowired
public void setTestPlanService(TestPlanService testPlanService) {
this.testPlanService = testPlanService;
}
public MonitorResultService getMonitorResultService() {
return monitorResultService;
}
@Autowired
public void setMonitorResultService(
MonitorResultService monitorResultService) {
this.monitorResultService = monitorResultService;
}
void createScriptsResultsImage(UUID testPlanRunId, Document document) {
List<TestPlanScript> scripts = this.getTestPlanScriptService()
.queryTestPlanScripts(testPlanRunId);
if (scripts == null) {
return;
}
for (TestPlanScript testPlanScript : scripts) {
createScriptImage(this.getTestPlanScriptService()
.queryScriptBriefResults(testPlanScript), document);
}
}
private void createScriptImage(List<TestPlanScriptResult> results,
Document document) {
if (results == null) {
return;
}
createAverageReponseTimeImage(results, document);
}
private void createAverageReponseTimeImage(
List<TestPlanScriptResult> results, Document document) {
List<TimeSeries> timeSeriesList = new ArrayList<TimeSeries>();
if (results == null) {
return;
}
addScriptSeries(results, timeSeriesList, "averageResponseTime");
addScriptSeries(results, timeSeriesList, "maxResponseTime");
try {
ReportService.writeImageIntoPdf(
ReportService.buildChartStream(document,
timeSeriesList.size(), timeSeriesList,
Average_Response_Time + "&" + MAX_RESPONSE_TIME)
.toByteArray(), document);
} catch (Exception e) {
e.printStackTrace();
}
}
// TODO: refactor this to a kind of command mode
private void addScriptSeries(List<TestPlanScriptResult> results,
List<TimeSeries> timeSeriesList, String fieldName) {
try {
TimeSeries timeSeries = new TimeSeries(fieldName);
for (TestPlanScriptResult result : results) {
if (!result.getResultType().equals(
ScriptBriefResultModel.class.getName())) {
continue;
}
ScriptBriefResultModel scriptBriefResultModel = result
.extractScriptBriefResultModel();
Field field = scriptBriefResultModel.getClass()
.getDeclaredField(fieldName);
field.setAccessible(true);
timeSeries.addOrUpdate(new Second(result.getCreateDatetime()),
field.getLong(scriptBriefResultModel));
}
timeSeriesList.add(timeSeries);
} catch (Exception e) {
logger.error(e.toString()
+ " in addScriptSeries where fieldName is : " + fieldName);
}
}
}
package org.bench4q.master.report;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import org.apache.log4j.Logger;
import org.bench4q.master.entity.TestPlanScript;
import org.bench4q.master.entity.TestPlanScriptResult;
import org.bench4q.master.repository.TestPlanRepository;
import org.bench4q.master.service.infrastructure.MonitorResultService;
import org.bench4q.master.service.infrastructure.TestPlanScriptService;
import org.bench4q.master.service.infrastructure.TestPlanService;
import org.bench4q.share.models.master.statistics.ScriptBriefResultModel;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.lowagie.text.Document;
@Component
public class ScriptReportService {
public static String SCRIPT_TITLE = "Script result";
public static String Average_Response_Time = "averageResponseTime(unit: ms)";
public static String MAX_RESPONSE_TIME = "maxResponseTime(unit : time)";
private TestPlanScriptService testPlanScriptService;
private TestPlanService testPlanService;
private TestPlanRepository testPlanRepository;
private MonitorResultService monitorResultService;
private Logger logger = Logger.getLogger(ScriptReportService.class);
public TestPlanScriptService getTestPlanScriptService() {
return testPlanScriptService;
}
@Autowired
public void setTestPlanScriptService(
TestPlanScriptService testPlanScriptService) {
this.testPlanScriptService = testPlanScriptService;
}
public TestPlanService getTestPlanService() {
return testPlanService;
}
@Autowired
public void setTestPlanService(TestPlanService testPlanService) {
this.testPlanService = testPlanService;
}
public MonitorResultService getMonitorResultService() {
return monitorResultService;
}
@Autowired
public void setMonitorResultService(
MonitorResultService monitorResultService) {
this.monitorResultService = monitorResultService;
}
private TestPlanRepository getTestPlanRepository() {
return testPlanRepository;
}
@Autowired
private void setTestPlanRepository(TestPlanRepository testPlanRepository) {
this.testPlanRepository = testPlanRepository;
}
void createScriptsResultsImage(UUID testPlanRunId, Document document) {
Set<TestPlanScript> scripts = this.getTestPlanRepository()
.getTestPlan(testPlanRunId).getTestPlanScripts();
if (scripts == null) {
return;
}
for (TestPlanScript testPlanScript : scripts) {
createScriptImage(this.getTestPlanScriptService()
.queryScriptBriefResults(testPlanScript), document);
}
}
private void createScriptImage(List<TestPlanScriptResult> results,
Document document) {
if (results == null) {
return;
}
createAverageReponseTimeImage(results, document);
}
private void createAverageReponseTimeImage(
List<TestPlanScriptResult> results, Document document) {
List<TimeSeries> timeSeriesList = new ArrayList<TimeSeries>();
if (results == null) {
return;
}
addScriptSeries(results, timeSeriesList, "averageResponseTime");
addScriptSeries(results, timeSeriesList, "maxResponseTime");
try {
ReportService.writeImageIntoPdf(
ReportService.buildChartStream(document,
timeSeriesList.size(), timeSeriesList,
Average_Response_Time + "&" + MAX_RESPONSE_TIME)
.toByteArray(), document);
} catch (Exception e) {
e.printStackTrace();
}
}
// TODO: refactor this to a kind of command mode
private void addScriptSeries(List<TestPlanScriptResult> results,
List<TimeSeries> timeSeriesList, String fieldName) {
try {
TimeSeries timeSeries = new TimeSeries(fieldName);
for (TestPlanScriptResult result : results) {
if (!result.getResultType().equals(
ScriptBriefResultModel.class.getName())) {
continue;
}
ScriptBriefResultModel scriptBriefResultModel = result
.extractScriptBriefResultModel();
Field field = scriptBriefResultModel.getClass()
.getDeclaredField(fieldName);
field.setAccessible(true);
timeSeries.addOrUpdate(new Second(result.getCreateDatetime()),
field.getLong(scriptBriefResultModel));
}
timeSeriesList.add(timeSeries);
} catch (Exception e) {
logger.error(e.toString()
+ " in addScriptSeries where fieldName is : " + fieldName);
}
}
}

View File

@ -3,9 +3,8 @@ package org.bench4q.master.repository;
import java.util.List;
import java.util.UUID;
import org.bench4q.master.entity.PlanedConfig;
import org.apache.log4j.Logger;
import org.bench4q.master.entity.TestPlanDB;
import org.bench4q.master.entity.TestPlanScript;
import org.bench4q.master.entity.User;
import org.bench4q.master.exception.ExceptionLog;
import org.hibernate.Session;
@ -15,6 +14,23 @@ import org.springframework.stereotype.Component;
@Component
public class TestPlanRepository extends AbstractRepositoty {
private Logger logger = Logger.getLogger(TestPlanRepository.class);
public boolean attach(TestPlanDB testPlanDB) {
Session session = this.getSessionHelper().openSession();
Transaction transaction = session.beginTransaction();
try {
session.merge(testPlanDB);
transaction.commit();
return true;
} catch (Exception e) {
logger.error(ExceptionLog.getStackTrace(e));
transaction.rollback();
return false;
} finally {
releaseSession(session);
}
}
public boolean detach(int testPlanId) {
Session session = this.getSessionHelper().openSession();
@ -26,27 +42,6 @@ public class TestPlanRepository extends AbstractRepositoty {
if (testPlanInDB == null) {
return false;
}
@SuppressWarnings("unchecked")
List<TestPlanScript> testPlanScripts = session
.createCriteria(TestPlanScript.class)
.add(Restrictions.eq("testPlanDB", testPlanInDB)).list();
if (testPlanScripts == null) {
return false;
}
for (TestPlanScript testPlanScript : testPlanScripts) {
@SuppressWarnings("unchecked")
List<PlanedConfig> configs = session
.createCriteria(PlanedConfig.class)
.add(Restrictions.eq("testPlanScript", testPlanScript))
.list();
if (configs == null) {
return false;
}
for (PlanedConfig config : configs) {
session.delete(config);
}
session.delete(testPlanScript);
}
session.delete(testPlanInDB);
transaction.commit();
return true;

View File

@ -1,193 +1,221 @@
package org.bench4q.master.service.infrastructure;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.xml.bind.JAXBException;
import org.apache.log4j.Logger;
import org.bench4q.master.entity.TestPlanScriptResult;
import org.bench4q.master.exception.ExceptionLog;
import org.bench4q.master.helper.SessionHelper;
import org.bench4q.share.helper.MarshalHelper;
import org.bench4q.share.models.master.ValueTimeModel;
import org.bench4q.share.models.master.statistics.ScriptBehaviorsBriefModel;
import org.bench4q.share.models.master.statistics.ScriptBriefResultModel;
import org.bench4q.share.models.master.statistics.ScriptPagesBriefModel;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class TestPlanScriptResultService {
private TestPlanScriptService testPlanScriptService;
private SessionHelper sessionHelper;
private static Logger logger = Logger
.getLogger(TestPlanScriptResultService.class);
private TestPlanScriptService getTestPlanScriptService() {
return testPlanScriptService;
}
@Autowired
private void setTestPlanScriptService(
TestPlanScriptService testPlanScriptService) {
this.testPlanScriptService = testPlanScriptService;
}
public SessionHelper getSessionHelper() {
return sessionHelper;
}
@Autowired
public void setSessionHelper(SessionHelper sessionHelper) {
this.sessionHelper = sessionHelper;
}
/**
* Here I just use the Time that createDateTime in testplanscriptResult, If
* it's not accuracy, i just need to modify the way of pick createDateTime
*
* @param testPlanId
* @param scriptId
* @return
*/
public List<ValueTimeModel> loadScriptBriefSpecificField(UUID testPlanId,
int scriptId, String fieldName) {
List<TestPlanScriptResult> scriptBriefresults = this
.getTestPlanScriptService().queryScriptBriefResults(testPlanId,
scriptId);
List<ValueTimeModel> ret = new ArrayList<ValueTimeModel>();
for (TestPlanScriptResult result : scriptBriefresults) {
try {
ScriptBriefResultModel briefModel = (ScriptBriefResultModel) MarshalHelper
.unmarshal(ScriptBriefResultModel.class,
result.getResultContent());
ret.add(ValueTimeModel.buildValueTimeModel(
getSpecificFieldValue(briefModel, fieldName),
result.getCreateDatetime()));
} catch (JAXBException e) {
logger.info(ExceptionLog.getStackTrace(e)
+ " When unmarshal the model from ResultCOntent");
continue;
} catch (NoSuchFieldException e) {
logger.info(ExceptionLog.getStackTrace(e)
+ " When get Field from the model from ResultCOntent");
continue;
}
}
return ret;
}
private long getSpecificFieldValue(ScriptBriefResultModel briefModel,
String fieldName) throws NoSuchFieldException {
try {
Field field = getFieldAndSetAccessible(briefModel, fieldName);
return (Long) field.get(briefModel);
} catch (Exception e) {
throw new NoSuchFieldException();
}
}
private Field getFieldAndSetAccessible(ScriptBriefResultModel briefModel,
String fieldName) throws NoSuchFieldException, SecurityException {
Field field = briefModel.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
return field;
}
public List<ScriptBriefResultModel> loadScriptBriefWithDuation(
UUID testPlanId, int scriptId, long startTime) {
Session session = this.getSessionHelper().openSession();
List<ScriptBriefResultModel> result = new ArrayList<ScriptBriefResultModel>();
try {
List<TestPlanScriptResult> scriptResults = doGetTestPlanScriptResults(
testPlanId, scriptId, startTime,
ScriptBriefResultModel.class, session);
for (TestPlanScriptResult testPlanScriptResult : scriptResults) {
result.add((ScriptBriefResultModel) MarshalHelper.unmarshal(
ScriptBriefResultModel.class,
testPlanScriptResult.getResultContent()));
}
} catch (Exception e) {
logger.error(ExceptionLog.getStackTrace(e));
}
return result;
}
private List<TestPlanScriptResult> doGetTestPlanScriptResults(
UUID testPlanId, int scriptId, long startTime, Class<?> resultType,
Session session) {
@SuppressWarnings("unchecked")
List<TestPlanScriptResult> results = (List<TestPlanScriptResult>) session
.createCriteria(TestPlanScriptResult.class)
.add(Restrictions.eq(
"testPlanScript",
this.getTestPlanScriptService().doGetTestPlanScript(
scriptId, testPlanId, session)))
.add(Restrictions.eq("resultType", resultType.getName()))
.add(Restrictions.ge("createDatetime", new Date(startTime)))
.list();
return results;
}
public ScriptBehaviorsBriefModel loadScriptBehaviorsBrief(UUID testPlanId,
int scriptId) {
Session session = this.getSessionHelper().openSession();
try {
TestPlanScriptResult testPlanScriptResult = doGetLastSampleResult(
testPlanId, scriptId, ScriptBehaviorsBriefModel.class,
session);
if (testPlanScriptResult == null) {
return new ScriptBehaviorsBriefModel();
}
return (ScriptBehaviorsBriefModel) MarshalHelper.unmarshal(
ScriptBehaviorsBriefModel.class,
testPlanScriptResult.getResultContent());
} catch (Exception e) {
logger.error(ExceptionLog.getStackTrace(e));
}
return new ScriptBehaviorsBriefModel();
}
private TestPlanScriptResult doGetLastSampleResult(UUID testPlanId,
int scriptId, Class<?> resultType, Session session) {
@SuppressWarnings("unchecked")
List<TestPlanScriptResult> results = (List<TestPlanScriptResult>) session
.createCriteria(TestPlanScriptResult.class)
.add(Restrictions.eq(
"testPlanScript",
this.getTestPlanScriptService().getTestPlanScript(
scriptId, testPlanId)))
.add(Restrictions.eq("resultType", resultType.getName()))
.addOrder(Order.desc("createDatetime")).setFetchSize(1).list();
if (results.size() > 0) {
return results.get(0);
}
return null;
}
public ScriptPagesBriefModel loadScriptPagesBrief(UUID testPlanId,
int scriptId) {
Session session = this.getSessionHelper().openSession();
ScriptPagesBriefModel result = new ScriptPagesBriefModel();
try {
TestPlanScriptResult testPlanScriptResult = doGetLastSampleResult(
testPlanId, scriptId, ScriptPagesBriefModel.class, session);
if (testPlanScriptResult == null) {
return result;
}
result = (ScriptPagesBriefModel) MarshalHelper.unmarshal(
ScriptPagesBriefModel.class,
testPlanScriptResult.getResultContent());
} catch (Exception e) {
logger.error(ExceptionLog.getStackTrace(e));
}
return result;
}
}
package org.bench4q.master.service.infrastructure;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.xml.bind.JAXBException;
import org.apache.log4j.Logger;
import org.bench4q.master.entity.TestPlanScript;
import org.bench4q.master.entity.TestPlanScriptResult;
import org.bench4q.master.exception.ExceptionLog;
import org.bench4q.master.helper.SessionHelper;
import org.bench4q.master.repository.TestPlanRepository;
import org.bench4q.share.helper.MarshalHelper;
import org.bench4q.share.models.master.ValueTimeModel;
import org.bench4q.share.models.master.statistics.ScriptBehaviorsBriefModel;
import org.bench4q.share.models.master.statistics.ScriptBriefResultModel;
import org.bench4q.share.models.master.statistics.ScriptPagesBriefModel;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class TestPlanScriptResultService {
private TestPlanScriptService testPlanScriptService;
private TestPlanRepository testPlanRepository;
private ScriptService scriptService;
private SessionHelper sessionHelper;
private static Logger logger = Logger
.getLogger(TestPlanScriptResultService.class);
private TestPlanScriptService getTestPlanScriptService() {
return testPlanScriptService;
}
@Autowired
private void setTestPlanScriptService(
TestPlanScriptService testPlanScriptService) {
this.testPlanScriptService = testPlanScriptService;
}
public SessionHelper getSessionHelper() {
return sessionHelper;
}
@Autowired
public void setSessionHelper(SessionHelper sessionHelper) {
this.sessionHelper = sessionHelper;
}
private TestPlanRepository getTestPlanRepository() {
return testPlanRepository;
}
@Autowired
private void setTestPlanRepository(TestPlanRepository testPlanRepository) {
this.testPlanRepository = testPlanRepository;
}
private ScriptService getScriptService() {
return scriptService;
}
@Autowired
private void setScriptService(ScriptService scriptService) {
this.scriptService = scriptService;
}
/**
* Here I just use the Time that createDateTime in testplanscriptResult, If
* it's not accuracy, i just need to modify the way of pick createDateTime
*
* @param testPlanId
* @param scriptId
* @return
*/
public List<ValueTimeModel> loadScriptBriefSpecificField(UUID testPlanId,
int scriptId, String fieldName) {
List<TestPlanScriptResult> scriptBriefresults = this
.getTestPlanScriptService().queryScriptBriefResults(testPlanId,
scriptId);
List<ValueTimeModel> ret = new ArrayList<ValueTimeModel>();
for (TestPlanScriptResult result : scriptBriefresults) {
try {
ScriptBriefResultModel briefModel = (ScriptBriefResultModel) MarshalHelper
.unmarshal(ScriptBriefResultModel.class,
result.getResultContent());
ret.add(ValueTimeModel.buildValueTimeModel(
getSpecificFieldValue(briefModel, fieldName),
result.getCreateDatetime()));
} catch (JAXBException e) {
logger.info(ExceptionLog.getStackTrace(e)
+ " When unmarshal the model from ResultCOntent");
continue;
} catch (NoSuchFieldException e) {
logger.info(ExceptionLog.getStackTrace(e)
+ " When get Field from the model from ResultCOntent");
continue;
}
}
return ret;
}
private long getSpecificFieldValue(ScriptBriefResultModel briefModel,
String fieldName) throws NoSuchFieldException {
try {
Field field = getFieldAndSetAccessible(briefModel, fieldName);
return (Long) field.get(briefModel);
} catch (Exception e) {
throw new NoSuchFieldException();
}
}
private Field getFieldAndSetAccessible(ScriptBriefResultModel briefModel,
String fieldName) throws NoSuchFieldException, SecurityException {
Field field = briefModel.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
return field;
}
public List<ScriptBriefResultModel> loadScriptBriefWithDuation(
UUID testPlanId, int scriptId, long startTime) {
Session session = this.getSessionHelper().openSession();
List<ScriptBriefResultModel> result = new ArrayList<ScriptBriefResultModel>();
try {
List<TestPlanScriptResult> scriptResults = doGetTestPlanScriptResults(
testPlanId, scriptId, startTime,
ScriptBriefResultModel.class, session);
for (TestPlanScriptResult testPlanScriptResult : scriptResults) {
result.add((ScriptBriefResultModel) MarshalHelper.unmarshal(
ScriptBriefResultModel.class,
testPlanScriptResult.getResultContent()));
}
} catch (Exception e) {
logger.error(ExceptionLog.getStackTrace(e));
}
return result;
}
private List<TestPlanScriptResult> doGetTestPlanScriptResults(
UUID testPlanId, int scriptId, long startTime, Class<?> resultType,
Session session) {
// TestPlanScript testPlanScript = this.getTestPlanScriptService()
// .doGetTestPlanScript(scriptId, testPlanId, session);
TestPlanScript testPlanScript = this
.getTestPlanRepository()
.getTestPlan(testPlanId)
.extracSpecifiedScript(
this.getScriptService().getScript(scriptId));
@SuppressWarnings("unchecked")
List<TestPlanScriptResult> results = (List<TestPlanScriptResult>) session
.createCriteria(TestPlanScriptResult.class)
.add(Restrictions.eq("testPlanScript", testPlanScript))
.add(Restrictions.eq("resultType", resultType.getName()))
.add(Restrictions.ge("createDatetime", new Date(startTime)))
.list();
return results;
}
public ScriptBehaviorsBriefModel loadScriptBehaviorsBrief(UUID testPlanId,
int scriptId) {
Session session = this.getSessionHelper().openSession();
try {
TestPlanScriptResult testPlanScriptResult = doGetLastSampleResult(
testPlanId, scriptId, ScriptBehaviorsBriefModel.class,
session);
if (testPlanScriptResult == null) {
return new ScriptBehaviorsBriefModel();
}
return (ScriptBehaviorsBriefModel) MarshalHelper.unmarshal(
ScriptBehaviorsBriefModel.class,
testPlanScriptResult.getResultContent());
} catch (Exception e) {
logger.error(ExceptionLog.getStackTrace(e));
}
return new ScriptBehaviorsBriefModel();
}
private TestPlanScriptResult doGetLastSampleResult(UUID testPlanId,
int scriptId, Class<?> resultType, Session session) {
TestPlanScript testPlanScript = this
.getTestPlanRepository()
.getTestPlan(testPlanId)
.extracSpecifiedScript(
this.getScriptService().getScript(scriptId));
@SuppressWarnings("unchecked")
List<TestPlanScriptResult> results = (List<TestPlanScriptResult>) session
.createCriteria(TestPlanScriptResult.class)
.add(Restrictions.eq("testPlanScript", testPlanScript))
.add(Restrictions.eq("resultType", resultType.getName()))
.addOrder(Order.desc("createDatetime")).setFetchSize(1).list();
if (results.size() > 0) {
return results.get(0);
}
return null;
}
public ScriptPagesBriefModel loadScriptPagesBrief(UUID testPlanId,
int scriptId) {
Session session = this.getSessionHelper().openSession();
ScriptPagesBriefModel result = new ScriptPagesBriefModel();
try {
TestPlanScriptResult testPlanScriptResult = doGetLastSampleResult(
testPlanId, scriptId, ScriptPagesBriefModel.class, session);
if (testPlanScriptResult == null) {
return result;
}
result = (ScriptPagesBriefModel) MarshalHelper.unmarshal(
ScriptPagesBriefModel.class,
testPlanScriptResult.getResultContent());
} catch (Exception e) {
logger.error(ExceptionLog.getStackTrace(e));
}
return result;
}
}

View File

@ -1,10 +1,12 @@
package org.bench4q.master.service.infrastructure;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
import java.util.UUID;
import javax.xml.bind.JAXBException;
import org.apache.log4j.Logger;
@ -63,27 +65,10 @@ public class TestPlanScriptService implements Observer {
}
public TestPlanScript getTestPlanScript(int scriptId, UUID testPlanRunId) {
Session session = this.getSessionHelper().openSession();
try {
return doGetTestPlanScript(scriptId, testPlanRunId, session);
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (session != null) {
session.close();
}
}
}
TestPlanScript doGetTestPlanScript(int scriptId, UUID testPlanRunId,
Session session) {
return (TestPlanScript) session
.createCriteria(TestPlanScript.class)
.add(Restrictions.eq("script", this.getScriptService()
.getScript(scriptId)))
.add(Restrictions.eq("testPlanDB", this.getTestPlanRepository()
.getTestPlan(testPlanRunId))).uniqueResult();
TestPlanDB testPlan = this.getTestPlanRepository().getTestPlan(
testPlanRunId);
return testPlan == null ? null : testPlan.extracSpecifiedScript(this
.getScriptService().getScript(scriptId));
}
public boolean saveScriptBriefResult(final UUID testPlanRunId,
@ -131,10 +116,9 @@ public class TestPlanScriptService implements Observer {
if (script == null) {
return;
}
TestPlanScript testPlanScript = (TestPlanScript) session
.createCriteria(TestPlanScript.class)
.add(Restrictions.eq("testPlanDB", testPlanDB))
.add(Restrictions.eq("script", script)).uniqueResult();
TestPlanScript testPlanScript = testPlanDB
.extracSpecifiedScript(script);
if (testPlanScript == null) {
return;
}
@ -169,23 +153,9 @@ public class TestPlanScriptService implements Observer {
return result;
}
@SuppressWarnings("unchecked")
public List<TestPlanScript> queryTestPlanScripts(UUID testPlanRunId) {
Session session = this.getSessionHelper().openSession();
try {
return session
.createCriteria(TestPlanScript.class)
.add(Restrictions
.eq("testPlanDB", this.getTestPlanRepository()
.getTestPlan(testPlanRunId))).list();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (session != null) {
session.close();
}
}
public Collection<TestPlanScript> queryTestPlanScripts(UUID testPlanRunId) {
return this.getTestPlanRepository().getTestPlan(testPlanRunId)
.getTestPlanScripts();
}
public List<TestPlanScriptResult> queryScriptBriefResults(UUID testPlanId,

View File

@ -1,27 +1,19 @@
package org.bench4q.master.service.infrastructure;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import org.apache.log4j.Logger;
import org.bench4q.master.api.modelfactory.BusinessModelMapFactory;
import org.bench4q.master.domain.RunningScript;
import org.bench4q.master.domain.TestPlanInBusiness;
import org.bench4q.master.entity.PlanedConfig;
import org.bench4q.master.entity.Script;
import org.bench4q.master.entity.TestPlanDB;
import org.bench4q.master.entity.TestPlanScript;
import org.bench4q.master.entity.User;
import org.bench4q.master.exception.ExceptionLog;
import org.bench4q.master.factory.TestPlanFactory;
import org.bench4q.master.helper.SessionHelper;
import org.bench4q.master.repository.TestPlanRepository;
import org.bench4q.share.enums.master.TestPlanStatus;
import org.bench4q.share.helper.MarshalHelper;
import org.bench4q.share.models.master.TestPlanBusinessModel;
import org.bench4q.share.models.master.TestPlanDBModel;
import org.bench4q.share.models.master.TestScriptConfig;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
@ -30,9 +22,9 @@ import org.springframework.stereotype.Component;
@Component
public class TestPlanService {
private SessionHelper sessionHelper;
private ScriptService scriptService;
private BusinessModelMapFactory businessMapFactory;
private TestPlanRepository testPlanRepository;
private TestPlanFactory testPlanFactory;
private static Logger logger = Logger.getLogger(TestPlanService.class);
public static final long TIME_UNIT = 1000;
@ -41,11 +33,6 @@ public class TestPlanService {
this.sessionHelper = sessionHelper;
}
@Autowired
private void setScriptService(ScriptService scriptService) {
this.scriptService = scriptService;
}
private TestPlanRepository getTestPlanRepository() {
return testPlanRepository;
}
@ -65,24 +52,24 @@ public class TestPlanService {
this.businessMapFactory = businessMapFactory;
}
private TestPlanFactory getTestPlanFactory() {
return testPlanFactory;
}
@Autowired
private void setTestPlanFactory(TestPlanFactory testPlanFactory) {
this.testPlanFactory = testPlanFactory;
}
public boolean saveTestPlanToDB(final TestPlanInBusiness testPlanInParam,
final User user, final UUID testPlanRunId) {
Session session = this.sessionHelper.openSession();
Transaction transaction = session.beginTransaction();
TestPlanDB testPlanInSession;
try {
testPlanInSession = saveToTestPlan(session,
testPlanInParam.getName(), MarshalHelper.marshal(
TestPlanBusinessModel.class,
session.merge(this.getTestPlanFactory()
.createATestPlanWithoutIdentity(
this.getBusinessMapFactory().toModel(
testPlanInParam)), user, testPlanRunId);
if (testPlanInSession == null) {
return false;
}
if (!saveToTestPlanScriptAndScriptConfig(session,
testPlanInSession, testPlanInParam.getRunningScripts())) {
return false;
}
testPlanInParam), user, testPlanRunId));
transaction.commit();
return true;
} catch (Exception e) {
@ -96,59 +83,6 @@ public class TestPlanService {
}
}
private TestPlanDB saveToTestPlan(Session session, String testPlanName,
String modelContent, User user, UUID testPlanRunId) {
TestPlanDB ret = new TestPlanDB();
ret.setCreateDateTime(new Date());
ret.setName(testPlanName);
ret.setUser(user);
ret.setTestPlanRunId(testPlanRunId.toString());
ret.setCurrentStatus(TestPlanStatus.NotStart.name());
ret.setFailTimes(0);
ret.setTestPlanModelContent(modelContent);
return (TestPlanDB) session.merge(ret);
}
private boolean saveToTestPlanScriptAndScriptConfig(Session session,
TestPlanDB testPlanDB, Collection<RunningScript> runningScripts) {
TestPlanScript testPlanScript = new TestPlanScript();
for (RunningScript runningScript : runningScripts) {
testPlanScript = new TestPlanScript();
testPlanScript.setTestPlanDB(testPlanDB);
Script script = this.scriptService.getScript(runningScript
.getScriptId());
if (script == null) {
logger.error("There is no this script with id "
+ runningScript.getScriptId());
return false;
}
testPlanScript.setScript(this.scriptService.getScript(runningScript
.getScriptId()));
testPlanScript.setRequireLoad(runningScript.getRequireLoad());
TestPlanScript testPlanScriptInDB = (TestPlanScript) session
.merge(testPlanScript);
saveToScriptConfig(session, runningScript, testPlanScriptInDB);
}
return true;
}
private boolean saveToScriptConfig(Session session,
RunningScript runningScript, TestPlanScript testPlanScript) {
PlanedConfig planConfig = new PlanedConfig();
planConfig.setTestPlanScript(testPlanScript);
TestScriptConfig config = runningScript.getConfig();
if (config == null) {
return false;
}
planConfig.setWarmUp(config.getWarmUp());
planConfig.setExecuteRange(config.getExecuteRange());
planConfig.setCoolDown(config.getCoolDown());
session.merge(planConfig);
return true;
}
public List<TestPlanDB> loadTestPlans(User user) {
return this.getTestPlanRepository().loadEntities(user);
}

View File

@ -4,6 +4,7 @@ import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import org.bench4q.master.api.modelfactory.BusinessModelMapFactory;
@ -101,6 +102,7 @@ public class Test_TestPlanService extends TestBase_MakeUpTestPlan {
User user = this.getUserRepository().getUser("admin");
int planCountBeforeSubmit = this.getTestPlanRepository()
.loadEntities(user).size();
System.out.println(planCountBeforeSubmit);
UUID randomUUID = UUID.randomUUID();
TestPlanInBusiness testPlanInBusiness = new TestPlanInBusiness();
testPlanInBusiness.setName("test1");
@ -123,10 +125,14 @@ public class Test_TestPlanService extends TestBase_MakeUpTestPlan {
int planCountAfterSubmit = this.getTestPlanRepository()
.loadEntities(user).size();
assertEquals(planCountBeforeSubmit + 1, planCountAfterSubmit);
TestPlanScript testPlanScript = this.getTestPlanScriptService()
.getTestPlanScript(userScript, randomUUID);
assertNotNull(testPlanScript);
assertEquals(userScript, testPlanScript.getScript().getId());
Set<TestPlanScript> testPlanScripts = this.getTestPlanRepository()
.getTestPlan(randomUUID).getTestPlanScripts();
assertNotNull(testPlanScripts);
assertEquals(1, testPlanScripts.size());
for (TestPlanScript testPlanScript : testPlanScripts) {
assertEquals(userScript, testPlanScript.getScript().getId());
assertEquals(0, testPlanScript.getPlanedConfig().getWarmUp());
}
this.getTestPlanRepository().detach(
this.getTestPlanRepository().getTestPlan(randomUUID).getId());
}