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、jorphan.jar、logkit-2.0.jar。

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

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

  getDefaultParameters():主要用于设置传入的参数;                  须创建此类进行参数的传递 Arguments params = new Arguments();

  setupTest():初始化方法,用于初始化性能测试时的每个线程;     获取参数名称及参数值得2种方式  Iterator<String> it =arg0.getParameterNamesIterator();   或  String value = arg0.getParameter(key);

  runTest():为性能测试时的线程运行体;                                        须创建此类进行包装结果集  SampleResult sr = new SampleResult();     注意以下三个必须添加sr.setSampleLabel(label); sr.sampleStart();  sr.sampleEnd();

  teardownTest():测试结束方法,用于结束性能测试中的每个线程。

三、直接上具体代码

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

  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", "l8wggJbAgEAAoGBAJPq9N65uR+bHxtUKFv4YgSV5Voa6jLKGhYwPGqAItthp+jAUrYQLgfqRfDyEpivqaibYRXk0SFCwoA");
 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"|""): text
 70             }
 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", "l8wggJbAgEAAoGBAJPq9N65uR+bHxtUKFv4YgSV5Voa6jLKGhYwPGqAItthp+jAUrYQLgfqRfDyEpivqaibYRXk0SFCwoA");
 91         params.addArgument("host","http://enterprise-api.dev-ag.56qq.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=234";
111     private  void getContent(String content){
112         if(!content.isEmpty()&&!content.startsWith("&")){
113             String[] list = content.split("&");
114             for(String s:list){
115                 String[] mapList = s.split("=");
116                 map.put(mapList[0],mapList[1]);
117             }
118         }
119     }
120 }  

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

导出

Jmeter java 请求

响应结果

综上按照以上写个Java请求是没有什么问题的,也没有什么难度,关键的需要准备一个工具类(Java请求加解密、鉴权等的工具类),这边主要是讲述工具类的用法,有空对源码进行分析

时间: 2024-10-14 06:23:59

Jmeter Java请求的相关文章

jmeter java 请求 payload

1.注册页面抓包看见内容如下: POST http://test.nnzhp.cn/bbs/forum.php?mod=post&action=edit&extra=&editsubmit=yes HTTP/1.1Host: test.nnzhp.cnConnection: keep-aliveContent-Length: 1311Cache-Control: max-age=0Origin: http://test.nnzhp.cnUpgrade-Insecure-Reques

Jmeter性能测试之如何写Java请求测试用例类

一. 引言: 最近工作中的一个项目要求做性能测试,该项目由提供服务的几个应用组成,选用的框架是阿里巴巴公司开源的服务框架Dubbo.关于Dubbo的介绍,网上也有很多资料,本人只是做了粗略的了解,没有深入研究,相关资料地址如下:http://www.iteye.com/magazines/103,http://alibaba.github.io/dubbo-doc-static/User+Guide-zh.htm#UserGuide-zh-%E6%80%A7%E8%83%BD%E6%B5%8B%

第二篇--Jmeter测试Java请求

前提:需要准备eclipse作为开发工具,安装jdk,准备完毕,接下来开工喽! 1.新建Java工程BMIrisJNIJarTest,新建lib目录,将Jmeter安装目录下lib/ext包下的ApacheJMeter_core.jar和ApacheJMeter_java.jar复制到lib下,然后导入下图jar包   2.AbstractJavaSamplerClient是Java请求的核心接口,实现接口AbstractJavaSamplerClient,sampleResult的开始和结束方

jmeter的http post请求与测试Java请求

1.jmeter 测试Java请求 1.1 建立测试类,在被测程序中添加测试类 1.2 将测试程序打包,打成不可运行的包 1.3 将打好的包,放在$JMETER_HOME/lib/exts下面,把测试包依赖的jar放在$JMETER_HOME/lib 2.jmeter测试https post http://my.oschina.net/u/147181/blog/164873 2.1 填写好地址及路径,协议修改为https 端口和代理默认即可

jmeter中实现java请求实战日志

jmeter中实现java请求思路:采用jmeter提供的框架包,创建一个类,继承类JavaSamplerClient 重写该类的以下四个方法 getDefaultParameters() runTest(JavaSamplerContext context) setupTest(JavaSamplerContext context) teardownTest(JavaSamplerContext context) 重点是通过getDefaultParameters方法构造jmeter参数,将从

性能测试十一:jmeter进阶之java请求

使用Java编写JDBC脚本对Mysql进行增删改查等操作的性能测试 使用Jmeter提供的脚本框架依赖的jar包(分别在jmeter目录下的lib和ext目录下) ApacheJMeter_core.jar ApacheJMeter_java.jar avalon-framework-4.1.4.jar jorphan.jar logkit-2.0.jar 若为4.+以上的jmeter还需加两个 slf4j-api-的.jar包 脚本调试好后,导出为jar包,放在apache-jmeter-3

性能测试十二:jmeter进阶之java请求参数化

如项目中的ip.端口号之类的,都可以在此代码中定义 public Arguments getDefaultParameters() { // TODO Auto-generated method stub return null; } 此处注册两个参数到jmeter的变量池: p_name,默认值设为abc p_desc,默认值设为123 /** * 此函数里面可以人工注册一些参数,这些参数可以在java请求面板里展示或更改 */ @Override public Arguments getDe

jmeter 的java请求代码在main方法里面执行

1.新建一个java请求执行加法类 public class TestDemo { public int Tdemo(int a,int b){ int sum = 0; sum = a+b; return sum; } } 2.再建一个jmeter的java请求类 import org.apache.jmeter.config.Arguments; import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;

利用jmeter发起java请求调用shell脚本

1.创建maven项目 在pom文件中加入依赖: 2.在路径src/main/java下创建类,如类名shellclass 3.      创建jmeter调用类,如jmtershell,完成jmetershell编写后导出成jar包. 3.     将shelljmeter.jar放入jmeter安装路径\lib\ext目录下:将依赖的maven包ganymed-ssh2-210-huson-1.jar放入jmeter安装路径\lib路径下. 4.         在jmeter中创建java