java vuser脚本_loadrunner之Java Vuser协议脚本编写

准备工作

JDK的要求

LR11: JDK1.6

LR12: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

184b8c2dda3dacc3e7ba7d1eb9d9c3ce.png

java vuser 协议脚本开发

打开IEDA 工具,选择jdk1.7

ad85237a1269248f6824b7e993e29d44.png

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

部分参考代码:

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

脚本思路

4023c1a5ef3faff0c5126db151b1bcac.png

错误处理

导入httpClientRequest 之后报错:

79660ce0a568bd4bc1c19de5085b3c6c.png

原因:依赖包没导入:

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

6281f98ebcb626eee7a003e70c34bab8.png

cb79366eb1406ba7ef268e98ba048ca9.png

8ab678651af0f9b1a186ae67db9dd2fa.png

89b3e9a92f340fdf6560124791c88139.png

未引入lib:

c7017d45feffdfcf050ae16e05a5d03a.png

点击小灯泡抛出异常

64c0a6e9d7cb1aba48964eebaf62c6bd.png

打包编辑build

35a645268ae7f2056aaa1d1e96158c4a.png

选择输出的目录

2e323f40c152671feef7665c7b6e7a0a.png

2f2ba29a59029311a23e4a8d063b5e67.png

去打包

4a51126a24bc2d2f1712b957252ce2d1.png

进度条正在build

1443dbf1f3799a366eb5e7f7ac7f72ca.png

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

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

46ad8d27e4d98593ddef2e0a933826fa.png

df385deb35f2155ac4a915d30e606481.png

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

利用lr的java 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

}

利用lr的java 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

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值