300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > JMeter性能测试-自定义Java脚本

JMeter性能测试-自定义Java脚本

时间:2018-11-07 18:55:20

相关推荐

JMeter性能测试-自定义Java脚本

使用JMeter做性能测试时,我们通常都是需要自己编写测试脚本,才能满足测试用例的需求,Jmeter也是支持我们自定义编写测试脚本的,而且支持Java、Python等多种语言。在这里,我们选择使用Java语言开发测试脚本,是因为Jmeter本身也是用Java实现的,所以使用Java开发脚本会更好。

首先,使用Eclipse或者IntelliJ IDEA来新建一个项目,然后新建一个包,再从Jmeter的lib/ext目录下中拷贝ApacheJMeter_java.jar和ApacheJMeter_core.jar两个文件,然后引入这两个JAR包到项目中。在IntelliJ IDEA中的操作如下:

点击File->Project Structure点击Project Structure界面左侧的Modules在Dependencies标签界面下点击底部的+号,选择第一个选项JARs or directories…选择相应的jar包,点击OK

然后,我们在包中新建一个TestNum类,该类继承ApacheJMeter_java.jar包中的AbstractJavaSamplerClient类,引用它就可以调用了。在继承AbstractJavaSamplerClient类的时候,我们需要实现4个方法:

setupTest():初始化方法,用于初始化性能测试时的每个线程,实际运行时每个线程仅执行一次getDefaultParameters():用于设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter参数列表中runTest():性能测试时的线程运行体,即测试执行的循环体,根据线程数和循环次数的不同可执行多次teardownTest():测试结束方法,用于结束性能测试中的每个线程,实际运行时,每个线程仅执行一次,在测试方法运行结束后执行

具体的代码实现如下:

import org.apache.jmeter.config.Arguments;import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;import org.apache.jmeter.samplers.SampleResult;public class TestNum extends AbstractJavaSamplerClient {// SampleResult类封装了从入口样本返回的各种信息private SampleResult results;// 输入的数字private String inNum;// 需要匹配的数字private String resultNum;// 用于设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter参数列表中// Arguments类表示一组参数对象public Arguments getDefaultParameters() {// 声明定义Arguments类Arguments params = new Arguments();// 添加一个新参数params.addArgument("inNum", "");params.addArgument("resultNum", "66");return params;}// 初始化方法,用于初始化性能测试时的每个线程,实际运行时每个线程仅执行一次//// JavaSamplerContext类用于向JavaSamplerClient实现提供上下文信息// 这当前由在GUI中指定的初始化参数组成,其他数据将来可以通过JavaSamplerContext访问public void setupTest(JavaSamplerContext jsc) {// 定义SampleResult类results = new SampleResult();// 以String形式获取指定参数的值,或者如果未指定该值,则返回指定的默认值inNum = jsc.getParameter("inNum", "");resultNum = jsc.getParameter("resultNum", "");if (inNum != null && inNum.length() > 0) {// 设置采样器数据results.setSamplerData(inNum);}if (resultNum != null && resultNum.length() > 0) {results.setSamplerData(resultNum);}}// 性能测试时的线程运行体,即测试执行的循环体,根据线程数和循环次数的不同可执行多次public SampleResult runTest(JavaSamplerContext arg0) {boolean flag = false;// 定义一个事务,表示这是事务的起始点results.sampleStart();for (int i = inNum.length(); --i >= 0; ) {// 使用isDigit判断是否为数字,charAt方法用于返回指定索引处的字符if (!Character.isDigit(inNum.charAt(i))) {flag = false;} else {flag = true;}}for (int j = resultNum.length(); --j >= 0; ) {if (!Character.isDigit(resultNum.charAt(j))) {flag = false;} else {flag = true;}}// 定义一个事务,表示这是事务的结束点results.sampleEnd();if (flag) {Integer num = Integer.parseInt(inNum);Integer rsNum = Integer.parseInt(resultNum);if (num == rsNum) {// 设置SampleResult对象的编码和响应数据results.setResponseData("恭喜你,答对了O(∩_∩)O~\n答案是【" + resultNum + "】", "UTF-8");// 设置SampleResult对象的成功属性,即返回正确还是错误results.setSuccessful(true);} else if (num > rsNum) {results.setResponseData("好像大了点~~~~(>_<)~~~~ \n您输入的是【" + inNum + "】", "UTF-8");results.setSuccessful(false);} else {results.setResponseData("好像小了点~~~~(>_<)~~~~ \n您输入的是【" + inNum + "】", "UTF-8");results.setSuccessful(false);}} else {results.setResponseData("请输入数字:~~~~(>_<)~~~~ \n您输入的inNum是【" + inNum + "】,resultNum是【" + resultNum + "】", "UTF-8");results.setSuccessful(false);}return results;}// 测试结束方法,用于结束性能测试中的每个线程,实际运行时,每个线程仅执行一次,在测试方法运行结束后执行public void teardownTest(JavaSamplerContext arg0) {}}

然后将上面的代码打包成jar包,生成的包名称为TestNum.jar,在IntelliJ IDEA中的操作如下:

点击File->Project Structure点击Project Structure界面左侧的Artifact依次点击底部的+>JAR>Empty输入这个jar的Name,下面有这个jar包生成的路径Output directory在Output Layout中点击+>Module Output给这个jar包添加Module Output点击OK退出Project Structure面板最后依次点击Build>Build Artifacts…>TestNum>Build/Rebuild

生成jar包后,将jar包拷贝到Jmeter的lib/ext目录下。之后启动Jmeter,添加线程组和Java请求,同时为了方便,我们用随机数函数来随机抽取数字,验证与resultNum匹配的结果,再添加察看结果树和聚合报告。

设置线程数为10,执行后可以看到,10个请求中,有3个请求回答正确,响应数据对应了我们的代码,表示执行成功。

通过使用Jmeter自定义Java测试代码,再配合Jmeter自带的各种函数,就可以实现绝大多数的性能测试需求。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。