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
}

 

 

原文地址:https://www.cnblogs.com/michelle58/p/10736350.html