qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          性能測試分享—JMeter篇

           這周嘗試了一把性能測試,之前都是測試網站的性能測試,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/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啦。
            下面在分享LoadRunner進行性能測試及環境優化。

          posted on 2014-01-02 09:24 順其自然EVO 閱讀(861) 評論(0)  編輯  收藏 所屬分類: jmeter and badboy

          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 郸城县| 凉城县| 江津市| 黔南| 宁武县| 岑溪市| 阿拉善右旗| 静安区| 信宜市| 湾仔区| 唐山市| 焦作市| 眉山市| 喀什市| 万源市| 丹凤县| 兴安盟| 旬邑县| 正安县| 奉节县| 获嘉县| 修水县| 哈密市| 南阳市| 鸡西市| 绿春县| 固镇县| 镇赉县| 宁南县| 茌平县| 拉萨市| 饶河县| 丰都县| 和田县| 顺义区| 惠安县| 洛宁县| 昌宁县| 毕节市| 邵阳县| 营山县|