jmeter的使用(四)
jmeter如何调用java程序呢,下面做简单介绍。
1、打开eclipse,新建项目,导入jmeter依赖的包ApacheJMeter_core.jar和ApacheJMeter_java.jar,这两个包在jmeter安装目录下的lib里,如需要其它jmeter的包,可在lib目录下找。
2、新建类继承AbstractJavaSamplerClient,完整代码如下:
package com.test; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingClientConnectionManager; import org.apache.http.util.EntityUtils; 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; import com.sun.org.apache.bcel.internal.classfile.Code; /** * @ClassName: FirstTest * @Description: TODO(这里用一句话描述这个类的作用) * @author qiaojiafei * @date 2016年1月5日 下午6:18:33 * */ public class FirstTest extends AbstractJavaSamplerClient { private String a; private String b; /** Holds the result data (shown as Response Data in the Tree display). */ private String resultData; // 这个方法是用来自定义java方法入参的。 // params.addArgument("num1","");表示入参名字叫num1,默认值为空。 //设置可用参数及的默认值; public Arguments getDefaultParameters() { Arguments params = new Arguments(); params.addArgument("username", ""); params.addArgument("password", ""); return params; } //每个线程测试前执行一次,做一些初始化工作; public void setupTest(JavaSamplerContext arg0) { } //开始测试,从arg0参数可以获得参数值; public SampleResult runTest(JavaSamplerContext arg0) { a = arg0.getParameter("username"); b = arg0.getParameter("password"); SampleResult sr = new SampleResult(); sr.setSampleLabel( "Java请求开始"); try { sr.sampleStart();// jmeter 开始统计响应时间标记 // 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。 resultData = FirstTest.login(a, b); if (resultData != null && resultData.length() > 0) { sr.setResponseData("请求结果是:"+resultData, null); sr.setDataType(SampleResult.TEXT); } // System.out.println(resultData); sr.setSuccessful(true); } catch (Throwable e) { sr.setSuccessful(false); e.printStackTrace(); } finally { sr.sampleEnd();// jmeter 结束统计响应时间标记 } return sr; } //测试结束时调用; public void teardownTest(JavaSamplerContext arg0) { } // main只是为了调试用,最后打jar包的时候注释掉。 /* public static void main(String[] args) { // TODO Auto-generated method stub Arguments params = new Arguments(); params.addArgument("num1", "1");//设置参数,并赋予默认值1 params.addArgument("num2", "2");//设置参数,并赋予默认值2 JavaSamplerContext arg0 = new JavaSamplerContext(params); FirstTest test = new FirstTest(); test.setupTest(arg0); test.runTest(arg0); test.teardownTest(arg0); } */ public static String login(String name, String pwd) throws Exception{ final String APPLICATION_JSON = "application/json"; final String CONTENT_TYPE_TEXT_JSON = "text/json"; DefaultHttpClient client = new DefaultHttpClient( new PoolingClientConnectionManager()); String url = "http://172.16.30.208:8092/svc/login"; String js = "{\"username\":"+name+",\"password\":"+pwd+"}"; HttpPost httpPost = new HttpPost(url); httpPost.setHeader("Content-Type", "application/json;charset=UTF-8"); StringEntity se = new StringEntity(js); se.setContentType(CONTENT_TYPE_TEXT_JSON); httpPost.setEntity(se); HttpResponse response = null; response = client.execute(httpPost); //----------判断是否重定向开始 int code = response.getStatusLine().getStatusCode(); String newuri=""; if (code == 302) { org.apache.http.Header header = response.getFirstHeader("location"); // 跳转的目标地址是在 HTTP-HEAD 中的 newuri = header.getValue(); // 这就是跳转后的地址,再向这个地址发出新申请,以便得到跳转后的信息是啥。 System.out.println(newuri); System.out.println(code); httpPost = new HttpPost(newuri); httpPost.setHeader("Content-Type", "application/json;charset=UTF-8"); se = new StringEntity(js); se.setContentType(CONTENT_TYPE_TEXT_JSON); httpPost.setEntity(se); response = client.execute(httpPost); code = response.getStatusLine().getStatusCode(); System.out.println("login"+code); } //------------重定向结束 HttpEntity entity = null; entity = response.getEntity(); String s2 = EntityUtils.toString(entity, "UTF-8"); System.out.println(s2); return s2; } }
3、将该项目打成jar包,放入jmeter安装目录下的apache-jmeter-2.13\lib\ext里,其它依赖的包放入apache-jmeter-2.13\lib里
4、启动jmeter,新建组->java请求->查看结果树,即可看到如下:
5、运行后,查看结果树:
注意:
程序依赖的包一定记得放入lib目录里,如果使用httpclient,jmeter自带的httclientjar包比较老,可删除老的,放入新版的jar包
******************************************************************************************************************************************
作者:乔叶叶
博客地址:http://www.cnblogs.com/qiaoyeye/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
******************************************************************************************************************************************
作者:乔叶叶
博客地址:http://www.cnblogs.com/qiaoyeye/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
******************************************************************************************************************************************
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?