性能測試分享---java協議(1)------jemter篇

這周嘗試了一把性能測試,之前都是測試網站的性能測試,java接口的性能測試還是頭一次,學到了很多,特此分享一下。

主要用到了兩個性能測試工具,一個是jmeter,一個是LoadRunner。

使用jmeter的測試方法:

1、下載jemeter的linux版本的,下載的文件裏包含了兩個jar包,一個是ApacheJMeter_core.jar,ApacheJMter_java.jar。分別把這兩個jar放到eclipse的Java Build Path的libraries下面。

2、創建編寫腳本的類,使他繼承AbstractJavaSamplerClient。初步結構是

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方法裏。編寫好的代碼如下:

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");
 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";
 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, "23232332");
 } 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";
 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啦。

下面在分享LoadRunner進行性能測試及環境優化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章