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