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包

jmeter的使用(四)的更多相关文章

  1. JMeter【第四篇】参数化

    概念 参数化的原因,并不是网上说的真实模拟不同用户,真实反应服务器性能,而是: 数据唯一性(比如注册名不能一样) 避免数据库查询缓存 如何避免参数化: 去掉唯一性校验的约束 关闭数据库的查询缓存,my ...

  2. JMeter学习(四)参数化

    JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现. 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户 ...

  3. Jmeter(二十四)_服务器性能监控

    下载插件 1.访问网址http://jmeter-plugins.org/downloads/all/,下载三个文件.其中JMeterPlugins-Standard和JMeterPlugins-Ex ...

  4. JMeter—常见问题(十四)

    参考<全栈性能测试修炼宝典JMeter实战>第十五章 JMeter常见问题 1.无法产生负载 注意检查各元件是否时禁用状态.JMeter在运行时是以数形式加载各种元件的,如果父节点被禁用, ...

  5. <转>jmeter(十四)HTTP请求之content-type

    本博客转载自:http://www.cnblogs.com/dinghanhua/p/5646435.html 个人感觉不错,对jmeter最常用的取样器http请求需要用到的信息头管理器做了很好的解 ...

  6. Jmeter(三十四)_Beanshell解析并提取json响应

    1:前置条件 将fastjson-1.2.49.jar包置于jmeter的lib目录下,并将该jar包添加到测试计划的Library中:否则会报:Typed variable declaration ...

  7. Jmeter(十四)Logic Controller 之 If Controller

    If Controller---如果控制器:属于逻辑判断类型的组件,其实学过代码的都知道if--else,while等都是常用的逻辑判断关键词,Jmeter也提供了逻辑判断--If Controlle ...

  8. 【Jmeter自学】Jmeter性能测试(四)

    ==================================================================================================== ...

  9. JMeter学习(四)参数化(转载)

    转载自 http://www.cnblogs.com/yangxia-test JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现. 参数化:录制脚本中有登录操作,需要输入 ...

  10. Jmeter接口测试(四)传递参数

    参数设置 Jmeter 支持通过 查询字符串参数(Query String Parameters) 或者 Request body 请求体来传递参数. 1.get请求是普通键值对 get请求一般通过p ...

随机推荐

  1. windows远程控制

    windows+r  输入 mstsc 打开远程控制 首先,确定目标机器支持远程控制 问题解决: Win7远程桌面提示您的凭据不工作: http://jingyan.baidu.com/article ...

  2. Google OKR 目标管理体系学习

    OKR 全称是「目标和关键成果」(Objectives and Key Results).它是Google在公司创立不足一年的时候,从Intel公司引入的目标管理系统,也常被认为是一套组织测评系统. ...

  3. C#在图片上添加文字代码

    创建.NET WinForm程序,设置项目的默认命名空间为Keleyi.Com,在窗体上添加一个PictureBox控件pictureBox_keleyi_com和一个Button控件button_A ...

  4. 捋一捋Javascript数据类型转换规则

    一.数据类型 5种基本数据类型:Null/Undefined/String/Boolean/Number 1种复杂数据类型:Object 二.数据类型检测 传送门<几种JS数据类型方式及其局限性 ...

  5. 初学Node(四)事件循环

    Node中的事件循环 事件循环是Node的核心,正是因为有了事件循环JS才能够在服务端占有一席之地.JS是一种单线程语言,但是它的执行环境是多线程的在加上JS的事件驱动这一特点,使使JS在执行的过程中 ...

  6. SMW0上传EXCEL模板时报错无分配给对象***的MIME类型

    在使用SMW0上传照片.声音文件.EXCEL模板等文件时,遇到报错提示,如下图所示: 解决办法:需要先维护 .XLS 文件的MIME TYPE,SMW0 打开如下图所示 选择上图红色框中“WebRFC ...

  7. AutoCAD .NET二次开发(四)

    在CAD中,属性信息一般是以注记的形式存在,但当属性数据内容较多时,显示就成了问题.扩展属性(Xdata)可以解决这一问题,比如南方Cass中就利用了这一点.我们经常用Lisp来读取操作扩展属性. 查 ...

  8. 数位类统计问题--数位DP

    有一类与数位有关的区间统计问题.这类问题往往具有比较浓厚的数学味道,无法暴力求解,需要在数位上进行递推等操作.这类问题往往需要一些预处理,这就用到了数位DP. 本文地址:http://www.cnbl ...

  9. 如何避免Activity 被杀死

    我们都知道,在android系统中,内存不足的时候,系统是可以杀死任何暂停.停止或者销毁的Activity.这就意味着基本上没有在前台的Activity都会面临被关闭的可能. Android系统之所以 ...

  10. UIWebView用法详解及代码分享

    今天我们来详细UIWebView用法.UIWebView是iOS内置的浏览器控件,可以浏览网页.打开文档等 能够加载html/htm.pdf.docx.txt等格式的文件. 用UIWebView我们就 ...