Jmeter JAVA请求

Jmeter Java请求

一、为什么要使用Java请求

现有的post 、 get 无法对加解密及鉴权的接口进行测试,需要进行封装,然后再请求,怎么进行封装?通常使用的方式是使用httpclient 工具类型来操作,下面举一个简单的Java自定义测试代码例子,使用Java编译器编写测试代码

二、完成以下几部曲即可

1、打开IDE(这里我使用的是 eclipse Luna 4.3),创建一个Java工程项目名为enterprise

2、从Jmeter的安装目录lib/ext中拷贝两个文件ApacheJMeter_core.jar(必须)和ApacheJMeter_java.jar(必须)到enterprise项目中,然后引入这两个JAR包;如果需要在eclipse中调试还需要拷贝以下三个工具包可选avalon-framework-4.1.4.jar(jmeter3.2中名称是framework)、jorphan.jar、logkit-2.0.jar。

3、创建一个测试类CipherTypeRSA 继承AbstractJavaSamplerClient存在于ApacheJMeter_java.jar这个JAR包中或实现JavaSamplerClient 接口,两种方式其中一种引用即可调用

4、需要实现四个方法,分别是:

 

三、直接上具体代码

说明:以下代码已脱敏处理,直接复制是跑不通的,主要是领悟其用法

复制代码
  1 package com.hcb.enterprise;2 import java.util.HashMap;3 import java.util.Iterator;4 import java.util.Map;5 import org.apache.jmeter.config.Arguments;6 import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;7 import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;8 import org.apache.jmeter.samplers.SampleResult;9 import org.wlqq.codec.enums.CipherType;10 import org.wlqq.codec.exception.CodecHttpException;11 import org.wlqq.codec.http.client.CodecHttpTemplate;12 import org.wlqq.codec.http.client.HttpTemplateBuilder;13 14 public class CipherTypeRSA extends AbstractJavaSamplerClient  {  15     private String label;16     private String resultData;  17     private String url;18     private String host;19     private String uri;20     private String appId;21     private String privateKey;22     Map<String, String> map = new HashMap<>();23     private static final CodecHttpTemplate CODEC_HTTP_TEMPLATE = HttpTemplateBuilder.create().build();24 25     public Arguments getDefaultParameters() {  26         Arguments params = new Arguments(); 27         params.addArgument("label","exec name");28         params.addArgument("appId", "open-enterprise");  29         params.addArgument("privateKey", "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJPq9N65uR+bHxtUKFv4YgSV5Voa6jLKGhYwPGqAItthp");  30         params.addArgument("host","http://enterprise-api.dev-ag.56qq.com");31         params.addArgument("uri","/server/servicetask/list");32         params.addArgument("content","");33         return params;  34     }  35     36   //每个线程测试前执行一次,做一些初始化工作;  37     public void setupTest(JavaSamplerContext arg0) {  38         Iterator<String> it =arg0.getParameterNamesIterator();39         while(it.hasNext()){40             String key=it.next();41             String value = arg0.getParameter(key);42             if("host".equals(key)){43                 host = arg0.getParameter(key);44             }else if("label".equals(key)){45                 label = arg0.getParameter(key);46             }else if("uri".equals(key)){47                 uri = arg0.getParameter(key);48             }else if("appId".equals(key)){49                 appId = arg0.getParameter(key);50             }else if("privateKey".equals(key)){51                 privateKey = arg0.getParameter(key);52             }else if("content".equals(key)){53                 getContent(arg0.getParameter(key));54             }else{55                 map.put(key, value);56             }57             url = host + uri;58         }59     }  60       61     public SampleResult runTest(JavaSamplerContext arg0) {         62         SampleResult sr = new SampleResult();  63         try {  64             sr.setSampleLabel(label);65             sr.sampleStart();// jmeter 开始统计响应时间标记  66             resultData = doPostSign(url, map, appId, privateKey, CipherType.RSA);67             if (resultData != null && resultData.length() > 0) {  68                 sr.setResponseData(resultData, null);  //将结果输出到结果树当中69                 sr.setDataType(SampleResult.TEXT);    //请求头中会多个类型输出 Data type ("text"|"bin"|""): text70             }  71             //System.out.println(resultData);  //会输出到控制台,使用Jmeter 会输出到控制台或日志里面72             sr.setSuccessful(true);  73         } catch (Throwable e) {  74             sr.setSuccessful(false);  75             sr.setResponseData("Check the input parameters is correct !",null);  76             e.printStackTrace();77         } finally {  78             sr.sampleEnd(); //Jmeter 结束统计响应时间标记  79         }  80         return sr;  81     }  82   83     public void teardownTest(JavaSamplerContext arg0) {  84        85     }  86 /**87     public static void main(String[] args) {  88         Arguments params = new Arguments();  89         params.addArgument("appId", "open-enterprise");  90         params.addArgument("privateKey", "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJPq9N65uR+bHxtUKFv4YgSV5Voa6jLKGhYwPGqAItthp");  91         params.addArgument("host","http://enterprise-api.dev-ag.com");92         params.addArgument("uri","/server/company/get-company-by-name");93         params.addArgument("content", "fullName=XX科技有限公司");94         JavaSamplerContext arg0 = new JavaSamplerContext(params);  95         CipherTypeRSA test = new CipherTypeRSA();  96         test.setupTest(arg0);  97         test.runTest(arg0); 98         test.teardownTest(arg0);99     }  */
100     
101     private  String doPostSign(String url, Map<String, String> params, String appId, String privateKey,
102             CipherType cipherType) throws CodecHttpException {
103         if (params != null) {
104             params.put("__APPID__", appId);
105         }
106         String result = CODEC_HTTP_TEMPLATE.doPostSign(url, params, appId, privateKey, cipherType);
107         return result;
108     }
109     
110     // 拼接的字符串转换成键值对存进map 集合中 content = "a=123&b=&c=234";
111     private  void getContent(String content){
112         if(!content.isEmpty()&&!content.startsWith("&")){
113             String[] list = content.split("&");
114             for(String s:list){
115                 Boolean es = s.endsWith("=");
116                 if(es){
117                     map.put(s.substring(0,s.length()-1),"");
118                 }else{
119                     String[] mapList = s.split("=");
120                     map.put(mapList[0],mapList[1]);
121                 }
122             }
123         }
124     }
125 }  
复制代码

 

四、 把Java项目导出成.jar,并放于apache-jmeter-3.0\lib\ext文件夹里面,Java项目lib的依赖包在打成.jar 时生成,所以不用单独处理

导出

五、创建Jmeter java 请求

六、查看响应结果

 

综上按照以上写个Java请求是没有什么问题的,也没有什么难度,关键的需要准备一个工具类(Java请求加解密、鉴权等的工具类)

 

补充:封装完成的结果函数

复制代码
private void setSampleResultFailed(SampleResult sr, int status, String result) {
sr.setSuccessful(false);
sr.setResponseCode(String.valueOf(status));
sr.setResponseData(result, "UTF-8"); //把响应结果返回到jmeter中
sr.setResponseOK();
}

private void setSampleResultSuccess(SampleResult sr, int status, String result) {
sr.setSuccessful(true);
sr.setResponseCode(String.valueOf(status));
sr.setResponseData(result, "UTF-8");
sr.setResponseOK();
}
复制代码

转载于:https://www.cnblogs.com/AryaZ/p/9525559.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我的微信群里有一个外国人

最近&#xff0c;不知道怎么滴&#xff0c;我的微信群里面多了一个外国华人&#xff0c;然后他在群里面分享了他在国外的生活。实话说&#xff0c;我不曾羡慕过在美国生活的人们&#xff0c;我害怕走在街上突然遇到的枪击事件&#xff0c;也害怕每天面对的肯德基汉堡&#xff0…

第一次收到这么用心的感谢信

今天收到一个读者的感谢信心里特别暖&#xff0c;发出来给大家看看说明这很长时间的付出&#xff0c;说的很多话&#xff0c;是对别人是有帮助的&#xff0c;我也希望能够帮助到更多的人&#xff0c;希望大家有方向&#xff0c;有自己对生活的态度&#xff0c;然后坚持自己的理…

android fragment 底部菜单栏,一句话搞定Android底部导航栏,一键绑定Fragment、ViewPager...

现在大多数App都会用到底部导航栏&#xff0c;比如常见的聊天工具QQ、微信、购物App等等&#xff0c;有了底部导航栏&#xff0c;用户可以随时切换界面&#xff0c;查看不同的内容。它的实现方式也很多&#xff0c;以前大多使用TabHost来实现&#xff0c;但是现在我们有很多更好…

Http协议之报文·方法·状态码

【要点】 1. HTTP协议的主要特点2. HTTP报文的组成部分3. HTTP方法4. POST 和 GET的区别5. HTTP状态码【总结】HTTP协议的主要特点 主要特点&#xff1a;简单快速&#xff0c; 灵活&#xff0c; 无连接&#xff08;非keep-alive&#xff09;&#xff0c;无状态 每个资源URI是固…

MyEclipse 深色主题

Eclipse 是不支持主题的&#xff0c;不过可以通过导入导出perference文件来实现修改文本编辑器配色。 这里是一个深色主题&#xff0c;抓个图给大家看看&#xff1a; 下载地址&#xff1a;http://blog.codefront.net/2006/09/28/vibrant-ink-textmate-theme-for-eclipse/ 这里还…

深入理解嵌入式中重要的编程模型

大家好&#xff0c;我是写代码的篮球球痴。今天我们看一看业界一些著名的编程模型。背景模型是对事物共性的抽象&#xff0c;编程模型就是对编程的共性的抽象。什么是编程的共性呢&#xff1f;最重要的共性就是&#xff1a;程序设计时&#xff0c;代码的抽象方式、组织方式或复…

android v4包自动导入吧,android如何导入v4包的源码

1.我们导入v4包源码却发现没有导入按钮当我们调用android-support-v4.jar里面的控件的时候(这里以android.support.v4.view.ViewPager举例说明)&#xff0c;很多时候还需要查看此控件的源码&#xff0c;我们按住Ctrl键点击如下图中的ViewPager之后会出现如下提示出现这个问题的…

【floyd】【bitset】洛谷 P1841 [JSOI2007]重要的城市 题解

bitset玄学完美优化复杂度&#xff1f; 题目描述 参加jsoi冬令营的同学最近发现&#xff0c;由于南航校内修路截断了原来通向计算中心的路&#xff0c;导致去的路程比原先增加了近一公里。而食堂门前施工虽然也截断了原来通向计算中心的路&#xff0c;却没有使路程增加&#xf…

新风口下:嵌入式AI学习中较好的练手项目(附代码资料/学习视频/学习规划)...

有粉丝问我&#xff1a;“当前乃至未来5-10年&#xff0c;嵌入式开发者还有哪些风口&#xff1f;”画外音&#xff1a;风口的本质&#xff0c;其实就是一段时间的人才供需不平衡。说白了就是由于行业突变&#xff0c;敏锐的资本快速进入&#xff0c;导致短时间内行业大量扩张&a…

Windows 任务栏缩略图自定义程序[更新 Build20100830]

很久没有写一点小玩意儿了&#xff0c;今天终于有了一次机会。这个程序能够对 Windows 7 中的任务栏实时预览缩略图进行一系列个性化的调整&#xff0c;使其使用起来更炫更方便&#xff0c;避免了不方便的注册表修改操作&#xff0c;将其转化为方便图形界面&#xff0c;只需要点…

我接的是地啊,不,你接的是土!

作者&#xff1a;晓宇&#xff0c;排版&#xff1a;晓宇微信公众号&#xff1a;芯片之家&#xff08;ID&#xff1a;chiphome-dy&#xff09;1、我接地了啊&#xff0c;电子设计中&#xff0c;接地是非常重要的&#xff0c;地可不等于土&#xff0c;哈哈&#xff0c;有效的接地…

邻接矩阵-建立图

1.介绍图的相关概念 图是由顶点的有穷非空集和一个描述顶点之间关系-边&#xff08;或者弧&#xff09;的集合组成。通常&#xff0c;图中的数据元素被称为顶点&#xff0c;顶点间的关系用边表示&#xff0c;图通常用字母G表示&#xff0c;图的顶点通常用字母V表示&#xff0c;…

Busybox 制作文件系统并用 Qemu 启动编译的内核镜像

编译内核操作&#xff1a;https://blog.csdn.net/assiduous_me/article/details/120938556安装Busybox操作&#xff1a;https://blog.csdn.net/assiduous_me/article/details/120939319syzDESKTOP-B10G93S:~$ ls -l total 20 drwxr-xr-x 44 syz syz 4096 Oct 26 22:05 busybox …

深入浅出Win32多线程程序设计之线程通信

简介  线程之间通信的两个基本问题是互斥和同步。  线程同步是指线程之间所具有的一种制约关系&#xff0c;一个线程的执行依赖另一个线程的消息&#xff0c;当它没有得到另一个线程的消息时应等待&#xff0c;直到消息到达时才被唤醒。  线程互斥是指对于共享的操作系统…

Kafka Producer源码简述

接着上文kafka的简述&#xff0c;这一章我们一探kafka生产者是如何发送消息到消息服务器的。 代码的入口还是从 kafkaTemplate.send开始 最终我们就会到 org.springframework.kafka.core.KafkaTemplate#doSend方法 这里的关键就是 org.apache.kafka.clients.producer.Producer#…

原来搞单片机也可以面向对象

摘要&#xff1a;在看别人单片机程序时&#xff0c;你也许是奔溃的&#xff0c;因为全局变量满天飞&#xff0c;不知道哪个在哪用了&#xff0c;哪个表示什么&#xff0c;而且编写极其不规范。自己写单片机程序时&#xff0c;也许你也是奔溃的。总感觉重新开启一个项目&#xf…

雅虎年底升级IPv6标准 100万用户恐受影响

雅虎年底升级IPv6标准 100万用户恐受影响 http://network.51cto.com 2011-01-20 17:34 佚名 cnBeta 我要评论(0) 据国外媒体报道&#xff0c;雅虎计划今年年底将主站点Yahoo.com升级为IPv6标准&#xff0c;此举可能会使约100万用户在初期无法访问雅虎站点。据国外媒体报道&…

Linux v4l2框架分析

背景说明&#xff1a;Kernel版本&#xff1a;4.14ARM64处理器&#xff0c;Contex-A53&#xff0c;双核使用工具&#xff1a;Source Insight 3.5&#xff0c; Visio1. 概述V4L2(Video for Linux 2)&#xff1a;Linux内核中关于视频设备驱动的框架&#xff0c;对上向应用层提供统…

JAVA自学笔记23

JAVA自学笔记23 1、多线程 1&#xff09;引入&#xff1a; 2&#xff09;进程 是正在运行的程序。是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。 多进程&#xff1a; 单进程的计算机只能做一件事情&#xff0c;而现在的计算机都可以做…

上午写了一段代码,下午就被开除了~

俗话说得好&#xff0c;“代码写的少&#xff0c;离职少不了”。最近畅游互联网&#xff0c;发现一些离职小技巧&#xff0c;读后&#xff0c;内心被深深地打动了……但是&#xff0c;细细品过之后&#xff0c;发现对我们程序员不太适用了。例如&#xff1a;领导夹菜你转桌&…