性能测试分享---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进行性能测试及环境优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值