Jmeter进行性能测试的过程中,经常需要进行某些不同操作的,比如我经常用到的就是动态参数,此时可以通过新建一个java sampler。在sampler中进行处理。最终返回处理后的结果。
1、新建一个maven project。命令如下:
mvn archetype:create -DgroupId=com.alibaba.b2b.qa -DartifactId=jmeterSamplerExam
2、在eclipse中import此maven project
3、右击项目名,选择Properties->Java Build Path->Libraries->Add External JARs,添加jmeter安装目录下lib\ext中的ApacheJMeter_core.jar和ApacheJMeter_java.jar。如下:
4、新建一个class集成自AbstractJavaSamplerClient(在添加完上面的两个jmeter包后)。命名为JmeterSamplerExam。
默认只有一个runTest函数。
可添加的函数有setupTest、getDefaultParameters、runTest、teardownTest。具体含义如下:
int count; // 初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行,类似于LoadRunner中的init方法 public void setupTest(JavaSamplerContext arg0) { count = 0; } // 设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中 public Arguments getDefaultParameters() { Arguments arguments = new Arguments(); arguments.addArgument("id", "10"); arguments.addArgument("String", "initString"); return arguments; } // 测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于LoadRunner中的Action方法 public SampleResult runTest(JavaSamplerContext context) { SampleResult results = new SampleResult(); results.sampleStart(); // 计时开始 for (int i = 0; i < 10000000; i++) count++; results.sampleEnd(); // 计时结束 results.setDataEncoding("UTF-8"); results.setResponseCode(count + ""); // 结果返回 // results.setResponseCode(context.getParameter("id")); // 获取参数 results.setResponseMessage("responseMessage"); // 结果返回2 results.setSuccessful(true); // 可用于返回是否处理成功 return results; } // 结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行,类似于LoadRunner中的end方法 public void teardownTest(JavaSamplerContext arg0) { }
参考自:
http://www.51testing.com/html/64/n-218764.html
http://www.51testing.com/html/64/n-218764-2.html
5、为了调试JmeterSamplerExam,新建单元测试代码。右击类名,new->Other如下图:
在打开的select a wizard窗口中选择Java->Junit->Junit Test Case。
在打开的New Junit Test Case窗口的Junit Test Case中,将source folder设置到test目录方便分类即可,其他设置可不变。如下图:
在Test Methods窗口中选择待测试函数。最终生成测试代码。在生成的空函数中加入以下代码,进行调试。
参考自:http://blog.csdn.net/shesunshine/archive/2010/08/20/5826798.aspx
6、在JmeterSamplerExamTest文件中按下F11,进行调试。
若报java.lang.reflect.InvocationTargetException异常。则在pom文件中加入jmeter依赖。代码如下:
<dependency> <groupId>com.alibaba.external</groupId> <artifactId>apache.jmeter</artifactId> <version>2.3</version> </dependency>
7、调试成功后,注释掉测试代码,右击项目名Easy Shell –> Open。打开cmd窗口。
用mvn clean install命令编译打包即可。
8、将target目录下生成的jar拷贝至jmeter的lib\ext目录下,重新启动jmeter。
添加一个线程组后添加一个java请求,如下图:
红圈为程序中添加的参数名。
9、一般java sampler的结果可以通过程序中的setResponseCode和setResponseMessage返回。然后在jmeter脚本中通过正则表达式提取出来使用。
setResponseCode的内容可以通过勾选正则响应字段的”响应代码”提取
setResponseMessage的内容可以通过勾选正则响应字段的”响应信息”提取。
正则的更多内容见:
http://www.b2b-qa.com/phpwind/read.php?tid=33
若报
-source 1.3 中不支持泛型
(请使用 -source 5 或更高版本以启用泛型)
在pom.xml中添加
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <verbose>true</verbose> <fork>true</fork> <executable><!-- path-to-javac --></executable> <compilerVersion>1.3</compilerVersion> </configuration> </plugin> </plugins> </build>