准备工作

JDK的要求

LR11: JDK1.6

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

LR12:JDK1.7

jdk1.8换为jdk1.7的配置

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

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

 JAVA_HOME = C:\Program Files\Java\jdk1.7.0_25

CLASSPATH = .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

 Path = ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 

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

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

3. 在"C:\Windows\System32"下找到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免费版

loadrunner之Java Vuser协议脚本编写 随笔 第1张

java vuser 协议脚本开发

 打开IEDA 工具,选择jdk1.7

loadrunner之Java Vuser协议脚本编写 随笔 第2张

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

部分参考代码:

 

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":"成功调用"

脚本思路

loadrunner之Java Vuser协议脚本编写 随笔 第3张

 错误处理

导入httpClientRequest 之后报错:

loadrunner之Java Vuser协议脚本编写 随笔 第4张

原因:依赖包没导入:

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

loadrunner之Java Vuser协议脚本编写 随笔 第5张loadrunner之Java Vuser协议脚本编写 随笔 第6张

loadrunner之Java Vuser协议脚本编写 随笔 第7张

loadrunner之Java Vuser协议脚本编写 随笔 第8张

未引入lib:

loadrunner之Java Vuser协议脚本编写 随笔 第9张

点击小灯泡抛出异常

loadrunner之Java Vuser协议脚本编写 随笔 第10张

打包编辑build

loadrunner之Java Vuser协议脚本编写 随笔 第11张

选择输出的目录

 loadrunner之Java Vuser协议脚本编写 随笔 第12张

loadrunner之Java Vuser协议脚本编写 随笔 第13张

去打包

loadrunner之Java Vuser协议脚本编写 随笔 第14张

进度条正在build

loadrunner之Java Vuser协议脚本编写 随笔 第15张

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

 

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

loadrunner之Java Vuser协议脚本编写 随笔 第16张

loadrunner之Java Vuser协议脚本编写 随笔 第17张

注意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
}

 

 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄