电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

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

来源:金蝶云社区作者:金蝶2024-09-239

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请求

苍穹的一个功能一般需要执行多个请求才能完成,比如批量审核、登录等。其操作中包含多个步骤、多个计算,直接罗列请求,当请求数较多时,不...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信