码迷,mamicode.com
首页 > 编程语言 > 详细

Jmeter Java请求

时间:2017-08-27 10:13:13      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:分享   asa   生成   finally   操作   tde   还需   map   throws   

一、为什么要使用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 }  
View Code

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

导出

技术分享

Jmeter java 请求

技术分享

响应结果

 技术分享

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

 

Jmeter Java请求

标签:分享   asa   生成   finally   操作   tde   还需   map   throws   

原文地址:http://www.cnblogs.com/unknows/p/7436880.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!