Jmeter高阶系列--四步教你玩转Java请求

苍穹的一个功能一般需要执行多个请求才能完成,比如批量审核、登录等。其操作中包含多个步骤、多个计算,直接罗列请求,当请求数较多时,不易于管理,如下图:

批量审核、登录所需请求数示例
有些请求的前置条件和后置条件需要大量的代码实现,代码直接暴漏在一个请求的脚本里,显臃肿,易读性差,如下图:

加密代码直接暴露在Jmeter中示例
有些复杂的场景用Jmeter的普通请求组件也难以实现。
对此,该如何解决呢?
别担心,本期小编告诉你一个好方法!多个请求变成一个请求;前置条件和后置条件隐藏,做进一步封装,使测试及结果简明清晰;用Jmeter实现更复杂的场景等等,都可以通过Java请求来解决。
1 什么是Java请求
Jmeter的Java请求,即基于Jmeter的测试框架编写测试用例。通过编写Java代码创建一个工程,由工程中的类实现各种功能,比如批量提交、批量审核、登录等,然后继承Jmeter提供的类或者实现Jmeter提供的接口,最后做成一个可执行性的Jar包。
实现步骤如下:
1)创建一个Java工程
将Jmeter的lib目录下的Jar文件添加进此工程的Build Path;
创建一个类,实现某个功能。
2)实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写以下方法:
public Arguments getDefaultParameters():设置可用参数及默认值;
public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做初始化工作;
public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
public void teardownTest(JavaSamplerContext arg0):测试结束时调用。
3)Export Runnable Jar File,将此Jar包放入Jmeter_HOME\lib\ext目录;
4)执行Java请求,以管理员身份打开Jmeter,创建线程组、Java Request、聚合报告,进行测试。
2 Java请求的具体实现
此处以苍穹的登录为实例。
2.1 创建一个Java工程
创建一个Java工程,并将Jmeter的lib目录下的Jar文件添加进此工程的Build Path,编写代码实现登录的功能。

创建Java工程示例
相关代码如下:
public static String kerpsessionId(String uname,String upasswd,String uurl,String uaccountId){
//请求变量
String username=uname;
String passwd=upasswd;
String url=uurl;
String accountId=uaccountId;
//构建过去publicKey的请求参数
//url
String publicKeyPath=url+"/auth/getPublicKey.do";
//body
String username_random=RandomStringUtils.randomAlphanumeric(9);
String accessKey=username+username_random;
Map<String,Object> param =new HashMap<String,Object>();
param.put("accessKey",accessKey);
param.put("language","zh_CN");
Map<String,String> header =new HashMap<String,String>();
header.put("Content-Type","application/x-www-form-urlencoded");
//发送请求,获取publicKey
String responsePublicKey=HttpClientGetAndPost.doPost(publicKeyPath,param,header);
//将publickey转换成JSON,获取publicKey的字符串
JSONObject jsonObject = JSONObject.parseObject(responsePublicKey);
String publicKey=jsonObject.getString("publicKey");
//构建login的请求
//对密码进行RSA加密
String RSA_PUB_KEY=publicKey;
String RSApasswd ="";
try {
RSApasswd = Base64.encodeBase64String(encryptByPublicKey(passwd.getBytes(), RSA_PUB_KEY));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//login的url
String urlLogin=url+"/auth/yzjlogin.do";
//login的body
Map<String,Object> paramLogin =new HashMap<String,Object>();
paramLogin.put("type","user");
paramLogin.put("userSourceType",2);
paramLogin.put("accountId",accountId);
paramLogin.put("useraccount",username);
paramLogin.put("password",RSApasswd);
paramLogin.put("accessKey",accessKey);
String responseLogin=HttpClientGetAndPost.doPost(urlLogin,paramLogin,header);
//获取cookie/token
String header2=HttpClientGetAndPost.doPostHeader(urlLogin,paramLogin,header);
return header2;
}注:本文主要介绍Java请求,登录的代码比较长,只贴出一部分。
2.2 实现JavaSamplerClient接口或继承AbstractJavaSamplerClient
以继承AbstractJavaSamplerClient为例,AbstractJavaSamplerCli
Jmeter高阶系列--四步教你玩转Java请求
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



