使用jmeter可以很方便地对web程序进行性能测试,但是有时候jmeter提供的请求不满足我们的需求,比如我们需要把用户名、密码经过哈希后,再发给服务器校验,这种个性化的情况我们需要自己自定义测试请求,编写测试代码。下面以eclipse为例,简单做一个实现。
- 在Eclipse中新建一个空的java项目,名称随便选择,比如Jmeter-test。
- 下载Jmeter http://jmeter.apache.org/download_jmeter.cgi,下载完毕后解压,我们需要在eclipse中引入Jmeter的两个jar包,ApacheJMetercore.jar、ApacheJMeterjava.jar,这两个jar包在Jmeterlibext文件夹下
- 在Jmeter-test中新建包名,比如com.yeetrack.JmeterTest,在包中新建一个类,如TestJmeter,TestJmeter要继承AbstractJavaSamplerClient。
- 第三步中继承AbstractJavaSamplerClient类,会同时继承4个方法,分别是"getDefaultParameters","setupTest","runTest"和"teardownTest"方法。
- getDefaultParameters方法用于设置默认传入的参数
- SetupTest方法用户初始化性能测试的线程等
- runTest方法是测试主体方法
- teardownTest方法是测试结束方法
- 参考代码如下:
GetPackage.java文件:自定义的GetPackage类
package com.yeetrack.test; import org.apache.jmeter.samplers.SampleResult; import java.io.*; import java.net.MalformedURLException; import java.net.URL; import java.net.URLDecoder; /** * Created with IntelliJ IDEA. * User: youthflies * Date: 13-2-21 * Time: 下午2:44 * To change this template use File | Settings | File Templates. */ public class GetPackage { private String url = "http://www.baidu.com/s"; //请求完整路径,不带参数 private String keyword; //要搜索的关键词 public GetPackage(String keyword) { this.keyword = keyword; } /** * 发出get请求,去访问百度 * @param sr * @return * @throws InterruptedException */ public boolean getTest(SampleResult sr) throws InterruptedException { String queryString = this.keyword; try { queryString = URLDecoder.decode(queryString, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } boolean flag = false; try { URL url = new URL(this.url+"?wd="+queryString); System.out.println(url); InputStream in = url.openStream(); BufferedReader bin = new BufferedReader(new InputStreamReader(in,"utf-8")); String s = null; String result = null; while((s=bin.readLine())!=null) { result+=s; //此处可以手动添加一些校验条件 if(s.contains(queryString)) flag = true; } sr.setResponseMessage("yeetrack.com--OK"); sr.setResponseData(result, "utf-8"); sr.setSamplerData(result); sr.setResponseCodeOK(); } catch (MalformedURLException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } return flag; } }
JmeterTest.java文件:主测试方法,调用GetPackage类中的getTest()方法
package com.yeetrack.test; 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; /** * * @author youthflies * */ public class JmeterTest extends AbstractJavaSamplerClient { private String label = "testBaidu"; private String keyword; public void setupTest(JavaSamplerContext arg0) { System.out.println("setupTest"); } public SampleResult runTest(JavaSamplerContext arg0) { //从参数列表中获取输入的参数 keyword = arg0.getParameter("wd"); SampleResult sr; sr = new SampleResult(); sr.setSampleLabel(label); try { sr.sampleStart(); //记录程序执行时间,以及执行结果 GetPackage test = new GetPackage(keyword); //调用自定义的验证方法 boolean result = test.getTest(sr); if(result) { System.out.println("成功"); sr.setSuccessful(true); sr.setResponseCodeOK(); sr.setRequestHeaders("200"); } else { System.out.println("失败"); sr.setSuccessful(false); } }catch(Throwable e){ sr.setSuccessful(false); }finally{ sr.sampleEnd(); } return sr; } public void teardownTest(JavaSamplerContext arg0) { } /** * 用来设置默认的参数列表 */ public Arguments getDefaultParameters() { Arguments params = new Arguments(); params.addArgument("wd", "易踪网"); return params; } }
- 将代码打成jar包,Eclipse中直接export即可。
注意选择java文件时,要把使用到的java文件都选上,不要遗漏。打完jar包后,将打成的jar文件放到Jmeter的libext目录下。
- 运行Jmeter,添加一个线程组,然后再添加一个java请求。
在类名称中选择自己刚才编写的那个类,
OK,设置好线程,添加”察看结果树“和”聚合报告“直接测试即可。
Jmeter 自定义测试请求(功能完善)
版权声明
本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。
© 空空博客,本文链接:https://www.yeetrack.com/?p=22
近期评论