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

Loadrunner与idea编写加密的java Vusers脚本总结的更多相关文章

  1. 【原创】LoadRunner Java Vuser脚本的配置和调试指南

    1 编写目的 本文介绍了Loadrunner多负载压力机的配置,并通过测试Java Vuser的数据库连接脚本对配置结果进行了验证,同时对配置过程中遇到的问题和解决的过程进行了记录,关于Java数据库 ...

  2. 自定义编写jmeter的Java测试代码

    我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如LoadRunner就有很多自定义脚本的协议,比如"C Vuser","JavaV ...

  3. 搭建java开发环境、使用eclipse编写第一个java程序

    搭建java开发环境.使用eclipse编写第一个java程序 一.Java 开发环境的搭建 1.首先安装java SDK(简称JDK). 点击可执行文件 jdk-6u24-windows-i586. ...

  4. 如何编写跨平台的Java代码

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  5. LoadRunner利用ODBC编写MySql脚本

    最近做了几周的LoadRunner测试,有一些心得,记录下来,以便以后查找. LoadRunner测试数据库是模拟客户端去连接数据库服务器,因此,需要协议(或者说驱动的支持).LoadRunner本身 ...

  6. 【安装eclipse, 配置java环境教程】 编写第一个java程序

    写java通常用eclipse编写,还有一款编辑器比较流行叫IJ.这里我们只说下eclipse编写java的前期工作. 在安装eclipse之前要下载java的sdk文件,即java SE:否则无法运 ...

  7. 老李分享:loadrunner的java user脚本开发

    老李分享:loadrunner的java user脚本开发 poptest在性能测试loadrunner的课程里,以web协议为主,同时也讲解其他协议的脚本开发,对于一个性能测试工程师需要掌握一个以上 ...

  8. 从零自学Java-1.编写第一个Java程序

    编写第一个Java程序 完成工作:1.在文本编辑器中输入一个Java程序. 2.使用括号组织程序. 3.保存.编译和运行程序. package com.Jsample;//将程序的包名称命名为com. ...

  9. javascript md5 二次加密 和 java md5 二次加密结果不同

    最近研究httpclient post 时遇到了一个问题,很费解. js  md5(str) 和 java md5(str),第一次md5 加密结果一样,(当时忽略了大小写问题,java 大写,js小 ...

随机推荐

  1. 利用ResultFilter实现asp.net mvc 页面静态化

    为了提高网站性能.和网站的负载能力,页面静态化是一种有效的方式,这里对于asp.net mvc3 构架下的网站,提供一种个人认为比较好的静态话方式. 实现原理是通过mvc提供的过滤器扩展点实现页面内容 ...

  2. 纪念一下学写pipeline时脑子里的坑

    用的是filespipeline,用的存储地址是images的地址 测试煎蛋ooxx首页,shell测试的时候返回很多列表,但是实际爬的时候一直只返回一条,很烦,一直测一直测,就是不行,后来才发现,首 ...

  3. Centos7 pcs pacemaker高可用安装配置详解

  4. ORA-01589解决

    错误展现如下: sqlplus /nolog SQL> conne /as sysdbaConnected.SQL> shutdown abortORACLE instance shut ...

  5. 孙子兵法的计是最早的SWOT分析,《孙子兵法》首先不是战法,而是不战之法。首先不是战胜之法,而是不败之法

    孙子兵法的计是最早的SWOT分析,<孙子兵法>首先不是战法,而是不战之法.首先不是战胜之法,而是不败之法 在打仗之前,你要详细地去算. 计算的目的是什么呢?孙子说,是为了知胜,就是为了知道 ...

  6. Oarcle之group by关键字与having关键字

    group by关键字    *group by :分组由 作用: 用于对于查询的数据进行分组并进行处理 例如:select deptno ,job from emp group by deptno, ...

  7. vue获取路由地址栏url里面的指定参数

    this.$route.query.gid     //gid是获取指定参数的名字

  8. centos6.9 PHP的编译安装并连接nginx

    1.安装yum -y install libxml2-devel openssl-devel bzip2-devel libmcrypt-devel 解决php包的依赖关系,可能libmcrypt会报 ...

  9. 高级shell 脚本

    1.函数 函数是一个脚本代码块,你可以为其命名并在代码中任何位置重用.要在脚本中使用该代码块时,只要使用所起的函数名就行了(这个过程称为调用函数).本节将会介绍如何在shell脚本中创建和使用函数 创 ...

  10. Linux启动过程简述

    Linux启动过程: 图片来自:https://www.cnblogs.com/codecc/p/boot.html 简单来讲: 加载BIOS–>读取MBR–>Boot Loader–&g ...