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步

找到控制面板,查看方式选择大图标或者小图标,找到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

            

java可以写自动抢红包脚本吗_json

java可以写自动抢红包脚本吗_System_02

java可以写自动抢红包脚本吗_开发工具_03

 

 

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…-->

        

java可以写自动抢红包脚本吗_System_04

        2) 选择打包的文件路径以及类名,点击OK

            

java可以写自动抢红包脚本吗_System_05

        

        3)输入导出jar包名,以及导入地址

            

java可以写自动抢红包脚本吗_System_06

loadrunner中新建java Vusers协议脚本

   1)导入Run-time Settings 中导入lib包,jdk中dt.jar与tool.jar,以及刚刚打的加密算法jar包

         

java可以写自动抢红包脚本吗_java可以写自动抢红包脚本吗_07

   

   2)脚本的Actions中引入HttpClientRequest,MD5,TestPayPasswdMd5导入的包以及导入MD5与HttpClientRequest文件,记得到包

    

java可以写自动抢红包脚本吗_json_08

  3)将idea工具中刚编写的脚本贴入到Actions文件中

    

java可以写自动抢红包脚本吗_java_09

  4)在加上if对事务进行判断是否正确,java Vusers中事务使用点的方式连接,如下所示

    lr.start_transaction("login");

    lr.end_transaction("login", lr.PASS);

  

  5)Run-time Setting中需要将Miscellaneous 设置为线程方式 Run Vusers as a process,否则执行场景是会报错

    

java可以写自动抢红包脚本吗_java可以写自动抢红包脚本吗_10

 

 

具体脚本如下所示,脚本中包含登录,重置密码,下单,支付订单,获取订单列表(支付的订单是有些问题,不知道为什么下单未返回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 
  
   

    }