首页 > 编程语言 > 详细

【转】性能测试分享---java协议(1)------jemter篇

时间:2015-06-08 16:57:40      阅读:1706      评论:0      收藏:0      [点我收藏+]

转自:http://blog.csdn.net/weiweicao0429/article/details/8941081

主要用到了两个性能测试工具,一个是jmeter,一个是LoadRunner。

使用jmeter的测试方法:

1、下载jemeter的linux版本的,下载的文件里包含了两个jar包,一个是ApacheJMeter_core.jar,ApacheJMter_java.jar。分别把这两个jar放到eclipse的Java Build Path的libraries下面。

2、创建编写脚本的类,使他继承AbstractJavaSamplerClient。初步结构是

  1. private SampleResult results;
  2. public void setupTest(JavaSamplerContext arg0) {
  3. results = new SampleResult();
  4. }
  5. public Arguments getDefaultParameters() {
  6. Arguments params = new Arguments();
  7. return params;
  8. }
  9. //测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于LoadRunner中的Action方法
  10. public SampleResult runTest(JavaSamplerContext arg0) {
  11. results.sampleStart();
  12. results.sampleEnd();
  13. results.setSuccessful(true);
  14. return results;
  15. }
  16. //结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行,类似于LoadRunner中的end方法
  17. public void teardownTest(JavaSamplerContext arg0) {
  18. }
private SampleResult results;

public void setupTest(JavaSamplerContext arg0) {
 results = new SampleResult();
 }

public Arguments getDefaultParameters() {
 Arguments params = new Arguments();
 return params;
 }

//测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于LoadRunner中的Action方法
 public SampleResult runTest(JavaSamplerContext arg0) {

results.sampleStart();

results.sampleEnd();
 results.setSuccessful(true);
 return results;
 }

//结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行,类似于LoadRunner中的end方法
 public void teardownTest(JavaSamplerContext arg0) {
 }

将需要循环的业务流程放到runTest方法里。编写好的代码如下:

  1. package app; 
  2.  
  3. import http.HttpClient4; 
  4. import http.HttpParameter; 
  5. import http.HttpResp; 
  6. import http.JsonUtil; 
  7.  
  8. import java.io.IOException; 
  9. import java.text.ParseException; 
  10. import java.text.SimpleDateFormat; 
  11. import java.util.Calendar; 
  12. import java.util.Date; 
  13. import java.util.Map; 
  14. import java.util.Random; 
  15.  
  16. import org.apache.commons.httpclient.HttpClient; 
  17. import org.apache.commons.httpclient.HttpException; 
  18. import org.apache.commons.httpclient.methods.PostMethod; 
  19. import org.apache.jmeter.config.Arguments; 
  20. import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; 
  21. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; 
  22. import org.apache.jmeter.samplers.SampleResult; 
  23.  
  24. import com.yeepay.g3.utils.common.encrypt.AES; 
  25. import com.yibao.utils.des3.RSA_Encrypt; 
  26.  
  27. public class TheardTest extends AbstractJavaSamplerClient{ 
  28. private SampleResult results; 
  29. public void setupTest(JavaSamplerContext arg0) { 
  30. results = new SampleResult(); 
  31. } 
  32. public Arguments getDefaultParameters() { 
  33. Arguments params = new Arguments(); 
  34. return params; 
  35. } 
  36. public static String ramdonNum(int num){ 
  37. Random rd = new Random(); 
  38.  
  39. StringBuilder sb = new StringBuilder(""); 
  40. if (num <1){ 
  41. return null; 
  42. } 
  43. else{ 
  44. for(int i=1;i<=num;i++){ 
  45. int sr=rd.nextInt(9); 
  46. sb.append(String.valueOf(sr)); 
  47.  
  48. } 
  49. return sb.toString(); 
  50.  
  51. }} 
  52.  
  53. public static void testCreditPay() throws ParseException{ 
  54. String PUBLIC_KEY=TheardTest.testConsult(); 
  55. HttpClient client = new HttpClient(); 
  56. PostMethod method = new PostMethod("http://xxxxxxxx/xxxxxx/api/bankcard/credit/pay"); 
  57. String key=TheardTest.ramdonNum(6); 
  58. String encryptkey = "0123456789"+key; 
  59. String merchantAccount = "YB01000000078"; 
  60. //民生 
  61. String cardNo ="XXXXXXXXX"; 
  62. String validthru="xxx7"; 
  63. String cvv2 = "6xx"; 
  64. String phone = "13xxxxxx5431"; 
  65. String orderId = "33hhkssseef3utyt2"+key; 
  66. System.out.println(orderId); 
  67.  
  68. Integer transtime = (int)(System.currentTimeMillis()/1000); 
  69. Integer currency = 156; 
  70. String  amount = "50"; 
  71. String productcatalog = "1"; 
  72. String productName = "123"; 
  73. String productDesc = "小丸子"; 
  74. String userIp = "123.45.45.45"; 
  75. String identityId = "a"; 
  76. Integer identityType = 6; 
  77. String other = "eeee"; 
  78.  
  79. String data = "{\"merchantaccount\":\"" + merchantAccount 
  80. +"\",\"cardno\":\"" + cardNo 
  81. + "\",\"validthru\":\"" + validthru 
  82. + "\",\"cvv2\":\"" + cvv2 
  83. + "\",\"phone\":\"" + phone 
  84. + "\",\"orderid\":\"" + orderId 
  85. + "\",\"transtime\":" + transtime 
  86. + ",\"currency\":" + currency 
  87. + ",\"amount\":" + amount 
  88. + ",\"productcatalog\":\"" + productcatalog 
  89. + "\",\"productname\":\"" + productName 
  90. + "\",\"productdesc\":\"" + productDesc 
  91. + "\",\"userip\":\"" + userIp 
  92. + "\",\"identityid\":\"" + identityId 
  93. + "\",\"identitytype\":" + identityType 
  94. + ",\"other\":\"" + other + "\"}"; 
  95. data = AES.encryptToBase64(data, encryptkey); 
  96. try { 
  97. method.setParameter("merchantaccount", merchantAccount); 
  98. method.setParameter("data", data); 
  99. method.setParameter("encryptkey", RSA_Encrypt.encrypt(encryptkey, PUBLIC_KEY)); 
  100. client.executeMethod(method); 
  101. System.out.println(method.getStatusLine()); 
  102. String respStr = method.getResponseBodyAsString(); 
  103. System.out.println(respStr); 
  104. String result = AES.decryptFromBase64(respStr, encryptkey); 
  105. System.out.println(result); 
  106. //                    自动退款 
  107. Map<String, Object> mapjson=JsonUtil.parse(result); 
  108. Object obj = mapjson.get("yborderid"); 
  109. String yborderid=obj.toString(); 
  110. System.out.println("流水号:"+yborderid); 
  111. TheardTest.refundTeseCase(yborderid,merchantAccount,amount); 
  112. method.releaseConnection(); 
  113. } catch (HttpException e) { 
  114. // TODO Auto-generated catch block 
  115. e.printStackTrace(); 
  116. } catch (IOException e) { 
  117. // TODO Auto-generated catch block 
  118. e.printStackTrace(); 
  119. } catch (Exception e) { 
  120. // TODO Auto-generated catch block 
  121. e.printStackTrace(); 
  122. } 
  123. } 
  124.  
  125. /**
  126. * 测试协商接口
  127. * @author shangwei
  128. * @return
  129. * @throws ParseException
  130. *
  131. */ 
  132.  
  133. public static String testConsult() throws ParseException{ 
  134.  
  135. String url = "http://xxxxxxx/xxxxxx/consult"; 
  136. HttpClient4 client =HttpClient4.createDefault(); 
  137. String data = ""; 
  138. Date d = new Date(); 
  139. Calendar now = Calendar.getInstance(); 
  140. now.setTime(d); 
  141. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
  142. String dateline=format.format(now.getTime()); 
  143. System.out.println(dateline); 
  144. Date date = format.parse(dateline); 
  145. String dates=date.getTime()/1000+""; 
  146. System.out.println(dates); 
  147. try { 
  148. data = AES.encryptToBase64(dates, "12345678901234HH"); 
  149. } catch (Exception e) { 
  150. e.printStackTrace(); 
  151. } 
  152. HttpParameter parameter = new HttpParameter(); 
  153. parameter.add("data", data); 
  154. parameter.add("merchantaccount", "YB01000000078"); 
  155. HttpResp resp = new HttpResp(); 
  156. try{ 
  157. resp=client.doPost(url, parameter, "utf-8"); 
  158. String respStr= resp.getText("utf-8"); 
  159. System.out.println(respStr); 
  160. String aes=AES.decryptFromBase64(respStr, "12345678901234HH"); 
  161. System.out.println(aes); 
  162. return aes; 
  163. }catch (HttpException e) { 
  164. // TODO Auto-generated catch block 
  165. e.printStackTrace(); 
  166. } catch (IOException e) { 
  167. // TODO Auto-generated catch block 
  168. e.printStackTrace(); 
  169. } catch (Exception e) { 
  170. // TODO Auto-generated catch block 
  171. e.printStackTrace(); 
  172. } 
  173. client.shutdown(); 
  174. return "出错啦"; 
  175.  
  176. } 
  177.  
  178. public static void refundTeseCase(String yborderid,String merchantAccount,String amount) throws IOException{ 
  179.  
  180. String url ="http://xxxxxxxx/xxxxxxx/api/refund/direct"; 
  181. HttpClient4 client =HttpClient4.createDefault(); 
  182. HttpParameter parameter = new HttpParameter(); 
  183. parameter.add("merchantaccount", merchantAccount); 
  184. parameter.add("merchantrefundid", "093032323"); 
  185. parameter.add("transorderid", yborderid); 
  186. parameter.add("amount", amount); 
  187.  
  188. HttpResp rep; 
  189. try { 
  190. rep = client.doPost(url, parameter,"utf-8"); 
  191. System.out.println(rep.getStatusCode()); 
  192. System.out.println(rep.getText("utf-8")); 
  193. }catch (Exception e) { 
  194. // TODO Auto-generated catch block 
  195. e.printStackTrace(); 
  196. } 
  197. } 
  198.  
  199. //测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于LoadRunner中的Action方法 
  200. public SampleResult runTest(JavaSamplerContext arg0) { 
  201.  
  202. results.sampleStart(); 
  203. try { 
  204. testCreditPay(); 
  205. } catch (ParseException e) { 
  206. // TODO Auto-generated catch block 
  207. e.printStackTrace(); 
  208. } 
  209. results.sampleEnd(); 
  210. results.setSuccessful(true); 
  211. return results; 
  212. } 
  213.  
  214. //结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行,类似于LoadRunner中的end方法 
  215. public void teardownTest(JavaSamplerContext arg0) { 
  216. } 
  217.  
  218. } 
package app;

import http.HttpClient4;
 import http.HttpParameter;
 import http.HttpResp;
 import http.JsonUtil;

import java.io.IOException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Map;
 import java.util.Random;

import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpException;
 import org.apache.commons.httpclient.methods.PostMethod;
 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.yeepay.g3.utils.common.encrypt.AES;
 import com.yibao.utils.des3.RSA_Encrypt;

public class TheardTest extends AbstractJavaSamplerClient{
 private SampleResult results;
 public void setupTest(JavaSamplerContext arg0) {
 results = new SampleResult();
 }
 public Arguments getDefaultParameters() {
 Arguments params = new Arguments();
 return params;
 }
 public static String ramdonNum(int num){
 Random rd = new Random();

StringBuilder sb = new StringBuilder("");
 if (num <1){
 return null;
 }
 else{
 for(int i=1;i<=num;i++){
 int sr=rd.nextInt(9);
 sb.append(String.valueOf(sr));

}
 return sb.toString();

}}

public static void testCreditPay() throws ParseException{
 String PUBLIC_KEY=TheardTest.testConsult();
 HttpClient client = new HttpClient();
 PostMethod method = new PostMethod("http://xxxxxxxx/xxxxxx/api/bankcard/credit/pay");
 String key=TheardTest.ramdonNum(6);
 String encryptkey = "0123456789"+key;
 String merchantAccount = "YB01000000078";
 //民生
 String cardNo ="XXXXXXXXX";
 String validthru="xxx7";
 String cvv2 = "6xx";
 String phone = "13xxxxxx5431";
 String orderId = "33hhkssseef3utyt2"+key;
 System.out.println(orderId);

Integer transtime = (int)(System.currentTimeMillis()/1000);
 Integer currency = 156;
 String  amount = "50";
 String productcatalog = "1";
 String productName = "123";
 String productDesc = "小丸子";
 String userIp = "123.45.45.45";
 String identityId = "a";
 Integer identityType = 6;
 String other = "eeee";

String data = "{\"merchantaccount\":\"" + merchantAccount
 +"\",\"cardno\":\"" + cardNo
 + "\",\"validthru\":\"" + validthru
 + "\",\"cvv2\":\"" + cvv2
 + "\",\"phone\":\"" + phone
 + "\",\"orderid\":\"" + orderId
 + "\",\"transtime\":" + transtime
 + ",\"currency\":" + currency
 + ",\"amount\":" + amount
 + ",\"productcatalog\":\"" + productcatalog
 + "\",\"productname\":\"" + productName
 + "\",\"productdesc\":\"" + productDesc
 + "\",\"userip\":\"" + userIp
 + "\",\"identityid\":\"" + identityId
 + "\",\"identitytype\":" + identityType
 + ",\"other\":\"" + other + "\"}";
 data = AES.encryptToBase64(data, encryptkey);
 try {
 method.setParameter("merchantaccount", merchantAccount);
 method.setParameter("data", data);
 method.setParameter("encryptkey", RSA_Encrypt.encrypt(encryptkey, PUBLIC_KEY));
 client.executeMethod(method);
 System.out.println(method.getStatusLine());
 String respStr = method.getResponseBodyAsString();
 System.out.println(respStr);
 String result = AES.decryptFromBase64(respStr, encryptkey);
 System.out.println(result);
 //                    自动退款
 Map<String, Object> mapjson=JsonUtil.parse(result);
 Object obj = mapjson.get("yborderid");
 String yborderid=obj.toString();
 System.out.println("流水号:"+yborderid);
 TheardTest.refundTeseCase(yborderid,merchantAccount,amount);
 method.releaseConnection();
 } catch (HttpException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }

/**
 * 测试协商接口
 * @author shangwei
 * @return
 * @throws ParseException
 *
 */

public static String testConsult() throws ParseException{

String url = "http://xxxxxxx/xxxxxx/consult";
 HttpClient4 client =HttpClient4.createDefault();
 String data = "";
 Date d = new Date();
 Calendar now = Calendar.getInstance();
 now.setTime(d);
 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 String dateline=format.format(now.getTime());
 System.out.println(dateline);
 Date date = format.parse(dateline);
 String dates=date.getTime()/1000+"";
 System.out.println(dates);
 try {
 data = AES.encryptToBase64(dates, "12345678901234HH");
 } catch (Exception e) {
 e.printStackTrace();
 }
 HttpParameter parameter = new HttpParameter();
 parameter.add("data", data);
 parameter.add("merchantaccount", "YB01000000078");
 HttpResp resp = new HttpResp();
 try{
 resp=client.doPost(url, parameter, "utf-8");
 String respStr= resp.getText("utf-8");
 System.out.println(respStr);
 String aes=AES.decryptFromBase64(respStr, "12345678901234HH");
 System.out.println(aes);
 return aes;
 }catch (HttpException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 client.shutdown();
 return "出错啦";

}

public static void refundTeseCase(String yborderid,String merchantAccount,String amount) throws IOException{

String url ="http://xxxxxxxx/xxxxxxx/api/refund/direct";
 HttpClient4 client =HttpClient4.createDefault();
 HttpParameter parameter = new HttpParameter();
 parameter.add("merchantaccount", merchantAccount);
 parameter.add("merchantrefundid", "093032323");
 parameter.add("transorderid", yborderid);
 parameter.add("amount", amount);

HttpResp rep;
 try {
 rep = client.doPost(url, parameter,"utf-8");
 System.out.println(rep.getStatusCode());
 System.out.println(rep.getText("utf-8"));
 }catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }

//测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于LoadRunner中的Action方法
 public SampleResult runTest(JavaSamplerContext arg0) {

results.sampleStart();
 try {
 testCreditPay();
 } catch (ParseException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 results.sampleEnd();
 results.setSuccessful(true);
 return results;
 }

//结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行,类似于LoadRunner中的end方法
 public void teardownTest(JavaSamplerContext arg0) {
 }

}

3、将写好的class类和该类引入到的类都打成jar包,放到jemter文件的lib/ext文件下。将用到的其他的jar包放到lib文件夹下面。

4、启动jemter后,创建先添加线程组,在添加sampler的java请求,如果之前步骤成功,在类名称下拉列表里会出现测试代码打好jar包的类。之后操作jemter进行测试就OK啦。

 

【转】性能测试分享---java协议(1)------jemter篇

原文:http://www.cnblogs.com/xubc/p/4561179.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!