Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Run "mvn org.apache.jmeter:maven-jmeter-plugin:jmeter" to run the tests.

Change to the plugin - by Peter Andersen / not committed!

(If this can be used - please commit this into the codebase)

Using jmeter from maven-jmeter-plugin as suggested on:

http://jlorenzen.blogspot.com/2008_03_01_archive.html

The problem is that maven hang after the test has ended.

Some debugging shows that the maven-jmeter-plugin call to jmeter course jmeter to leak threads, I have done the following change to the maven-jmeter-plugin that fixes the problem, using checkForEndOfTest method below.

Hope someone can use this to improve the plugin.

Code changes to org.apache.jmeter.JMeterMojo.java:

No Format

	private void executeTest(File test) throws MojoExecutionException {
		/...	cut out from mail
			try {
				// This mess is necessary because the only way to know when JMeter
				// is done is to wait for all of the threads that it spawned to exit.
				new JMeter().start(args.toArray(new String[]{}));
				BufferedReader in = new BufferedReader(new FileReader(jmeterLog));
				while (!checkForEndOfTest(in)) {
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						break;
					}
				}
				in.close();
			} catch (ExitException e) {
				if (e.getCode() != 0) {
					throw new MojoExecutionException("Test failed", e);
				}
			} finally {
				System.setSecurityManager(oldManager);
				Thread.setDefaultUncaughtExceptionHandler(oldHandler);
			}
		} catch (IOException e) {
			throw new MojoExecutionException("Can't execute test", e);
		}
	}

	private boolean checkForEndOfTest(BufferedReader in) throws MojoExecutionException {
		boolean testEnded = false;
		try {
			String line;
			while ( (line = in.readLine()) != null) {
				if (line.indexOf("Test has ended") != -1) {
					testEnded = true;
					break;
				}
			}
		} catch (IOException e) {
			throw new MojoExecutionException("Can't read log file", e);
		}
		return testEnded;
	}