loadrunner中JavaVuser脚本的编写

1、环境准备:

     LoadRunner11----->对应JDK1.6版本(32位)

LoadRunner12----->对应JDK1.7版本(32位)

  (一)、JDK下载安装完成后,配置环境变量:

1)、系统变量→新建 JAVA_HOME 变量 。    变量值填写jdk的安装目录(例如:C:\Program Files (x86)\Java\jdk1.7.0_25)

2)、系统变量→寻找 Path 变量→编辑,在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

3)、系统变量→新建 CLASSPATH 变量,变量值填写   .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)

系统变量配置完毕,检验是否配置成功 运行cmd 输入 java -version (java 和 -version 之间有空格)

若如图所示 显示版本信息 则说明安装和配置成功。(红色框中说明是32位版本)

(二)、下载java编写工具idea

下载地址:https://www.jetbrains.com/idea/download/#section=windows,Community免费版

 2、编写java代码,实例代码以md5加密算法为例,实现登录和获取订单列表的功能。

1)、使用idea工具,新建一个项目,命名为:myjavatest

2)、在该项目下,新建一个包,命名为:mytestMd5

3)、将java代码拷贝到包下,最终目录为:

4)、将lib文件夹引入,解决报错问题:

1、选择File文件,如下:

2、

3、添加之后的显示:

4、将导入的Lib勾选:

5、至此,报错信息已解决,可以直接调试、运行代码。最终目录结构:

3、将调试通过的文件,导出为jar。

1)、选择File:

2)、

3)、

4)、

5)、进行构建:

6)、完成后,目录文件夹下生成jar包文件:

4、在loadrunner中创建JavaVuser协议脚本:

1)、将调试好的java代码拷贝到loadrunner中:

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.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

//引入MD5文件
import mytestMd5.MD5;
//引入HttpClientRequest文件
import mytestMd5.HttpClientRequest;
public class Actions
{

    public int init() throws Throwable {
        return 0;
    }//end of init

    public int action() throws Throwable {
        // 定义登录URL地址
        String login_url = "http://******/mobile/api/user/login";
        // 定义请求的参数
        String login_data = "{\"mobile\":\"130********\",\"password\":\"123456\"}";
        // 调用HttpClientRequest类里面的sendpost方法
        //添加事物函数
        lr.start_transaction("登录");
        String PostResult = HttpClientRequest.sendPost(login_url, login_data);
        System.out.println("登录返回:"+ PostResult);
        JSONObject jsonobj = new JSONObject(PostResult);
        int status = (int) jsonobj.get("code");
        //根据status返回值,判断登录事物是否成功
        if(status == 0)
        {
            lr.end_transaction("登录", lr.PASS);
        }
        else
        {
            lr.end_transaction("登录", lr.FAIL);
        }
        System.out.println("code:" +status);
        //获取token值
        String token = (String) jsonobj.getJSONObject("data").get("token");
        System.out.println("token:" +token);

        String modifypaypwd_url = "http://*********/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);
        return 0;
    }//end of action

    public int end() throws Throwable {
        return 0;
    }//end of end
}

2)、设置RunTime Settings:

1、将lib文件下的包导入

2、将jdk目录lib下的dt.jar、tools.jar导入

3、将构建完成的jar包导入

最终导入的文件如下:

3)、运行效果如下:

Starting iteration 1.
Maximum number of concurrent connections per server: 4      [MsgId: MMSG-26989]
Starting action Actions.
Notify: Transaction "登录" started.
System.out: 登录返回:{"code":0,"msg":"成功调用","data":{"id":443,"username":"test11","sex":1,"age":20,"mobile":"15989576517","email":"[email protected]","gqid":"4000326","money":0.0,"pmoney":100.0,"createtime":1448868217000,"lasttime":1555392298486,"token":"TGBCHgxZMHv83Fu8HtizNy+5m1fVDGlnh/EO4TBvh7K97TNe1L9tEaJNlV/bCCrBxRU/jxaEwo/fQbjJJq9BrA==","identity":"7ca9dfc5987093f8"}}                                                                                                                                                      Notify:
Notify: Transaction "登录" ended with a "Pass" status (Duration: 0.5548).
System.out: code:0                                                                                                                                                      Notify:
System.out: token:TGBCHgxZMHv83Fu8HtizNy+5m1fVDGlnh/EO4TBvh7K97TNe1L9tEaJNlV/bCCrBxRU/jxaEwo/fQbjJJq9BrA==                                                                                                                                                      Notify:
System.out: newPasswod:e10adc3949ba59abbe56e057f20f883e                                                                                                                                                      Notify:
System.out: PostMd5Result:{"code":0,"msg":"成功调用","data":{}}                                                                                                                                                      Notify:
Ending action Actions.
Ending iteration 1.

同样的操作,获取订单列表代码如下:

/*
 * 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;

//引入testmd5.HttpClientRequest文件
import mytestMd5.HttpClientRequest;

public class Actions
{

    public int init() throws Throwable {
        return 0;
    }//end of init

    public int action() throws Throwable {
         // 定义登录URL地址
        String login_url = "http://********/mobile/api/user/login";
        // 定义请求的参数
        String login_data = "{\"mobile\":\"130********\",\"password\":\"123456\"}";
        // 调用HttpClientRequest类里面的sendpost方法

        //添加登录事务函数
        lr.start_transaction("登录");

        String PostResult = HttpClientRequest.sendPost(login_url, login_data);
        System.out.println("登录返回:"+ PostResult);
        JSONObject jsonobj = new JSONObject(PostResult);
        int status = (int) jsonobj.get("code");

        //根据status返回值,判断登录事务是否成功
        if(status == 0)
        {
            lr.end_transaction("登录", lr.PASS);
        }
        else
        {
            lr.end_transaction("登录", lr.FAIL);
        }

        System.out.println("code:" +status);
        // 获取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://**********/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:" + GetResult);

        JSONObject jsonbb = new JSONObject(PostResult);
        int statusbb = (int) jsonbb.get("code");

        //根据statusbb返回值,判断获取订单列表事务是否成功
        if(statusbb == 0)
        {
            lr.end_transaction("获取订单列表", lr.PASS);
        }
        else
        {
            lr.end_transaction("获取订单列表", lr.FAIL);
        }

        System.out.println("code:" +statusbb);
        return 0;
    }//end of action

    public int end() throws Throwable {
        return 0;
    }//end of end
}

运行结果如下:

Starting iteration 1.
Maximum number of concurrent connections per server: 4      [MsgId: MMSG-26989]
Starting action Actions.
Notify: Transaction "登录" started.
System.out: 登录返回:{"code":0,"msg":"成功调用","data":{"id":443,"username":"test11","sex":1,"age":20,"mobile":"15989576517","email":"[email protected]","gqid":"4000326","money":0.0,"pmoney":100.0,"createtime":1448868217000,"lasttime":1555393646521,"token":"TGBCHgxZMHv83Fu8HtizNy+5m1fVDGlnh/EO4TBvh7K97TNe1L9tEaJNlV/bCCrBxRU/jxaEwo/fQbjJJq9BrA==","identity":"7ca9dfc5987093f8"}}                                                                                                                                                      Notify:
Notify: Transaction "登录" ended with a "Pass" status (Duration: 0.4899).
System.out: code:0                                                                                                                                                      Notify:
System.out: token:TGBCHgxZMHv83Fu8HtizNy+5m1fVDGlnh/EO4TBvh7K97TNe1L9tEaJNlV/bCCrBxRU/jxaEwo/fQbjJJq9BrA==                                                                                                                                                      Notify:
Notify: Transaction "获取订单列表" started.
System.out: null--->[HTTP/1.1 200 OK]                                                                                                                                                      Notify:
System.out: Date--->[Tue, 16 Apr 2019 05:47:26 GMT]                                                                                                                                                      Notify:
System.out: Transfer-Encoding--->[chunked]                                                                                                                                                      Notify:
System.out: Content-Type--->[application/json;charset=UTF-8]                                                                                                                                                      Notify:
System.out: Server--->[Apache-Coyote/1.1]                                                                                                                                                      Notify:
System.out: GetResult:{"code":0,"msg":"鎴愬姛璋冪敤","data":{"lists":[]}}                                                                                                                                                      Notify:
Notify: Transaction "获取订单列表" ended with a "Pass" status (Duration: 0.1213).

原文地址:https://www.cnblogs.com/benben-wu/p/10716578.html

时间: 2024-11-05 21:57:24

loadrunner中JavaVuser脚本的编写的相关文章

Loadrunner中web脚本转成JavaVuser脚本

先用web方式录制好脚本,进行参数化,关联验证等操作,之后执行以下步骤: 1)将要转换的web脚本复制出来并保存到web.txt中2)参数界定符部分需要由{}手动修改成<>,包括参数化的和关联验证的等3)打开CMD4)切换到 C:\Program Files\HP\LoadRunner\dat5)运行 ..\bin\sed -f web_to_java.sed c:\web.txt > c:\java.txt6) 新建JavaVuser的工程,把java.txt的内容粘贴到actions

SecureCRT中python脚本编写

SecureCRT中python脚本编写学习指南 SecureCRT python 引言 在测试网络设备中,通常使用脚本对设备端进行配置和测试以及维护:对于PE设备的测试维护人员来说使用较多是SecureCRT工具:SecureCRT支持VB.JavaScript.Python等多种脚本语言,为了实现脚本在CRT中更加丰富稳定地执行,掌握CRT的常用函数是非常有用的.接下来的时间我将对SecureCRT脚本编写的常用函数展开学习应用. 内容 (1)使用python语言实现SecureCRT中的D

SecureCRT中python脚本编写学习指南

SecureCRT中python脚本编写学习指南 SecureCRT python 引言 在测试网络设备中,通常使用脚本对设备端进行配置和测试以及维护:对于PE设备的测试维护人员来说使用较多是SecureCRT工具:SecureCRT支持VB.JavaScript.Python等多种脚本语言,为了实现脚本在CRT中更加丰富稳定地执行,掌握CRT的常用函数是非常有用的.接下来的时间我将对SecureCRT脚本编写的常用函数展开学习应用. 内容 (1)使用python语言实现SecureCRT中的D

loadrunner脚本中写入脚本输出log到外部文件,分析参数取值方式

loadrunner脚本中写入脚本输出log到外部文件,分析参数取值方式 分类: 心得 loadrunner 我的测试 2012-04-01 12:52 2340人阅读 评论(0) 收藏 举报 脚本loadrunnerstreamfilestring测试 .controller中运行脚本时无法查看输出log,可以手动写入代码输出log到外部文件,通过查看该log获得相关信息: 以下脚本是为了分析场景中多用户运行时参数列表如何取值(id,groupid,sid,uname),设置集合点后通过查看时

JavaVuser脚本开发-环境搭建

众所周知,loadrunner可以使用多种协议进行性能测试.这里不得不提到JavaVuser协议. 你是否已经厌烦了在loadrunner脚本开发中,使用各种c函数进行复杂的字符串拼接,解析报文? 那么为什么不使用loadrunner提供的JavaVuser协议开发基于java的脚本呢. 1.前提 可以直接使用Java提供的逻辑代码的场景. 2.环境 loadrunner11.0 jdk1.6.32_x86_32 3.新建脚本 选择JavaVuser协议 4.设置Java环境 Vuser--Ru

LoadRunner下载文件脚本

LoadRunner下载文件脚本 在看普泽关于pezybase的测试报告的时候,发现里面有用到jmeter(http协议)并发测试下载文件,考虑到后面可能需要在公司pezybase的并发下载,把之前使用过的loadrunner下载文件脚本重新运行和整理一下. 一.http协议 loadrunner使用http协议是无法录制到下载过程的,只会往服务器发送一个下载请求,其实服务器已经把数据返回给客户端了,但是loadrunner是录制不到保存文件到本地这个过程,所以就是需要我们手动把收到的内容保存打

loadrunner调用QTP脚本来实现性能测试

一封邮件让我周末不得不加班研究如何来模拟实际生产环境.大致需求是根据抄表段编号和电费年月来查询该抄表段下的用户的缴费情况,一个抄表段有几百到两千的用户.需要并发的查询不同抄表段下用户的缴费情况,并依次打印该抄表段下每个用户的缴费情况. 对于这样的问题,开始我想挺好解决的,只要在脚本中加个循环控制语句就好了,但实际测试才知道,loadrunner在向服务器提交数据的时候有一个ID是没有规律的,顿时闷了一下,之前的想法就这样绝望了.经过仔细考虑,打印发票是每台电脑直连一台打印机的,也就是说不能通过一

老李分享:loadrunner用javavuser进行接口测试

老李分享:loadrunner用javavuser进行接口测试 在这里分享一个poptest培训过程中案例,在日常工作中会遇到被测试系统通讯都是通过加密的数据包,加密算法是公司自己开发的,并且发送的数据包还要经过系统的压缩,以保证系统的性能.利用loadrunner就无法解决这里的加密的技术问题,利用javavuser会更好一些,可以利用java更强大的包来开发更加完善的脚本. 第一步:loadrunner创建java_vuser脚本 : 在建立脚本界面选择Create/Edit Script-

LoadRunner 中实现MD5加密

最近在用loadrunner做一个压力测试,在编写脚本的时候发现传递参数的时候需要一个sign值,这个值是将参数进行MD5加密生成的,所以下面就说一说怎么对参数进行MD5加密. 1.首先我们需要一个加密算法的文件叫做:md5.h文件 我们可以新建一个md5.h文件,至于里面具体的算法网上都有下载,具体如下(直接将下面的算法拷贝到md5.h文件中): #ifndef MD5_H#define MD5_H#ifdef __alphatypedef unsigned int uint32;#elset