You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@jakarta.apache.org by Apache Wiki <wi...@apache.org> on 2011/01/06 22:12:53 UTC

[Jakarta-jmeter Wiki] Update of "JMeterMavenPlugin" by JochenStiepel

Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Jakarta-jmeter Wiki" for change notification.

The "JMeterMavenPlugin" page has been changed by JochenStiepel.
The comment on this change is: new link to ronnies wiki.
http://wiki.apache.org/jakarta-jmeter/JMeterMavenPlugin?action=diff&rev1=7&rev2=8

--------------------------------------------------

+ A more recent version of this wiki page can be found here
+ 
+ https://github.com/Ronnie76er/jmeter-maven-plugin/wiki
+ 
  This is a Maven 2 plugin that allows you to run JMeter tests as part of the build.  I am using this with [[http://jchav.blogspot.com/|JChav]] and [[http://maven.apache.org/continuum/|Continuum]] to automate the running of a suite of JMeter load tests, and publish the results to a web page.  Sorry this is not more polished.  It could use some TLC to make it more user-friendly to actually plug it into a project.  I just thought I'd stick the code out there as quickly as possible and see if anyone is interested in it before I went any further with it.
  
- To build and use the plugin:<<BR>> <<BR>>
+ To build and use the plugin:<<BR>> <<BR>> '''Remote Repository'''
- '''Remote Repository'''
+ 
-   * Create a locally hosted remote Maven repository, if you don't already have one.
+  * Create a locally hosted remote Maven repository, if you don't already have one.
-   * Configure your pom to utilize this remote repository.
+  * Configure your pom to utilize this remote repository.
  
  '''Deploy JMeter Jar'''
+ 
-   * Deploy the attached [[attachment:jmeter-2.2.jar|JMeter jar]] and [[attachment:jmeter-2.2.pom|POM]] to your remote repository (note that you do not need to have JMeter separately installed). For example: {{{
+  * Deploy the attached [[attachment:jmeter-2.2.jar|JMeter jar]] and [[attachment:jmeter-2.2.pom|POM]] to your remote repository (note that you do not need to have JMeter separately installed). For example:
+  {{{
  mvn deploy:deploy-file -DgroupId=org.apache.jmeter -DartifactId=jmeter -Dversion=2.2 -Dpackaging=jar -Dfile=c://downloads//jmeter//jmeterPlugin/jmeter-2.2.jar -DpomFile=c://downloads//jmeter//jmeterPlugin/jmeter-2.2.pom -Durl=file:////myRepoHost.com/FileShare/ProductDevelopment/ApplicationDevelopment/maven2repository -DrepositoryId=my-repo
  }}}
  
  '''Deploy Dependencies'''
+ 
-   * Add the jar files that are referenced in the JMeter POM to your local repository, via the deploy plugin, if they are not on ibiblio.
+  * Add the jar files that are referenced in the JMeter POM to your local repository, via the deploy plugin, if they are not on ibiblio.
  
  '''Install the Plugin'''
+ 
-   * Download the attached [[attachment:maven-jmeter-plugin-src.tar.gz|Maven JMeter Plugin source tarball]].  Untar it.
+  * Download the attached [[attachment:maven-jmeter-plugin-src.tar.gz|Maven JMeter Plugin source tarball]].  Untar it.
-   * Run "mvn install" to build and install the plugin.
+  * Run "mvn install" to build and install the plugin.
-   * In your project's pom.xml, add a dependency on this plugin: {{{
+  * In your project's pom.xml, add a dependency on this plugin:
+  {{{
  <dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>maven-jmeter-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>
- </dependency>}}}
+ </dependency>
+ }}}
  
  '''Configure the Plugin'''
+ 
-   * Create a src/test/jmeter directory, and place your JMeter load tests there.
+  * Create a src/test/jmeter directory, and place your JMeter load tests there.
-   * Create a jmeter.properties file in src/test/jmeter.  It's fine to just copy the default properties file from the JMeter install if you want.
+  * Create a jmeter.properties file in src/test/jmeter.  It's fine to just copy the default properties file from the JMeter install if you want.
-   * Optionally configure includes and excludes in your pom.xml for which tests to run.  If you don't, it will just run **/*.jmx.  For example: {{{
+  * Optionally configure includes and excludes in your pom.xml for which tests to run.  If you don't, it will just run **/*.jmx.  For example:
+  {{{
    <build>
      <plugins>
        <plugin>
@@ -42, +54 @@

          </configuration>
        </plugin>
      </plugins>
-   </build> }}}
+   </build>
+ }}}
  
-   * The default reports directory is 'jmeter-reports' which is created in the base folder ( usually where maven is run from )
+  * The default reports directory is 'jmeter-reports' which is created in the base folder ( usually where maven is run from )
-   * Changing the reports directory : Add a reportDir setting to the plugin configuration. for example: {{{
+  * Changing the reports directory : Add a reportDir setting to the plugin configuration. for example:
+  {{{
    <build>
      <plugins>
        <plugin>
@@ -60, +74 @@

          </configuration>
        </plugin>
      </plugins>
-   </build> }}}
+   </build>
+ }}}
  
  '''Executing the Plugin'''
+ 
-   * Run "mvn org.apache.jmeter:maven-jmeter-plugin:jmeter" to run the tests.
+  * Run "mvn org.apache.jmeter:maven-jmeter-plugin:jmeter" to run the tests.
  
  '''Change to the plugin - by Peter Andersen / not committed!'''
  
@@ -75, +91 @@

  
  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.
- 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:
  
  {{{
- 	private void executeTest(File test) throws MojoExecutionException {
+         private void executeTest(File test) throws MojoExecutionException {
- 		/...	cut out from mail
- 			try {
+                 /...    cut out from mail
+                         try {
- 				// This mess is necessary because the only way to know when JMeter
+                                 // 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.
+                                 // is done is to wait for all of the threads that it spawned to exit.
- 				new JMeter().start(args.toArray(new String[]{}));
+                                 new JMeter().start(args.toArray(new String[]{}));
- 				BufferedReader in = new BufferedReader(new FileReader(jmeterLog));
+                                 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);
+                                 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);
+                                 Thread.setDefaultUncaughtExceptionHandler(oldHandler);
- 			}
- 		} catch (IOException e) {
+                         }
+                 } catch (IOException e) {
- 			throw new MojoExecutionException("Can't execute test", e);
+                         throw new MojoExecutionException("Can't execute test", e);
- 		}
- 	}
+                 }
+         }
  
- 	private boolean checkForEndOfTest(BufferedReader in) throws MojoExecutionException {
+         private boolean checkForEndOfTest(BufferedReader in) throws MojoExecutionException {
- 		boolean testEnded = false;
- 		try {
- 			String line;
+                 boolean testEnded = false;
+                 try {
+                         String line;
- 			while ( (line = in.readLine()) != null) {
+                         while ( (line = in.readLine()) != null) {
- 				if (line.indexOf("Test has ended") != -1) {
- 					testEnded = true;
- 					break;
- 				}
- 			}
- 		} catch (IOException e) {
+                                 if (line.indexOf("Test has ended") != -1) {
+                                         testEnded = true;
+                                         break;
+                                 }
+                         }
+                 } catch (IOException e) {
- 			throw new MojoExecutionException("Can't read log file", e);
+                         throw new MojoExecutionException("Can't read log file", e);
+                 }
+                 return testEnded;
+         }
- 		}
- 		return testEnded;
- 	}
- 
- 
  }}}
  

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@jakarta.apache.org
For additional commands, e-mail: notifications-help@jakarta.apache.org