LR11之java vuser协议脚本开发(md5加密)

 

 

 

一:java vuser使用场景

用app请求系统版本,network,请求方式或post,很多参数进行一个组合,请求了一次或2次md5,生成一串数据,再来请求服务器.对数据进行sign,app用的场景比较多

 

二:准备环境

1、安装jdk

     lr11  安装1.6.32版本

     lr12  安装1.7版本

2、安装完成后,配置环境变量

a、右击我的电脑-高级系统设置-高级,点击环境变量

b、点击新增,弹出框中输入“JAVA_HOME”,变量值输入jdk的安装目录,然后点击确定。(ps:如果已存在JAVA_HOME,则修改变量即可)

 

c、选择path变量,点击编辑

 

d、将“;%JAVA_HOME%\bin”输入path环境变量中,然后点击确定按钮

e、选择CLASSPATH环境变量,点击编辑

f、将“.;%JAVA_HOME%\lib\dt.jar;.;%JAVA_HOME%\lib\tools.jar”加入CLASSPATH变量中,点击确定

ps:%JAVA_HOME%的好处就是,如果jdk换了,直接改JAVA_HOME的路径就可以了.

3、查看jdk配置的环境变量是否生效,在dos命令窗口,输入java -version

出现如上信息,则代表环境变量已生效。

4、安装java编辑工具idea或eclipse工具

idea下载地址:(https://www.jetbrains.com/idea/download/#section=windows,Community免费版)

 

三、在eclipse工具中进行java vuser协议的脚本开发

ps:我本机安装的eclipse工具,我就以该工具进行演示。

 1、打开eclipse工具,点击file----new---java project

 

2、选择项目路径,新建项目名称test0419,点击finish

 

3、新建项目后,在左侧可看到test0419的项目已生成

4、选中src,点击右键new---package,新增一个包

5、输入包名,点击finish

 

 

 

6、新增包成功后,在左侧src下面可看到testmd5包

7、选中testmd5,将代码(ps:有可能是开发给的加密包)复制到testmd5下面

8、复制后,左侧目录显示如下:

 

9、选中项目名称,右击-Build Path----Add External Archives

 

10、选中lib所在位置,将开发给的lib全部导入

11、导入成功,左侧显示如下,且步骤8种的红色报错图标,也不存在了

12、选中testmd5,右击new-class,新建一个TestPayPasswdMd5.java文件

13、在文件中开头,加入如下代码

//引用其他包

package testmd5;

import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

 

14、在main方法中,加入发送post的请求代码

// 定义登录URL地址
String login_url = "http://192.168.117.139:8080/mobile/api/user/login";
// 定义请求的参数
String login_data = "{\"mobile\":\"13800007143\",\"password\":\"123456\"}";
// 调用HttpClientRequest类里面的sendpost方法
String PostResult = HttpClientRequest.sendPost(login_url, login_data);
System.out.println("登录返回:"+ PostResult);
JSONObject jsonobj = new JSONObject(PostResult);
//int不支持,要用 Object
// Object status = jsonobj.get("code");
// System.out.println("code:" +status);
String myInt=jsonobj.get("code").toString();
//Object os=myInt;
int b=Integer.parseInt(myInt.toString());//还可以os.toString()
System.out.println("code:" +b);
// 获取token值
String token = (String) jsonobj.getJSONObject("data").get("token");
System.out.println("token:" +token);

String modifypaypwd_url = "http://192.168.117.139: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);

 

15、对脚本进行调试,调试通过后,可进行lr11的脚本开发。调试通过后的java脚本代码如下:

package testmd5;

import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

public class TestPayPasswdMd5 {

public static void main(String[] args) throws JSONException {
// 定义登录URL地址
String login_url = "http://192.168.117.139:8080/mobile/api/user/login";
// 定义请求的参数
String login_data = "{\"mobile\":\"13800007143\",\"password\":\"123456\"}";
// 调用HttpClientRequest类里面的sendpost方法
String PostResult = HttpClientRequest.sendPost(login_url, login_data);
System.out.println("登录返回:"+ PostResult);
JSONObject jsonobj = new JSONObject(PostResult);
//int不支持,要用 Object
// Object status = jsonobj.get("code");
// System.out.println("code:" +status);
String myInt=jsonobj.get("code").toString();
//Object os=myInt;
int b=Integer.parseInt(myInt.toString());//还可以os.toString()
System.out.println("code:" +b);
// 获取token值
String token = (String) jsonobj.getJSONObject("data").get("token");
System.out.println("token:" +token);

String modifypaypwd_url = "http://192.168.117.139: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);

}
}

16、选择项目名称,点击export

17、选择jar file,点击next

18、选择要导出的项目,及导入文件目录及导入jar包文件名(testmd5.jar),点击finish

19、在导出路径下,导出jar包成功

 

 

四、在lr11中进行java vuser协议的脚本代码开发(post请求)

1、选择file-new virtual user-----java vuser,点击creat

 2、新建后,lr脚本显示如下:

 

3、在脚本开头import如下包:

 

4、将在eclipse工具中调试通过的java vuser(post)代码拷贝,代码如下

 

5、拷贝到lr11action()方法中

 

6、点击vuser----run-time settings ,然后点击下图中"3"标识

 

 7、选择在eclipse中导出的jar包

8、继续导入lib包

9、继续导入jak安装路径下\lib目录下的dt.jar和tools.jar包

 

 10、点击ok按钮,导入所以包成功

 

11、加强脚本,在脚本中添加事务,断言。至此,lr11中java vuser协议脚本代码如下: 

/*
* LoadRunner Java script. (Build: _build_number_)
*
* Script Description:
*
*/

import lrapi.lr;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
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 testmd5.MD5;
import testmd5.HttpClientRequest;

public class Actions
{

public int init() throws Throwable {
return 0;
}//end of init


public int action() throws Throwable {
// 定义登录URL地址
String login_url = "http://192.168.117.139:8080/mobile/api/user/login";
// 定义请求的参数
String login_data = "{\"mobile\":\"13800007143\",\"password\":\"123456\"}";
// 调用HttpClientRequest类里面的sendpost方法

lr.start_transaction("登录");

String PostResult = HttpClientRequest.sendPost(login_url, login_data);
System.out.println("登录返回:"+ PostResult);//返回的json串
JSONObject jsonobj = new JSONObject(PostResult);//讲json串放到Object对象里面
// Object status = jsonobj.get("code");
String myInt=jsonobj.get("code").toString();//将myint转换为string
int b=Integer.parseInt(myInt.toString());//将b转换为int
System.out.println("code:" +b);//打印b的内容
//加断言,判断事务是否成功
if (b == 0)
{

lr.end_transaction("登录", lr.PASS);

}
else
{
lr.end_transaction("登录", lr.FAIL);
}
// 获取token值
String token = (String) jsonobj.getJSONObject("data").get("token");
System.out.println("token:" +token);//打印token值
//定义重置支付密码的url
String modifypaypwd_url = "http://192.168.117.139:8080/mobile/api/user/resetpaypwd";
// 调用md5类里面的getmd5code这个方法,将密码进行md5加密
String newPasswod = MD5.GetMD5Code("123456");
System.out.println("newPasswod:" +newPasswod);//打印md5加密后的密码
String modifypaypwd_data = "{\"token\":\""+token+"\",\"password\":\""+newPasswod+"\"}";//定义重置支付密码请求参数
//发送重置支付密码请求

lr.start_transaction("重置支付密码");
String PostMd5Result = HttpClientRequest.sendPost(modifypaypwd_url, modifypaypwd_data);
System.out.println("PostMd5Result:" + PostMd5Result);//打印post请求返回的json串

JSONObject jsonobjpasswod = new JSONObject(PostMd5Result);//讲json串放到Object对象里面
String passwodcode=jsonobjpasswod.get("code").toString();
int newcode=Integer.parseInt(passwodcode.toString());//将b转换为int
System.out.println("重置支付密码后code状态为" +newcode);//打印b的内容
//加断言,判断事务是否成功
if (newcode == 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
}

 

12、运行脚本,响应内容如下:

 

 上图可看成脚本中事务通过了。

 

 

五、在eclipse工具中进行java vuser协议的脚本开发(get请求方法)

 

 

12、选中testmd5,右击new-class,新建一个TestGet.java文件

 

13、在文件中开头,加入如下代码

//引用其他包

package testmd5;

import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

 

14、在main方法中,加入发送get的请求代码

// 定义登录URL地址
String login_url = "http://192.168.117.139:8080/mobile/api/user/login";
// 定义请求的参数
String login_data = "{\"mobile\":\"13800007143\",\"password\":\"123456\"}";
// 调用HttpClientRequest类里面的sendpost方法
String PostResult = HttpClientRequest.sendPost(login_url, login_data);
System.out.println("登录返回:"+ PostResult);
JSONObject jsonobj = new JSONObject(PostResult);
String myInt=jsonobj.get("code").toString();
int b=Integer.parseInt(myInt.toString());
System.out.println("code:" +b);
// 获取token值
String token = (String) jsonobj.getJSONObject("data").get("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.117.139:8080/mobile/api/order/getorders?";
String param = "offset=0"+"&"+"token="+token;


// 把token替换成tokenUTF8
String Param = param.replace(token, tokenUTF8);
String GetResult = HttpClientRequest.sendGet(get_url, Param);
System.out.println("GetResult:" + GetResult);
JSONObject jsonobj1 = new JSONObject(GetResult);

String myint1=jsonobj1.get("code").toString();
int status=Integer.parseInt(myint1);
System.out.println("code:" +status);
if (status == 0)
{

System.out.println("12344444:" );

}
else
{
System.out.println("66666" );
}

 

15、对脚本进行调试,调试通过后,可进行lr11的脚本开发。调试通过后的java脚本代码如下:

package testmd5;

import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class TestGet {

public static void main(String[] args) throws JSONException {
// 定义登录URL地址
String login_url = "http://192.168.117.139:8080/mobile/api/user/login";
// 定义请求的参数
String login_data = "{\"mobile\":\"13800007143\",\"password\":\"123456\"}";
// 调用HttpClientRequest类里面的sendpost方法
String PostResult = HttpClientRequest.sendPost(login_url, login_data);
System.out.println("登录返回:"+ PostResult);
JSONObject jsonobj = new JSONObject(PostResult);
String myInt=jsonobj.get("code").toString();
int b=Integer.parseInt(myInt.toString());
System.out.println("code:" +b);
// 获取token值
String token = (String) jsonobj.getJSONObject("data").get("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.117.139:8080/mobile/api/order/getorders?";
String param = "offset=0"+"&"+"token="+token;


// 把token替换成tokenUTF8
String Param = param.replace(token, tokenUTF8);
String GetResult = HttpClientRequest.sendGet(get_url, Param);
System.out.println("GetResult:" + GetResult);
JSONObject jsonobj1 = new JSONObject(GetResult);

String myint1=jsonobj1.get("code").toString();
int status=Integer.parseInt(myint1);
System.out.println("code:" +status);
if (status == 0)
{

System.out.println("12344444:" );

}
else
{
System.out.println("66666" );
}

}
}

16、选择项目名称,点击export

17、选择jar file,点击next

18、选择要导出的项目,及导入文件目录及导入jar包文件名(testmd5.jar),点击finish

19、在导出路径下,导出jar包成功

 

 

六、在lr11中进行java vuser协议的脚本代码开发(get请求)

1、选择file-new virtual user-----java vuser,点击creat

 2、新建后,lr脚本显示如下:

 

3、在脚本开头import如下:

 

4、将在eclipse工具中调试通过的java vuser(post)代码拷贝,代码如下

 

 

5、拷贝到lr11action()方法中

 

6、点击vuser----run-time settings ,然后点击下图中"3"标识

 

 7、选择在eclipse中导出的jar包

8、继续导入lib包

9、继续导入jak安装路径下\lib目录下的dt.jar和tools.jar包

 

 10、点击ok按钮,导入所以包成功

 

11、加强脚本,添加事务、断言,至此lr11中java vuser协议脚本代码如下: 

/*
* LoadRunner Java script. (Build: _build_number_)
*
* Script Description:
*
*/

import lrapi.lr;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
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 java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import testmd5.MD5;
import testmd5.HttpClientRequest;
public class Actions
{

public int init() throws Throwable {
return 0;
}//end of init


public int action() throws Throwable {
// 定义登录URL地址
String login_url = "http://192.168.117.139:8080/mobile/api/user/login";
// 定义请求的参数
String login_data = "{\"mobile\":\"13800007143\",\"password\":\"123456\"}";

// 调用HttpClientRequest类里面的sendpost方法
String PostResult = HttpClientRequest.sendPost(login_url, login_data);
System.out.println("登录返回:"+ PostResult);
JSONObject jsonobj = new JSONObject(PostResult);
String myInt=jsonobj.get("code").toString();
int b=Integer.parseInt(myInt.toString());
System.out.println("code:" +b);
// 获取token值
String token = (String) jsonobj.getJSONObject("data").get("token");
System.out.println("token:" +token);

String tokenUTF8 = "";
// 将token进行URLcode转码
try {
tokenUTF8 = URLEncoder.encode(token, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//定义geturl地址
String get_url = "http://192.168.117.139:8080/mobile/api/order/getorders?";
//定义请求参数
String param = "offset=0"+"&"+"token="+token;


// 把token替换成tokenUTF8
String Param = param.replace(token, tokenUTF8);

lr.start_transaction("获取订单列表");

String GetResult = HttpClientRequest.sendGet(get_url, Param);
System.out.println("订单列表返回结果:" + GetResult);

 

JSONObject jsonobj1 = new JSONObject(GetResult);

String myint1=jsonobj1.get("code").toString();
int status=Integer.parseInt(myint1);
System.out.println("获取订单列表返回的code:" +status);
if (status == 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
}

 

12、运行脚本,响应内容如下:

 

 

 上图可看成脚本中事务通过了。

 

 

七、总结:

1、java vuser协议脚本开发时的思路如下:

      a、先了解开发算法,问开发要算法

      b、在idea工具或eclipse工具里面去调用相应的算法

      c、调试算法没有问题

2、调用md5的方法

// 调用md5类里面的getmd5code这个方法
String newPasswod = MD5.GetMD5Code("123456");

3、获取返回的json方法

///获取code(int)

 JSONObject jsonobj = new JSONObject(PostResult);
 String myInt=jsonobj.get("code").toString();
int b=Integer.parseInt(myInt.toString());//还可以os.toString()
// 获取token值(string)
String token = (String) jsonobj.getJSONObject("data").get("token");
System.out.println("token:" +token);

4、将code转换为urlcode的方法

String tokenUTF8 = "";
// 进行URLcode
try {
tokenUTF8 = URLEncoder.encode(token, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

// 把token替换成tokenUTF8
String Param = param.replace(token, tokenUTF8);

 

八:调试过程中,出现的问题

1、日志出现json.JSONException:Expected a ',' or '}' at character 388 of 错误

 分析原因:转码问题

解决方法:在HttpClientRequest中的sendGet  方法里面加上utf-8格式

2、在开发工具中调试脚本时,出现Object不能转换为int

 

解决方法:

JSONObject jsonobj = new JSONObject(PostResult);
//int不支持,要用 Object
String myInt=jsonobj.get("code").toString();//获取jsonobj对象中code值,并转换为string
int b=Integer.parseInt(myInt.toString());//再将string转换为int

 

转载于:https://www.cnblogs.com/feiyang450blogs/p/10735299.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值