Loadrunner与idea编写加密的java Vusers脚本总结
-
准备工作:
jdk版本的选择:
Loadrunner11 使用版本jdk1.6 32位(如果使用1.7的Loadrunner运行会提示Java VM internal error:Error Loading javai.dll.)
Loadrunner12 使用版本jdk1.7 32位
关于多版本jdk切换,如从1.7切换到1.6,可能存在几种情况:
1)直接修改环境变量中JAVA_HOME的值为jdk1.6的安装路径,cmd 运行查看一般就是1.6版本了,但如果发现仍然是1.7版本,请查看第2步
2)找到控制面板,查看方式选择大图标或者小图标,找到java选项并点击进入。然后选择java栏,点击查看,将jdk1.7的启用去掉,并保存,但如果发现仍然是1.7版本,请查看第3步
3)需要将1.6安装目录bin里面的java.exe,javaw.exe,javaws.exe复制到C:\Windows\System32和C:\ProgramData\Oracle\Java\javapath(这是一个隐藏路径),但如果发现仍然是1.7版本,请查看第4步
(备注由于在WINDOWS\System32环境变量中的优先级高于JAVA_HOME设置的环境变量优先级,故如果只修改环境变量JAVA_HOME,jdk的版本并不会切换)
4)运行regedit,找到HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft,修改Java Development Kit的CurrentVersion默认值为1.6,到这边基本就设置好了
-
安装idea工具:
https://www.jetbrains.com/idea/download/#section=windows 页面上的Community免费版
-
IDEA中具体操作
1.准备文件
1)在idea工具中新建一个项目lemon1,且创建对应的包为testmd5
2)可以由开发提供算法,以及调用,也可以由开发给算法,自己编写调用方法,本例中为MD5.java,且将文件导入到testmd5下
3)post与get算法封装方法文件,本来中为HttpClientRequest.java,且将文件导入到testmd5下
4)导入包(以lib为例),使用方法如下:
1.File--->Project Structure--->Libraries--->点击页面上的“+”,选择对应文件下的lib包,再点击Modules的Dependencies页签上的lib
2. 创建主要测试脚本,本例中创建的脚本名字为TestPayPasswdMd5:
1)本项目使用的是application/json方式,所以需要使用:
public static void main(String[] args) throws JSONException { }
2)post 请求方式编写套入如下,以登录为例:
/登录URL地址
String login_URL="http://192.168.69.130:8080/mobile/api/user/login";
//登录请求的参数
String login_Data="{\"mobile\":\"13528223194\",\"password\":\"123456\"}";
//调用HttpClientRequest类中的sendPost
String login_PostResult = HttpClientRequest.sendPost(login_URL,login_Data);
//打印得到的结果
System.out.println("登录返回值为:"+login_PostResult);
//新建一个json对象
JSONObject login_jsonbj =new JSONObject(login_PostResult);
//得到token值
String token =(String) login_jsonbj.getJSONObject("data").get("token");
System.out.println("登录返回的token为:"+token);
3)get 请求方式编写套入如下,以获得订单为例:
//获得订单URL地址
String getorders_URL="http://192.168.69.130:8080/mobile/api/order/getorders?";
//拼接参数部分--直接跟转码后的token,否则报错
// 进行token转码为URLcode方法如下
String tokenUTF8 = "";
try {
tokenUTF8 = URLEncoder.encode(token, "UTF-8");
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String param = "offset=0"+"&"+"token="+tokenUTF8;
//调用HttpClientRequest类中的sendGet
String getorders_PostResult = HttpClientRequest.sendGet(getorders_URL,param);
//打印得到的结果
System.out.println("获得订单返回值为:"+getorders_PostResult);
3.打包,将MD5打包成jar文件MD5.jar
1)File-->Project Structure-->Artifacts-->JAR-->From modules with…-->
2) 选择打包的文件路径以及类名,点击OK
3)输入导出jar包名,以及导入地址
-
loadrunner中新建java Vusers协议脚本
1)导入Run-time Settings 中导入lib包,jdk中dt.jar与tool.jar,以及刚刚打的加密算法jar包
2)脚本的Actions中引入HttpClientRequest,MD5,TestPayPasswdMd5导入的包以及导入MD5与HttpClientRequest文件,记得到包
3)将idea工具中刚编写的脚本贴入到Actions文件中
4)在加上if对事务进行判断是否正确,java Vusers中事务使用点的方式连接,如下所示
lr.start_transaction("login");
lr.end_transaction("login", lr.PASS);
5)Run-time Setting中需要将Miscellaneous 设置为线程方式 Run Vusers as a process,否则执行场景是会报错
6)具体脚本如下所示,脚本中包含登录,重置密码,下单,支付订单,获取订单列表(支付的订单是有些问题,不知道为什么下单未返回payid,导致结算订单有问题)
loadrunner 全流程java Vusers脚本
/*
* LoadRunner Java script. (Build: _build_number_)
*
* Script Description:
*
*/
import lrapi.lr;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
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 java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
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.69.130:8080/mobile/api/user/login";
//登录请求的参数
String login_Data="{\"mobile\":\"13528223194\",\"password\":\"123456\"}";
lr.start_transaction("login");
//调用HttpClientRequest类中的sendPost
String login_PostResult = HttpClientRequest.sendPost(login_URL,login_Data);
//打印得到的结果
System.out.println("登录返回值为:"+login_PostResult);
//新建一个json对象
JSONObject login_jsonbj =new JSONObject(login_PostResult);
int login_code =(int) login_jsonbj.get("code");
if (login_code==0)
{
lr.end_transaction("login", lr.PASS);
}
else
{
lr.end_transaction("login", lr.FAIL);
System.out.println("下订单返回的状态码为:"+login_code);
}
String login_msg =(String) login_jsonbj.get("msg");
System.out.println("登录返回的状态码为:"+login_msg);
//返回的token
String token =(String) login_jsonbj.getJSONObject("data").get("token");
System.out.println("登录返回的token为:"+token);
//重置支付密码
//重置支付密码URL地址
String resetpaypwd_URL="http://192.168.69.130:8080/mobile/api/user/resetpaypwd";
//密码加密转换
String resetpaypwd_newPasswd =MD5.GetMD5Code("123456");
//重置支付密码请求的参数
String resetpaypwd_Data="{\"token\":\""+token+"\",\"password\":\""+resetpaypwd_newPasswd+"\"}";
//调用HttpClientRequest类中的sendPost
lr.start_transaction("resetpaypwd");
String resetpaypwd_PostResult = HttpClientRequest.sendPost(resetpaypwd_URL,resetpaypwd_Data);
//打印得到的结果
System.out.println("重置支付密码返回值为:"+resetpaypwd_PostResult);
JSONObject resetpaypwd_jsonbj =new JSONObject(resetpaypwd_PostResult);
int resetpaypwd_code =(int) resetpaypwd_jsonbj.get("code");
if (resetpaypwd_code==0)
{
lr.end_transaction("resetpaypwd", lr.PASS);
}
else
{
lr.end_transaction("resetpaypwd", lr.FAIL);
System.out.println("下订单返回的状态码为:"+resetpaypwd_code);
}
String esetpaypwd_msg =(String) resetpaypwd_jsonbj.get("msg");
System.out.println("重置支付返回的状态码为:"+esetpaypwd_msg);
//下订单
//下订单URL地址
String addorder_URL="http://192.168.69.130:8080/mobile/api/order/addorder";
//下单请求的参数
String addorder_Data="{\"token\":\""+token+"\",\"getAddrId\":1,\"getCarId\":23,\"payType\":2,\"remark\":\"This is a remark\",\"price\":2.50,\"orders\":[{\"getTime\":1450921104000,\"goodss\":[{\"goodsId\":93,\"count\":1},{\"goodsId\":93,\"count\":1}]}],\"invoiceTitle\":\"abcd\"}";
//调用HttpClientRequest类中的sendPost
lr.start_transaction("addorder");
String addorder_PostResult = HttpClientRequest.sendPost(addorder_URL,addorder_Data);
//打印得到的结果
System.out.println("下订单返回值为:"+addorder_PostResult);
JSONObject addorder_jsonbj =new JSONObject(addorder_PostResult);
int addorder_code =(int) addorder_jsonbj.get("code");
if (addorder_code==0)
{
lr.end_transaction("addorder", lr.PASS);
}
else
{
lr.end_transaction("addorder", lr.FAIL);
System.out.println("下订单返回的状态码为:"+addorder_code);
}
String addorder_msg =(String) addorder_jsonbj.get("msg");
System.out.println("下订单返回信息为:"+addorder_msg);
//返回值里面没有payid信息,why
String payid =(String) addorder_jsonbj.get("msg");
System.out.println("下订单返回的msg为:"+payid);
//支付订单
//支付订单URL地址
String pay_URL="http://192.168.69.130:8080/mobile/api/pay/pay";
//支付订单请求的参数
String pay_Data="{\"token\":\""+token+"\",\"payId\":\"2015092019551300001\",\"payPwd\":\""+resetpaypwd_newPasswd+"\",\"platform\":1}";
lr.start_transaction("pay");
//调用HttpClientRequest类中的sendPost
String pay_PostResult = HttpClientRequest.sendPost(pay_URL,pay_Data);
//打印得到的结果
System.out.println("支付订单返回值为:"+pay_PostResult);
//新建一个json对象
JSONObject pay_jsonbj =new JSONObject(pay_PostResult);
int pay_code =(int) pay_jsonbj.get("code");
System.out.println("支付订单返回的状态码为:"+pay_code);
if (pay_code==0)
{
lr.end_transaction("pay", lr.PASS);
}
else
{
lr.end_transaction("pay", lr.FAIL);
System.out.println("支付订单返回的状态码为:"+pay_code);
}
String pay_msg =(String) pay_jsonbj.get("msg");
System.out.println("支付订单返回的msg为:"+pay_msg);
//获得订单
String tokenUTF8 = "";
// 进行token转码为URLcode
try {
tokenUTF8 = URLEncoder.encode(token, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//获得订单URL地址
String getorders_URL="http://192.168.69.130:8080/mobile/api/order/getorders?";
//拼接参数部分--直接跟转码后的token
String param = "offset=0"+"&"+"token="+tokenUTF8;
lr.start_transaction("getorders");
//调用HttpClientRequest类中的sendGet
String getorders_PostResult = HttpClientRequest.sendGet(getorders_URL,param);
//打印得到的结果
System.out.println("获得订单返回值为:"+getorders_PostResult);
//新建一个json对象
JSONObject getorders_jsonbj =new JSONObject(getorders_PostResult);
int getorders_code =(int) getorders_jsonbj.get("code");
if (getorders_code==0)
{
lr.end_transaction("getorders", lr.PASS);
}
else
{
lr.end_transaction("getorders", lr.FAIL);
System.out.println("获得订单返回的状态码为:"+getorders_code);
}
String getorders_msg =(String) getorders_jsonbj.get("msg");
System.out.println("获得订单返回的msg为:"+getorders_msg);
return 0;
}//end of action
public int end() throws Throwable {
return 0;
}//end of end
}