loadrunner中JavaVuser协议,实例
2017-07-06 14:32
357 查看
做个小例子。
· 写个测试java类
public class testjava
{
public static void main(String args[])
{
System.out.println("hello world");
}
public String getStr()
{
return "hello world";
}
public String getStr(String str)
{
return str;
}
}
· 通过java Vuser调用测试java类
/*
* LoadRunner Java script. (Build: 754)
*
* Script Description:
*
*/
import lrapi.lr;
import org.apache.log4j.*;
public class Actions
{
static Logger logger = Logger.getLogger(Actions.class.getName());
int i=10;
public int init() {
//读取log4j属性文件
PropertyConfigurator.configure("D:\\MyEclipse Enterprise Workbench 5.1.0 GA\\eclipse\\workspace\\testjava\\bin\\log4j.properties");
return 0;
}
public int action() {
lr.start_transaction("事务");
testjava t=new testjava();//调用测试类
lr.message( "获取返回值:"+ t.getStr("<NewParam>")); //NewParam是loadrunner参数化设置的参数
//设置集合点
lr.rendezvous("集合点");
//设置等待时间
lr.think_time(2);
lr.end_transaction("事务",lr.PASS);
//检索运行 Vuser 的计算机的名称
String my_host = lr.get_host_name( );
lr.message( "计算机的名:"+ my_host+" "+i);
lr.log_message (lr.get_vuser_id() +" "+ t.getStr("<NewParam>"));
//lr.get_vuser_id 返回当前 Vuser 的 ID
logger.info(lr.get_vuser_id() +" "+ t.getStr("<NewParam>"));
lr.enable_redirection(true);
System.out.println("This is an informatory message…"); // 已重定向
// System.err.println("This is an error message…"); // 已重定向
lr.enable_redirection(false);
System.out.println("This is an informatory message…"); // 未重定向
// System.err.println("This is an error message…"); // 未重定向
return 0;
}
public int end() {
return 0;
}
}
· Vuser运行 log
Virtual User Script started
Starting action vuser_init.
Ending action vuser_init.
Running Vuser...
Starting iteration 1.
Starting action Actions.
Notify: Transaction "事务" started.
获取返回值:1
Rendezvous 集合点
Notify: Transaction "事务" ended with "Pass" status (Duration: 0.0175).
计算机的名:ms-599008241fcd 10
-1 1
System.out: INFO (Actions.java:37) - -1 1
Notify:
System.out: This is an informatory message… Notify:
Ending action Actions.
Ending iteration 1.
Ending Vuser...
Starting action vuser_end.
Ending action vuser_end.
Vuser Terminated.
· Control 运行 截图
看到定义的“事务”。
· log4j属性文件
log4j.rootCategory=DEBUG, stdout,R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=c:/log.txt
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss} %-5p %c - %m%n
· 20个Vuser运行一次,查看一下log文件,可以看一下参数设置的效果
2008 三月 02 18:06:43 INFO Actions - 7 91
2008 三月 02 18:06:43 INFO Actions - 16 101
2008 三月 02 18:06:43 INFO Actions - 17 121
2008 三月 02 18:06:43 INFO Actions - 13 41
2008 三月 02 18:06:43 INFO Actions - 10 181
2008 三月 02 18:06:43 INFO Actions - 18 141
2008 三月 02 18:06:43 INFO Actions - 19 151
2008 三月 02 18:06:43 INFO Actions - 6 71
2008 三月 02 18:06:43 INFO Actions - 11 1
2008 三月 02 18:06:43 INFO Actions - 9 131
2008 三月 02 18:06:43 INFO Actions - 2 191
2008 三月 02 18:06:43 INFO Actions - 12 21
2008 三月 02 18:06:43 INFO Actions - 5 51
2008 三月 02 18:06:43 INFO Actions - 15 81
2008 三月 02 18:06:43 INFO Actions - 20 161
2008 三月 02 18:06:43 INFO Actions - 3 11
2008 三月 02 18:06:43 INFO Actions - 1 171
2008 三月 02 18:06:43 INFO Actions - 8 111
2008 三月 02 18:06:43 INFO Actions - 14 61
2008 三月 02 18:06:43 INFO Actions - 4 31
使用LoadRunner8.1的java Vuser协议调用jar文件
很多时候,我们需要直接对Jboss下的java应用服务系统进行性能测试。这种服务有些是基于Jboss Remoting实现,以socket的方式提供接口函数,并没有一个可以看的见的界面可供测试。在这种情况下,有的测试组会选择,开发一个简单的web页面,调用这个服务,然后用loadRunner制作web脚本进行测试。
这种设计方案的缺陷在于,性能测试的压力会被堵在web层这里,无法测出服务端的准确性能,甚至可能web服务器的资源已经耗尽,服务端还完全没达到最大吞吐量。要解决这个问题,只有使用LoadRunner直接调用服务端的接口,减少中间环节的干扰。
首先,请大家安装LoadRunner8.1以上版本,因为8.1支持jdk1.5版本,现在很多应用都是在jdk1.5的框架下开发的。注意,8.1并不支持jdk1.6,所以请安装1.5版本。
打开Vuser Generator,新建一个java Vuser协议的脚本。新脚本会自动创建一个class和3个函数:init、act
cf55
ion、end。这时,大家先Compile一下,如果没有错误,再继续。如果报错,看看你的jdk版本。
先把脚本保存在本地的文件夹中。然后,把调用服务所需要的一些jar文件,也拷贝到脚本目录里面。注意,一般调用远程Jboss服务时,都是需要一些描述接口函数类型的jar文件。另外,建议先使用eclipse,开发一个测试的框架类,通过这个框架,可以轻松的调用指定服务器的指定接口服务的指定方法,从而降低LoadRunner脚本编写的难度。
jar文件准备好以后,点击toolbar上的“java function”按钮,然后点击“location”,把你需要的jar文件添加进来。这时,就能看到jar文件中的所有对象列表,以及对象的属性和方法。
回到脚本编辑窗口,我们可以直接遵照C++的语法,编写脚本代码,在代码中,可以对刚才引入的java对象进行面向对象的编程,比如下面的代码:
com.Testing.ServiceCaller caller;
caller = new com.Testing.ServiceCaller ();
caller.init("192.168.0.1:4446", "ServiceName");
caller.call("methodName" , "paras");
在这里写脚本,几乎和写java代码一模一样。我们可以完全引用jar文件的各种对象,同样,也可以使用java ee框架中的各种对象,LoadRunner对java的支持真是非常的好。
同时,LoadRunner也提供了一些好用的函数,方便大家准备测试参数、输出测试结果,比如:
int orgId = lr.eval_int("2");
lr.error_message ("出错喽");
这些以lr开头的方法,参考文档在帮助中写的很清楚。比如lr.eval_int就是把字符型变量转换成int型,lr.error_message 是输出错误的提示,我们可以在代码中加入数据正确性的检查逻辑,这样在执行性能测试的时候,如果出错,就能很清楚的看到。
在以上文章里,我们讲了如何在java Vuser协议中,引用jar文件中的类。Loadrunner对java支持非常好,但是,在实际操作中,出现了一个新问题:如果要引用jar文件,需要把jar文件拷贝到当前脚本的目录下。如果我们为性能测试开发了一个测试框架,就需要把框架类的jar文件拷贝到每个脚本的目录下,这样做显然不合理,因为同一文件保存多份拷贝,很难管理,极易引起版本混乱。
我们需要把测试框架的jar文件,放在一个统一的地方,让每个测试脚本都能自动找到,这样才能解决问题。开始,我准备利用java VM运行环境的ClassPath来解决。首选,在环境变量的ClassPath中增加一个目录,比如“d:\lib”。然后把测试框架的jar文件拷贝到这个目录,运行脚本,失败!提示找不到指定的类。
之后,我修改了环境变量ClassPath的值,把jar文件的完整路径添加进去,例如“d:\lib\testBase.jar”,再次运行脚本,成功!似乎java的classPath并不支持目录,而必须要指定到具体的jar文件。这个问题困扰了我很久,如果有java的高手请指点一下。
虽然设定环境变量,可以解决这个问题,不过以后如果需要增加一个jar文件,就要修改一次环境变量,还是很不方便。于是,我尝试把jar文件用winrar解压,直接把解压后的目录保存在d:\lib目录下面,然后在环境变量里面只设定d:\lib,运行脚本发现也能通过!!原来系统虽然不能找到jar文件,却能找到目录中的*.class文件。
虽然jar文件解压后的文件比较多,和单独的jar文件相比,管理起来有些麻烦,不过最终我还是选择了这个方法。或者,大家还可以使用另一个方法:在一台电脑上,将测试需要用到的jar文件共享,然后,在编辑脚本时,按下F4进入“runtime setting”,在classPath中从网络中,指向你需要的jar文件。这样,就需要为每个脚本都设定一次classPath。
· 写个测试java类
public class testjava
{
public static void main(String args[])
{
System.out.println("hello world");
}
public String getStr()
{
return "hello world";
}
public String getStr(String str)
{
return str;
}
}
· 通过java Vuser调用测试java类
/*
* LoadRunner Java script. (Build: 754)
*
* Script Description:
*
*/
import lrapi.lr;
import org.apache.log4j.*;
public class Actions
{
static Logger logger = Logger.getLogger(Actions.class.getName());
int i=10;
public int init() {
//读取log4j属性文件
PropertyConfigurator.configure("D:\\MyEclipse Enterprise Workbench 5.1.0 GA\\eclipse\\workspace\\testjava\\bin\\log4j.properties");
return 0;
}
public int action() {
lr.start_transaction("事务");
testjava t=new testjava();//调用测试类
lr.message( "获取返回值:"+ t.getStr("<NewParam>")); //NewParam是loadrunner参数化设置的参数
//设置集合点
lr.rendezvous("集合点");
//设置等待时间
lr.think_time(2);
lr.end_transaction("事务",lr.PASS);
//检索运行 Vuser 的计算机的名称
String my_host = lr.get_host_name( );
lr.message( "计算机的名:"+ my_host+" "+i);
lr.log_message (lr.get_vuser_id() +" "+ t.getStr("<NewParam>"));
//lr.get_vuser_id 返回当前 Vuser 的 ID
logger.info(lr.get_vuser_id() +" "+ t.getStr("<NewParam>"));
lr.enable_redirection(true);
System.out.println("This is an informatory message…"); // 已重定向
// System.err.println("This is an error message…"); // 已重定向
lr.enable_redirection(false);
System.out.println("This is an informatory message…"); // 未重定向
// System.err.println("This is an error message…"); // 未重定向
return 0;
}
public int end() {
return 0;
}
}
· Vuser运行 log
Virtual User Script started
Starting action vuser_init.
Ending action vuser_init.
Running Vuser...
Starting iteration 1.
Starting action Actions.
Notify: Transaction "事务" started.
获取返回值:1
Rendezvous 集合点
Notify: Transaction "事务" ended with "Pass" status (Duration: 0.0175).
计算机的名:ms-599008241fcd 10
-1 1
System.out: INFO (Actions.java:37) - -1 1
Notify:
System.out: This is an informatory message… Notify:
Ending action Actions.
Ending iteration 1.
Ending Vuser...
Starting action vuser_end.
Ending action vuser_end.
Vuser Terminated.
· Control 运行 截图
看到定义的“事务”。
· log4j属性文件
log4j.rootCategory=DEBUG, stdout,R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=c:/log.txt
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss} %-5p %c - %m%n
· 20个Vuser运行一次,查看一下log文件,可以看一下参数设置的效果
2008 三月 02 18:06:43 INFO Actions - 7 91
2008 三月 02 18:06:43 INFO Actions - 16 101
2008 三月 02 18:06:43 INFO Actions - 17 121
2008 三月 02 18:06:43 INFO Actions - 13 41
2008 三月 02 18:06:43 INFO Actions - 10 181
2008 三月 02 18:06:43 INFO Actions - 18 141
2008 三月 02 18:06:43 INFO Actions - 19 151
2008 三月 02 18:06:43 INFO Actions - 6 71
2008 三月 02 18:06:43 INFO Actions - 11 1
2008 三月 02 18:06:43 INFO Actions - 9 131
2008 三月 02 18:06:43 INFO Actions - 2 191
2008 三月 02 18:06:43 INFO Actions - 12 21
2008 三月 02 18:06:43 INFO Actions - 5 51
2008 三月 02 18:06:43 INFO Actions - 15 81
2008 三月 02 18:06:43 INFO Actions - 20 161
2008 三月 02 18:06:43 INFO Actions - 3 11
2008 三月 02 18:06:43 INFO Actions - 1 171
2008 三月 02 18:06:43 INFO Actions - 8 111
2008 三月 02 18:06:43 INFO Actions - 14 61
2008 三月 02 18:06:43 INFO Actions - 4 31
使用LoadRunner8.1的java Vuser协议调用jar文件
很多时候,我们需要直接对Jboss下的java应用服务系统进行性能测试。这种服务有些是基于Jboss Remoting实现,以socket的方式提供接口函数,并没有一个可以看的见的界面可供测试。在这种情况下,有的测试组会选择,开发一个简单的web页面,调用这个服务,然后用loadRunner制作web脚本进行测试。
这种设计方案的缺陷在于,性能测试的压力会被堵在web层这里,无法测出服务端的准确性能,甚至可能web服务器的资源已经耗尽,服务端还完全没达到最大吞吐量。要解决这个问题,只有使用LoadRunner直接调用服务端的接口,减少中间环节的干扰。
首先,请大家安装LoadRunner8.1以上版本,因为8.1支持jdk1.5版本,现在很多应用都是在jdk1.5的框架下开发的。注意,8.1并不支持jdk1.6,所以请安装1.5版本。
打开Vuser Generator,新建一个java Vuser协议的脚本。新脚本会自动创建一个class和3个函数:init、act
cf55
ion、end。这时,大家先Compile一下,如果没有错误,再继续。如果报错,看看你的jdk版本。
先把脚本保存在本地的文件夹中。然后,把调用服务所需要的一些jar文件,也拷贝到脚本目录里面。注意,一般调用远程Jboss服务时,都是需要一些描述接口函数类型的jar文件。另外,建议先使用eclipse,开发一个测试的框架类,通过这个框架,可以轻松的调用指定服务器的指定接口服务的指定方法,从而降低LoadRunner脚本编写的难度。
jar文件准备好以后,点击toolbar上的“java function”按钮,然后点击“location”,把你需要的jar文件添加进来。这时,就能看到jar文件中的所有对象列表,以及对象的属性和方法。
回到脚本编辑窗口,我们可以直接遵照C++的语法,编写脚本代码,在代码中,可以对刚才引入的java对象进行面向对象的编程,比如下面的代码:
com.Testing.ServiceCaller caller;
caller = new com.Testing.ServiceCaller ();
caller.init("192.168.0.1:4446", "ServiceName");
caller.call("methodName" , "paras");
在这里写脚本,几乎和写java代码一模一样。我们可以完全引用jar文件的各种对象,同样,也可以使用java ee框架中的各种对象,LoadRunner对java的支持真是非常的好。
同时,LoadRunner也提供了一些好用的函数,方便大家准备测试参数、输出测试结果,比如:
int orgId = lr.eval_int("2");
lr.error_message ("出错喽");
这些以lr开头的方法,参考文档在帮助中写的很清楚。比如lr.eval_int就是把字符型变量转换成int型,lr.error_message 是输出错误的提示,我们可以在代码中加入数据正确性的检查逻辑,这样在执行性能测试的时候,如果出错,就能很清楚的看到。
在以上文章里,我们讲了如何在java Vuser协议中,引用jar文件中的类。Loadrunner对java支持非常好,但是,在实际操作中,出现了一个新问题:如果要引用jar文件,需要把jar文件拷贝到当前脚本的目录下。如果我们为性能测试开发了一个测试框架,就需要把框架类的jar文件拷贝到每个脚本的目录下,这样做显然不合理,因为同一文件保存多份拷贝,很难管理,极易引起版本混乱。
我们需要把测试框架的jar文件,放在一个统一的地方,让每个测试脚本都能自动找到,这样才能解决问题。开始,我准备利用java VM运行环境的ClassPath来解决。首选,在环境变量的ClassPath中增加一个目录,比如“d:\lib”。然后把测试框架的jar文件拷贝到这个目录,运行脚本,失败!提示找不到指定的类。
之后,我修改了环境变量ClassPath的值,把jar文件的完整路径添加进去,例如“d:\lib\testBase.jar”,再次运行脚本,成功!似乎java的classPath并不支持目录,而必须要指定到具体的jar文件。这个问题困扰了我很久,如果有java的高手请指点一下。
虽然设定环境变量,可以解决这个问题,不过以后如果需要增加一个jar文件,就要修改一次环境变量,还是很不方便。于是,我尝试把jar文件用winrar解压,直接把解压后的目录保存在d:\lib目录下面,然后在环境变量里面只设定d:\lib,运行脚本发现也能通过!!原来系统虽然不能找到jar文件,却能找到目录中的*.class文件。
虽然jar文件解压后的文件比较多,和单独的jar文件相比,管理起来有些麻烦,不过最终我还是选择了这个方法。或者,大家还可以使用另一个方法:在一台电脑上,将测试需要用到的jar文件共享,然后,在编辑脚本时,按下F4进入“runtime setting”,在classPath中从网络中,指向你需要的jar文件。这样,就需要为每个脚本都设定一次classPath。
相关文章推荐
- 使用loadrunner Java Vuser协议进行性能测试时场景中报Error: Compilation process failed.解决方法
- 使用LoadRunner8.1的java Vuser协议调用jar文件(三) [ 光影人像 东海陈光剑 的博客 ]
- LoadRunner JAVA Vuser协议开发性能测试脚本 1
- 基于Loadrunner平台Socket协议的JavaVuser(多线程)
- Loadrunner 11 测试API java Vuser 模拟Post,Get 请求实例
- 如何使用LoadRunner8.1的java Vuser协议调用jar文件
- LoadRunner系列之—-03 用Java Vuser协议编写接口测试脚本
- LoadRunner中Java Vuser协议脚本开发
- LoadRunner Java Vuser 脚本开发实例
- Loadrunner中java Vuser协议脚本开发
- 使用LoadRunner8.1的java Vuser协议调用jar文件(一) [ 光影人像 东海陈光剑 的博客 ]
- loadrunner的java vuser协议
- 使用loadrunner javavuser协议开发脚本实战
- loadrunner使用JavaVuser协议测试API接口性能
- LoadRunner JAVA Vuser协议手工写脚本Failed to find Classes.zip entry in Classpath问题
- 使用LoadRunner8.1的java Vuser协议调用jar文件(二) [ 光影人像 东海陈光剑 的博客 ]
- loadrunner java_vuser协议分布式部署
- 【Loadrunner】Web协议脚本转换为Java Vuser脚本
- 基于Loadrunner平台Socket协议的JavaVuser(多线程)
- loadrunner使用java协议制作服务器接口测试脚本