zoukankan      html  css  js  c++  java
  • loadrunner之Java Vuser协议脚本编写

    准备工作

    JDK的要求

    LR11: JDK1.6

    LR12:JDK1.7

    jdk1.8换为jdk1.7的配置

    如何快速方便切换jdk两个版本的方法

    1. 配置好环境变量(我的是64bit系统)

     JAVA_HOME = C:Program FilesJavajdk1.7.0_25

    CLASSPATH = .;%JAVA_HOME%lib;%JAVA_HOME%lib ools.jar

     Path = ;%JAVA_HOME%in;%JAVA_HOME%jrein; 

    2.  找到环境变量"Path", 把"C:/ProgramData/Oracle/Java/javapath"去掉.

     PS:这是1.8新增加的,在此目录下,会有3个exe的快捷方式java.exe、javaw.exe、javaws.exe 

    3. 在"C:WindowsSystem32"下找到java.exe、javaw.exe和javaws.exe删掉

    4. 关掉cmd重开,就能看到是新的版本(一定要关闭然后重启,不然的话新的环境变量不会在当前cmd生效)JDK  1.7 -> 1.8。只需要更改JAVA_HOME的路径即可来回切换.

    下载java编写工具idea

    下载地址:https://www.jetbrains.com/idea/download/#section=windowsCommunity免费版

    java vuser 协议脚本开发

     打开IEDA 工具,选择jdk1.7

    新建项目-选择文件路径-生成

    部分参考代码:

     

    package testMd52;

    import org.codehaus.jettison.json.JSONObject;
    import java.io.UnsupportedEncodingException;
    import org.codehaus.jettison.json.JSONException;
    import testMd52.HttpClientRequest;
    import testMd52.MD5;

    public class TestPayPasswordMd5 {
    //写登录,再进行重置密码

    public static void main(String[] args) throws UnsupportedEncodingException, JSONException {
    String login_url="http://192.168.198.110:8080/mobile/api/user/login";
    String login_data="{"mobile":"13026172019","password":"123456"}";
    //post 请求,用已经封装好的去调用 testMd52.HttpClientRequest
    //发现报红:去引用lib包
    String postResult= HttpClientRequest.sendPost(login_url,login_data);
    System.out.println("返回:"+postResult);
    //如何获取token,并进行关联
    JSONObject jsonobj = new JSONObject(postResult);
    int status = (int) jsonobj.get("code");
    System.out.println("code:" +status);
    // 获取token值
    String token = (String) jsonobj.getJSONObject("data").get("token"); //注意token位置
    System.out.println("token:" +token);

    String modifypaypwd_url = "http://192.168.198.110:8080/mobile/api/user/resetpaypwd";
    // 调用md5类里面的getmd5code这个方法
    String newPasswod = MD5.GetMD5Code("123456");
    System.out.println("newPasswod:" +newPasswod);
    String modifypaypwd_data = "{"token":""+token+"","password":""+newPasswod+""}";
    String PostMd5Result = HttpClientRequest.sendPost(modifypaypwd_url, modifypaypwd_data);
    System.out.println("PostMd5Result:" + PostMd5Result);

    }
    }
    运行结果:getMd5Result:{"code":0,"msg":"成功调用"

    脚本思路

     错误处理

    导入httpClientRequest 之后报错:

    原因:依赖包没导入:

    如何导入: 注意:导入的是文件夹,不是压缩包

    未引入lib:

    点击小灯泡抛出异常

    打包编辑build

    选择输出的目录

     

    去打包

    进度条正在build

    Build 完后,目录:目录在前面的输出选择中

     

    lr中新建项目选择java vuser 协议去导入包和代码

    注意MD5找不到的话就去重新建个包,放入包中,重新build  去日志中引入对应的包

     

    利用lrjava vuser协议完成md5加密请求,并if判断

    参考代码:

    /*
     * LoadRunner Java script. (Build: _build_number_)
     * 
     * Script Description: 
     *                     
     */
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    import org.codehaus.jettison.json.JSONObject;

    import lrapi.lr;

    import testMd52.MD5;             //不清楚那个目录,可加个.
    import testMd52.HttpClientRequest;

    public class Actions
    {

        public int init() throws Throwable {
        
            return 0;
        }//end of init

        //注意写在action 中
        public int action() throws Throwable {
                 String login_url="http://192.168.198.110:8080/mobile/api/user/login";
            String login_data="{"mobile":"13026172019","password":"123456"}";
            //post 请求,用已经封装好的去调用 HttpClientRequest
            //发现报红:去引用lib包
            //开始登录的事物
            lr.start_transaction("登录开始");
            String postResult=HttpClientRequest.sendPost(login_url,login_data);
            System.out.println("返回:"+postResult);
            //如何获取token,并进行关联
            JSONObject jsonobj = new JSONObject(postResult);
            int status = (int) jsonobj.get("code");
            System.out.println("code:" +status);
            if(status==0)
            {
                lr.end_transaction("登录成功",lr.PASS);
            }
            else
            {
                lr.end_transaction("登录失败",lr.FAIL);
            }
            lr.end_transaction("登录结束", lr.AUTO);
            // 获取token值
            String token = (String) jsonobj.getJSONObject("data").get("token");  //注意token位置
            System.out.println("token:" +token);

            String modifypaypwd_url = "http://192.168.198.110:8080/mobile/api/user/resetpaypwd";
            // 调用md5类里面的getmd5code这个方法
            String newPasswod = MD5.GetMD5Code("123456");
            System.out.println("newPasswod:" +newPasswod);
            String modifypaypwd_data = "{"token":""+token+"","password":""+newPasswod+""}";
            String PostMd5Result = HttpClientRequest.sendPost(modifypaypwd_url, modifypaypwd_data);
            System.out.println("PostMd5Result:" + PostMd5Result);
            return 0;
        }//end of action


        public int end() throws Throwable {
            return 0;
        }//end of end
    }

     

    利用lrjava vuser协议完成获取订单列表 

    运行之后得到结果:getMd5Result:{"code":11,"msg":"无效的令牌","data":{}}

    如何解决无效的令牌问题

    原因是token需要转码,解决方法如下:

    参考代码:

    /*
     * LoadRunner Java script. (Build: _build_number_)
     * 
     * Script Description: 
     *                     
     */
     
    package testMd52;
    import org.codehaus.jettison.json.JSONObject;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    import org.codehaus.jettison.json.JSONException;

    import lrapi.lr;

    public class Actions
    {

        public int init() throws Throwable {
            return 0;
        }//end of init

        //获取订单列表

        public int action() throws Throwable {
            String login_url="http://192.168.198.110:8080/mobile/api/user/login";
            String login_data="{"mobile":"13026172019","password":"123456"}";
            //post 请求,用已经封装好的去调用 testMd52.HttpClientRequest
            //发现报红:去引用lib包
            lr.start_transaction("登录开始");
            String postResult= HttpClientRequest.sendPost(login_url,login_data);
            System.out.println("返回:"+postResult);
            //如何获取token,并进行关联
            JSONObject jsonobj = new JSONObject(postResult);
            int status = (int) jsonobj.get("code");
            System.out.println("code:" +status);
            if(status==0)
            {
                lr.end_transaction("登录成功",lr.PASS);
            }
            else
            {
                lr.end_transaction("登录失败",lr.FAIL);
            }
            lr.end_transaction("登录结束", lr.AUTO);
            // 获取token值
            String token = (String) jsonobj.getJSONObject("data").get("token");  //注意token位置
            System.out.println("token:" +token);

            String tokenUTF8="";
            //进行urlcode
            try {
                tokenUTF8= URLEncoder.encode(token, "UTF-8");
            }catch (UnsupportedEncodingException e){
                e.printStackTrace();
            }

            String get_url = "http://192.168.198.110:8080/mobile/api/order/getorders?";
            String param="offset=0"+"&"+"token="+token;

            //替换token 参数
            String newParam=param.replace(token,tokenUTF8);
            //替换新参数
            String getMd5Result = HttpClientRequest.sendGet(get_url, newParam);
            System.out.println("getMd5Result:" + getMd5Result);
            //去获取状态做判断
            int status2 = (int) jsonobj.get("code");
            System.out.println("code:" +status2);
            
            //获取msg
           // int returnMsg = (int) jsonobj.get("msg");
          //  System.out.println("returnMsg:" +returnMsg);
            
          
            
             if(status2==0)
            {
                lr.end_transaction("获取订单成功",lr.PASS);
            }
            else
            {
                lr.end_transaction("获取订单失败",lr.FAIL);
            }
            return 0;
        }//end of action


        public int end() throws Throwable {
            return 0;
        }//end of end
    }

     

     

  • 相关阅读:
    用kettle做ETL时设置mysql连接参数使数据写入速度加快
    infobright社区版rpm包
    mysql在大数据量下性能调优相关参数
    greenplum给某个用户赋予整个schema下所有表的权限
    Linux挂载大于2T的磁盘硬盘
    Centos 系统swap(虚拟内存)管理
    域内
    随便记录一些东西
    有关终端的一些tips
    精悍的指令
  • 原文地址:https://www.cnblogs.com/michelle58/p/10736350.html
Copyright © 2011-2022 走看看