Loadrunner与idea编写加密的java Vusers脚本总结

时间:2023-03-09 02:40:21
Loadrunner与idea编写加密的java Vusers脚本总结

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
            Loadrunner与idea编写加密的java Vusers脚本总结Loadrunner与idea编写加密的java Vusers脚本总结Loadrunner与idea编写加密的java Vusers脚本总结
Loadrunner与idea编写加密的java Vusers脚本总结Loadrunner与idea编写加密的java Vusers脚本总结
 2. 创建主要测试脚本,本例中创建的脚本名字为TestPayPasswdMd5:
  1)本项目使用的是application/json方式,所以需要使用:
    public static void main(String[] args) throws JSONException { }
  2)post 请求方式编写套入如下,以登录为例:
    /登录URL地址
    //登录请求的参数
    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地址
    //拼接参数部分--直接跟转码后的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…-->
        Loadrunner与idea编写加密的java Vusers脚本总结Loadrunner与idea编写加密的java Vusers脚本总结
        2) 选择打包的文件路径以及类名,点击OK
            Loadrunner与idea编写加密的java Vusers脚本总结Loadrunner与idea编写加密的java Vusers脚本总结
        3)输入导出jar包名,以及导入地址
            Loadrunner与idea编写加密的java Vusers脚本总结Loadrunner与idea编写加密的java Vusers脚本总结
  • loadrunner中新建java Vusers协议脚本

   1)导入Run-time Settings 中导入lib包,jdk中dt.jar与tool.jar,以及刚刚打的加密算法jar包
         Loadrunner与idea编写加密的java Vusers脚本总结Loadrunner与idea编写加密的java Vusers脚本总结
   2)脚本的Actions中引入HttpClientRequest,MD5,TestPayPasswdMd5导入的包以及导入MD5与HttpClientRequest文件,记得到包
    Loadrunner与idea编写加密的java Vusers脚本总结Loadrunner与idea编写加密的java Vusers脚本总结
  3)将idea工具中刚编写的脚本贴入到Actions文件中
    Loadrunner与idea编写加密的java Vusers脚本总结Loadrunner与idea编写加密的java Vusers脚本总结
  4)在加上if对事务进行判断是否正确,java Vusers中事务使用点的方式连接,如下所示
    lr.start_transaction("login");
    lr.end_transaction("login", lr.PASS);
  5)具体脚本如下所示,脚本中包含登录,重置密码,下单,支付订单,获取订单列表(支付的订单是有些问题,不知道为什么下单未返回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 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.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
}