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

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

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脚本的语法限制,扩展性强,可用于实现更复杂的场景。


划重点


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原理和结构体系

Jmeter的高阶系列——Beanshell脚本


#  Jmeter高阶系列——使用JDBC协议获取数据

 Jmeter高阶系列—数据参数化及使用场景


更多精彩内容,“码”上了解!↓




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

苍穹的一个功能一般需要执行多个请求才能完成,比如批量审核、登录等。其操作中包含多个步骤、多个计算,直接罗列请求,当请求数较多时,不...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息