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为例,AbstractJavaSamplerClient包括以下四个方法:
getDefaultParameters():设置参数;
setupTest():初始化;
runTest():执行;
teardownTest():结束。
Step 1:设置参数
设置getDefaultParameters()方法的参数。登录的入参包括:用户名、密码、环境url地址、数据中心accountId,示例代码如下所示:
设置getDefaultParameters()方法的参数示例
Step 2:初始化
初始化:setupTest()方法,登录的入参传入JavaSamplerContext对象。
初始化setupTest()方法示例
Step 3:执行run
执行:runTest()方法。此处为重要部分,在此执行登录的方法。
执行runTest()方法示例
相关代码如下:
//主体执行部分。 @Override public SampleResult runTest(JavaSamplerContext javaSamplerContext) { //new一个SampleResult对象,用来实现计时、结果回写等操作。 SampleResult sr=new SampleResult(); //初始化业务功能类。业务功能类就是真正用来实现请求发送的类。 //业务操作 try { //请求开始计时 sr.sampleStart(); //调用业务方法。 String result= kerpsessionId(uname,upasswd,uurl,uaccountId); //设置显示的请求数据,非必须。 sr.setSamplerData("username:"+uname+",passwd:"+upasswd+",accountId:"+uaccountId); //设置显示的响应数据,必须。 sr.setResponseData("KERPSESSIONIDbigdata:"+result+";",sr.TEXT); //设置请求的结束状态。 sr.setSuccessful(true); } catch (Exception e) { sr.setResponseData("fail msg:"+e.getMessage(),sr.TEXT); sr.setSuccessful(false); } finally { //请求结束计时。 sr.sampleEnd(); } return sr; }
Step 4:结束
结束:方法teardownTest()。比如可以在此计算整个过程的耗时。
2.3 生成Jar包
将工程打包成可执行性的Jar包,并将Jar包放入Jmeter_HOME\lib\ext目录。
生成Jar包示例
2.4 执行Java请求
以管理员身份打开Jmeter,创建线程组、Java Request、聚合报告,进行测试,如下图所示:
创建Java Request示例
选中Sampler“登录-java请求”,点击下图的绿色三角执行请求。
执行请求示例
3 Java请求的优势
之前的登录实现,需要执行五个请求、填写十几个参数,并且需将较长的RSA加密代码放到请求中。
现在的Java请求实现,只需执行一个请求、填写四个参数,精简明了,如下图所示:
Java请求与普通请求对比示例
另外Jmeter的Java请求,可以规避Beanshell脚本的语法限制,扩展性强,可用于实现更复杂的场景。
4 划重点
1. Java请求具备以下功能亮点:
将实现批量审核、登录等功能所需执行的多个请求变为一个请求;
隐藏请求的前置条件和后置条件,做进一步封装,使测试及结果简明清晰;
规避Beanshell脚本的语法限制,扩展性强,可用于实现更复杂的场景。
2. 实现Java请求的具体步骤如下:
创建一个Java工程:将Jmeter的lib目录下的Jar文件添加进此工程的Build Path,并创建一个类,实现某个功能;
实现JavaSamplerClient接口或继承AbstractJavaSamplerClient;
Export Runnable Jar File,将此Jar包放入Jmeter_HOME\lib\ext目录;
执行Java请求,以管理员身份打开Jmeter,创建线程组、Java Request、聚合报告,进行测试。
#往期推荐#
更多精彩内容,“码”上了解!↓
Jmeter高阶系列--四步教你玩转Java请求
本文2024-09-23 01:12:16发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144438.html