public void doTest(final PerfTest perfTest) {
		SingleConsole singleConsole = null;
		try {
			GrinderProperties grinderProperties = perfTestService.prepareTest(perfTest);
			singleConsole = startConsole(perfTest);
			startAgentsOn(perfTest, grinderProperties, checkCancellation(singleConsole));
			distributeFileOn(perfTest, checkCancellation(singleConsole));
			singleConsole.setReportPath(perfTestService.getReportFileDirectory(perfTest));
			runTestOn(perfTest, grinderProperties, checkCancellation(singleConsole));
		} catch (PerfTestPrepareException ex) {
			LOG.error(format(perfTest, "Error while preparing a test : {} ", ex.getMessage()));
			perfTestService.markProgressAndStatusAndFinishTimeAndStatistics(perfTest, Status.STOP_BY_ERROR,
				ex.getMessage());
		} catch (SingleConsoleCancellationException ex) {
			// In case of error, mark the occurs error on perftest.
			LOG.error(format(perfTest, "Error while preparing a single console : {} ", ex.getMessage()));
			doCancel(perfTest, requireNonNull(singleConsole));
			notifyFinish(perfTest, StopReason.CANCEL_BY_USER);
		} catch (Exception ex) {
			// In case of error, mark the occurs error on perftest.
			LOG.error(format(perfTest, "Error while executing a test: {}", ex.getMessage()));
			LOG.debug("Stack Trace is : ", ex);
			doTerminate(perfTest, singleConsole, ex.getMessage());
			notifyFinish(perfTest, StopReason.ERROR_WHILE_PREPARE);
		} finally {
			cleanUp(perfTest);
		}
	}
Run the given test.
<p/>
If fails, it marks STOP_BY_ERROR in the given {@link PerfTest} status

@param perfTest perftest instance;
ngrinder-controller/src/main/java/org/ngrinder/perftest/service/PerfTestRunnable.java