当我们使用Jmeter进行接口测试的时候,我们一定会遇到一个问题,那就是如果这些接口不是http协议的,是经过封装以后的接口,用Jmeter该怎么解决呢?

当你想到这个问题,说明你已经了解Jmeter的一些初级应用了,接下来的应用就涉及一些编程能力了,首先我们知道Jmter是纯JAVA开发的工具,也就是说只要你能通过JAVA代码实现的接口请求,在Jmeter中都可以实现,比如JAVA Request,接下来将介绍一些JAVA Request的使用,这次使用的接口是我上次使用的HTTPS请求接口。如果嫌这样麻烦可以找其他实例中的接口,我这里为了方便,并且是有目的性的,实践遇到过坑,所以就这么用了。

1,首先创建一个JAVA工程,这个就不仔细说了。

2,将Jmter的lib目录下的jar文件添加进此工程的Build Path,主要是为了接下来我们要集成Jmeter中的抽象类,所以相当于引用jar包,具体哪几个是必须要引用的还是不太清楚,所以就干脆全引用了。

3.创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写:
1)public Arguments getDefaultParameters():设置可用参数及的默认值;
2)public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
3)public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
4)public void teardownTest(JavaSamplerContext arg0):测试结束时调用;

4.Export为Runnable Jar File;
5.将此jar包放入JMETER_HOME\lib\ext目录;
6.以管理员身份打开JMeter;
7.创建线程组、Java Request、结果树,进行测试;

好了,接下来就上实例

一个是我写好的接口,另一个是JAVA Request类,

这里主要讲JAVA Request的应用,那个类参考我的HTTPS POST JSON的JAVA实现

package https;
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 https.PostJson;
import java.net.MalformedURLException;

public class JavaTest extends AbstractJavaSamplerClient {

private PostJson postjson = null;
private String url;
private String charset;
private String content;
private static long start;
private static long end;
private String resultData;
@Override 
public Arguments getDefaultParameters(){
Arguments params = new Arguments();  
       params.addArgument("url", "0");  
       params.addArgument("charset", "0"); 
       
       return params;

}
@Override
public void setupTest(JavaSamplerContext arg0){
postjson = new PostJson();
url = arg0.getParameter("url");
charset = arg0.getParameter("charset");

start = System.currentTimeMillis();
}
@Override
public SampleResult runTest(JavaSamplerContext arg0){
SampleResult sr = new SampleResult(); 
sr.setSamplerData("请求地址"+url+"编码格式"+charset);
try { 
sr.sampleStart();// jmeter 开始统计响应时间标记
String str = new String(postjson.post(url, charset).getBytes(),"UTF-8");
resultData = str;
if (resultData != null && resultData.length() > 0) {  
                sr.setResponseData("结果是:"+resultData, null);  
                sr.setDataType(SampleResult.TEXT);  
            }  
            Thread.sleep(10);  
             System.out.println(resultData);  
            sr.setSuccessful(true);  
        } catch (Throwable e) {  
            sr.setSuccessful(false);  
            e.printStackTrace();  
        } finally {  
            sr.sampleEnd();// jmeter 结束统计响应时间标记  
        }  
        return sr;  
    }
@Override
public void teardownTest(JavaSamplerContext arg0) {  
        end = System.currentTimeMillis();  
        // 总体耗时  
        System.err.println("cost time:" + (end - start) + "毫秒");  
    }  
public static void main(String[] args) {  
Arguments params = new Arguments();  
        /*Arguments params = new Arguments();  
        params.addArgument("url", "https://bapi.txffp.com/api/service/fpkk");  
        params.addArgument("charset", "UTF-9"); 
        */

//  JavaSamplerContext arg0 = new JavaSamplerContext(params);  
        JavaTest test = new JavaTest();  
      //  test.getDefaultParameters();
        JavaSamplerContext arg0 = new JavaSamplerContext(test.getDefaultParameters());
        test.setupTest(arg0);  
        test.runTest(arg0); 
        test.teardownTest(arg0);  
   } 
}

重写的第一个方法getDefaultParameters,这里是我们请求这个接口是的一些参数,我这里传了URL和CHARSET,为什么不传报文后边会说,这个方法的主要作用就是,

当我们在Jmeter中未传递这个接口的参数时,它做的默认处理,直接写在这里,这样当我们不传参数的时候就自动填写了。

重写的第二个方法setupTest,这里是我们在每个线程执行任务的时候进行的一些初始化工作,将我们已经初始化好的参数作为形参传入第二个函数中,然后通过arg0.getParameter

的方法获得参数

重写的第三个方法runTest,在这个方法里面主要是设置请求报文,并添加测试结果,通过程序进行判断请求成功或者失败,相当于断言。

重写的第四个方法tearDownTest,主要是请求结束后需要我们做的一些事情,我这里记录了请求结束的时间,用来计算请求耗时

在运行时我们既可以通过添加主函数运行也可以通过Jmeter运行,但是我这里试了两种方法,1,在主函数中自己构建参数,2,直接引用getDefaultParameters,这里遇到的问题就是

即使,你自己构建了参数,在Jmeter运行时依然显示默认构造的参数,而且运行时也是传的默认构造的参数,也就是说自己构建的参数没有生效,但是如果通过eclipse运行,那么他取得

参数就是你自己构建的。这个也是自己第一天没写完的原因,当时写到这里心生疑惑,后来看了一下官方api便试了一下,所以大家还是要多动手。

Jmeter之JAVA Request的应用相关推荐

  1. java jmeter_使用Jmeter中的Java Request进行性能测试

    在使用jmeter进行性能测试的时候,有可能会需要通过一些脚本去测试性能,(比如通过sokeeper的api去测试sokeeper的读写性能).这时,我们可以通过Java Request实现,以下是操 ...

  2. jmeter测试java接口测试_简单易学的测试攻略:JMeter测试Java请求示例

    JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100%的用java实现,大家可以到官网下载源代码和查看相关文档. 关于使用JMeter进行JDBC数据库测试.HTTP请求接 ...

  3. Jmeter之HTTP Request Defaults

    Jmeter之HTTP Request Defaults 一.HTTP Request Defaults的作用: 该组件可以为我们的http请求设置默认的值.假如,我们创建一个测试计划有很多个请求且都 ...

  4. 【转】JMeter学习(十七)JMeter测试Java

    目的:对Java程序进行测试 目录 一.核心步骤 二.实例 三.JMeter Java Sampler介绍 四.自带java Request Sampler 一.核心步骤 1.创建一个Java工程: ...

  5. jmeter里看java的log,jmeter中java协议请求

    5.Export为Runnable Jar File:hello.jar 注意:不需要将整个工程导出,只需要选中包名(test)在file菜单中点击export->选java项的jar file ...

  6. 使用JMeter的Java Sampler轻松定制自己的benchmark

    做性能测试,接口测试,非常好 转自  http://www.iteye.com/topic/1123432 以前碰到更多的是WEB APP的性能测试,也许用得最多的是Loadrunner, Web S ...

  7. jmeter的java请求(socket接口)

    socket简介:网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个十分流 ...

  8. 使用jmeter测试java程序

    最近在用jmeter进行性能测试,防止被忘记,把步骤写下. 场景:测试java程序 1.右击测试计划-> 添加 -> Threads(Users) -> 线程组 2.设置线程属性,用 ...

  9. jmeter测试java代码

    有时候总是要写代码的,不得不说你也得会,这不往下看 java请求了,就的写代码,那么先来实现一个类, package com.company.jemeters;public class Hello { ...

最新文章

  1. 将图片的二进制字节 在HTML页面中显示
  2. 胶囊网络(Capsule)实战——keras算法练习
  3. python numba库是什么,如何给python代码加速?JIT、autoit、LLVM
  4. Vue本地执行build之后打开dist目录下index.html正常访问
  5. mysql1064 at line 6,MySQL错误1064语法,但一切似乎都很好
  6. Java内存原型分析:基本知识
  7. 《C语言深度解剖》中的.c/.h 程序模板及函数注释风格
  8. Android 系统(146)----Android进程保活招数概览
  9. vue仿今日头条_字节跳动今日头条前端面经(4轮技术面+hr面)
  10. Windows 7 SP1意味着XP降级的结束
  11. 苹果或弃用Java 称Java已经过时
  12. 3.11 同时创建多个工作表的表头 [原创Excel教程]
  13. 恢复数据的原理和方法
  14. EBS之JTF_Grid 开发总结
  15. opencv答题卡识别
  16. win10创建新的计算机用户名和密码,win10如何新建一个账号用户
  17. k8s部署EFK实现日志管理(mac desktop)
  18. 手机查看html代码工具栏,【Meta标签】实现wap网页去掉手机浏览器默认工具栏
  19. iperf工具的安装和使用
  20. window系统 node.js安装 (node-v14安装配置、node-v16及其他版本安装配置)

热门文章

  1. c++利用飞信API免费发短信
  2. 算法与程序设计(二):递归
  3. 仿真器+编程器+实验板与开发板的区别
  4. 新媒体管家插件永久停服了
  5. session与token的区别
  6. java deep clone util_实现对象深度克隆(deepClone)的三种方案
  7. 找到一个TRACE32-ICD使用说明解除了不少疑惑
  8. 关于注册页面上传头像并在后台处理数据
  9. 有趣的Python图片制作,用QQ好友头像拼接出里昂
  10. 信息安全web服务器安全配置,web服务器的安全设置与管理实验(11页)-原创力文档...