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
    }

     

     

  • 相关阅读:
    Android开发之Sqlite的使用
    ZOJ 3607 Lazier Salesgirl
    ZOJ 3769 Diablo III
    ZOJ 2856 Happy Life
    Ural 1119 Metro
    Ural 1146 Maximum Sum
    HDU 1003 Max Sum
    HDU 1160 FatMouse's Speed
    Ural 1073 Square Country
    Ural 1260 Nudnik Photographer
  • 原文地址:https://www.cnblogs.com/michelle58/p/10736350.html
Copyright © 2011-2022 走看看