private void runTest() {
		int i, min, max;
		TesterThread tester;

		// Get the min and max rows to be processed by each TesterThread
		int[] ranges = getRanges();
		if (ranges == null) {
			return;
		}
		if (ranges[0] == -1) {
			System.err.println("No test records found in target table.");
			return;
		}

		// Get formatted date for consistent tagging of the result files
		String date = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());

		// First TestThread created with min row of 1
		max = ranges[0];
		tester = new TesterThread(1, max, this, new StageConnectionManager(),
				createFileName(1, max, date));
		incrementRunning();
		tester.run();

		// Create a total of POOL_SIZE TesterThreads
		for (i = 1; i < POOL_SIZE; i++) {
			// ranges[i] will be -1 when result size is less than i
			if (ranges[i] > 0) {
				// Min of next thread is max of last thread plus one
				min = max + 1;
				max = ranges[i];
				tester = new TesterThread(min, max, this,
						new StageConnectionManager(), createFileName(min, max,
								date));
				incrementRunning();
				tester.run();
			}
		}

		// This thread is locked until all TesterThreads complete
		while (running > 0) {
			try {
				wait();
			} catch (InterruptedException e) {
				System.err.println("Process was interrupted. Some records "
						+ "were not tested.");
				e.printStackTrace();
			}
		}
	}