准备工作
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=windows,Community免费版
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 去日志中引入对应的包
利用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
}