一:引入java Vuser
1:为什么要使用java Vuser?
1)有些使用C解决起来很麻烦,但是使用java很方便,存在强大的开源类库
2)更方便的使用自定义的类,节省开发脚本的时间。特别是对于自定义的一些算法或类,更是方便
二:LoadRunner中两种语言的区别
1:Java Vuser与C的区别
1)语言不同,语法不同,支持的函数不同
2)C是解释的,Java Vuser的是编译的,出错提示更准确。(Java Vuser是编译的,使用Java的编译器Javac,这样出错提示更准确)
三:缺点和不足
1)有些语法支持的不好,例如:静态代码块,尽量少用不常用的语法和功能
静态代码块例子
四:需要注意的是:
1)如果在脚本中包括自定义的类,你需要确保这个类是线程安全的,如果不确定,使用进程方式运行,这样可以每个进程一个虚拟机,充分的隔离
2)没有修改,只有读肯定是线程安全的
3)操作不同的对象或者变量是线程安全的
4)线程安全是很难检测的。往往在很少用户并发时很难发现,甚至很多程序运行多年才发现,相对来说,在大压力下且或CP资源紧张的时候更容易发现
五:编写Java Vuser的一般步骤
1)了解被测项目业务和所使用的技术,分析是否使用JavaVuser
2)在eclipse中编写一个正确的压力模拟代码
3)将eclipse中的代码移如LoadRunner中的Java Vuser
4)结合业务特点,对脚本进一步的增强
5)使用Controller运行多用的Java Vuser
六:从web转化为Java Vuser
1)将要转换的web脚本复制出来并保存到文本文件中
2)参数界定符部分需要{}手动修改成<>
3)打开cmd
4)切换到C:\Program Files (x86)\HP\LoadRunner\dat
5)运行..\bin\sed-f-web_to_jave.sed c:\web.txt > c:\java.txt
6)创建参数并进行其他操作
七、Java Vuser适用范围
1)用Java Vuser实现无法录制的测试需求。比如:含有控件的web应用、一些和媒体播放、文件下载等相关的应用。
2)用Java Vuser测试基于Java语言的应用系统性能。比如:核心算法或业务的执行效率、java应用中不能录制的业务模块。
四、loadRunner的常用Java API
loadrunner为访问Vuser函数提供了特定的Java API,这些函数都是lrapi.lr类的静态方法。借助Java API可以大大增强Java虚拟用户脚本的可用性。
1、 事物函数(Transaction Function)
Int lr.start_transaction(String transaction_name) 标记事物开始
Int lr.end_transaction(String transaction_name,int status) 标记事物结束
2、 信息函数
String lr.get_group_name();返回Vuser组的名称
String lr.get_host_name();返回执行Vuser脚本的负载生成器的名称
String lr.get_master_host_name();返回运行controller计算机的名称
Int lr.get_scenario_id();返回当前方案的ID
Int lr.get_vuser_id();返回当前vuser的ID
3、 运行时函数
Void lr.peek_events();提示可以暂停vuser脚本的位置
Int lr.rendezvous(string rendezvous_name);在vuser脚本中设置集合点
Void lr.think_time(double time):暂停脚本执行,模拟实际用户操作直接的思考时间。
4、 字符串函数
String lr.eval_string(string instring)用当前值替换参数
Int lr.eval_int(String name)用整型值替换参数
Int lr.next_row(string dat_file)指示使用指定参数的下一行数据
5、 消息函数
Int lr.debug_message(int message_level, string message):向输出窗口发送测试过程的调试消息。
Int lr.error_message(String message)向Vuser日志文件和输出窗口发送错误消息以及位置的详细信息。
Int lr.log_message(string message) 向Vuser日志文件发送消息
Int lr.message(string message) 向输出窗口发送消息
Int lr.output_message(string message):向日志文件和输出窗口发送消息和位置信息
Int lr.vuser_status_message(string message):向controller窗口中的“Vuser状态”区域发送消息