对于Loadrunner,习惯了录制脚本的初学者们,会觉得通过Java vuser来写脚本比较陌生,其实看完以下的Loadrunner常用Web函数对比,你就不会觉得Java Vuser有多么神秘了,而且通过Java写性能测试脚本的灵活性要远远高于C语言(因为Java相对于C要容易的多,而且Java有大量的开源组件和类库可以供你进行扩展开发,几乎做到了没有测试不了的应用以及API接口),进行Java Vuser开发,也比.Net Vuser开发要简单的多(相较于安装一堆.Net组件或插件,Java Vuser只需要引用一下JDK路径就行,Loadrunner11支持JDK1.6,Loadrunner12支持JDK1.7)。
常用函数 | Java Vuser 协议脚本 | Web-HTML/HTTP协议脚本 |
引用类 或库文件 |
import lrapi.lr; import lrapi.web; |
通过globals.h文件引用 |
think_time | lr.think_time(3); | lr_think_time(3); |
transaction | lr.start_transaction("事务"); ...... lr.end_transaction("事务", lr.AUTO); |
lr_start_transaction("事务"); ...... lr_end_transaction("事务", LR_AUTO); |
set_option | web.set_option("MaxRedirectionDepth", "0", new String[]{"LAST"}); |
web_set_option("MaxRedirectionDepth", "0", LAST ); |
set_user | web.set_user("cluster", //lr.decrypt("58cf7265b1677820107f74"), "cluster", "172.17.2.89:8081"); |
web_set_user("cluster", //lr_decrypt("58cf7265b1677820107f74"), "cluster", "172.17.2.89:8081"); |
add_header | web.add_header("Authorization", lr.eval_string("<BasicAuth>")); |
web_add_header("Authorization", lr_eval_string("{BasicAuth}")); |
output message |
lr.save_string("test","tParam"); lr.output_message("tParam的值为:" +lr.eval_string("<tParam>")); |
lr_save_string("test","tParam"); lr_output_message("tParam的值为:%s", lr_eval_string("{tParam}")); |
web_url | web.url("Show status", "URL=http://172.17.2.89:8081/kettle/status/", new String[]{ "Resource=0", "RecContentType=text/html", "Referer=http://172.17.2.89:8081/", "Snapshot=t3.inf", "Mode=HTTP", "LAST"}); |
web_url("Show status", "URL=http://172.17.2.89:8081/kettle/status/", "Resource=0", "RecContentType=text/html", "Referer=http://172.17.2.89:8081/", "Snapshot=t3.inf", "Mode=HTTP", LAST); |
web_ submit_data |
web.submit_data("executeJob", "Action=http://172.17.2.89:8081/kettle/executeJob/", new String[]{ "Method=POST", "RecContentType=text/html", "Referer=", "Mode=HTTP"}, new String[]{// "ITEMDATA", 不要加这条 "Name=job", "Value=/DZ/job/HYHZ", "ENDITEM", "Name=level", "Value=Debug", "ENDITEM", "Name=rep", "Value=DZHY0620", "ENDITEM", "LAST"}); |
web_submit_data("executeJob", "Action=http://172.17.2.89:8081/kettle/executeJob/", "Method=POST", "RecContentType=text/html", "Referer=", "Mode=HTTP", ITEMDATA, "Name=job", "Value=/DZ/job/HYHZ", ENDITEM, "Name=level", "Value=Debug", ENDITEM, "Name=rep", "Value=DZHY0620", ENDITEM, LAST); |
web_ custom_request |
String htmlBody="这里是body串"; web.custom_request("ViewStreamLogin", "Method=POST", new String[]{ "URL=http:/*.*.cn/login?user=test&passwd=123", htmlBody, "TargetFrame=", "Referer=", "Mode=HTTP", "LAST"}); |
web_custom_request("ViewStreamLogin", "URL=http:/*.*.cn/login?user=test&passwd=123", "Method=POST", "TargetFrame=", "Resource=0", "Referer=", "Mode=HTTP", "Body=这里是body串", LAST); |
web_ submit_form |
web.submit_form("authenticate", new String[]{ "Snapshot=t2.inf"}, new String[]{ "Name=user", "Value=root", ENDITEM, "Name=passwd", "Value=2012", ENDITEM, "Name=key", "Value=<OFF>", ENDITEM, "LAST"}); |
web_submit_form("authenticate", "Snapshot=t2.inf", ITEMDATA, "Name=user", "Value=root", ENDITEM, "Name=passwd", "Value=2012", ENDITEM, "Name=key", "Value={OFF}", ENDITEM, LAST); |
1、以下列出Loadrunner所有的Java LR Common函数:
2、以下列出Loadrunner所有的Java LR Web函数:
特别说明:Java Vuser 是自定义的 Java 虚拟用户脚本,脚本中可以使用标准的Java语言。这种虚拟用户一般采用纯手工编写(当然Loadrunner11、12也能支持部分Java录制,包括Java Applet、Java Application、Java Over HTTP)。Java虚拟用户适用范围非常广,归纳起来主要有两大类:一类是不太适合录制的业务功能点的性能测试,例如网页上Http文件的下载过程、视频播放等;另一类是基于Java语言开发的应用系统的性能测试,这类应用更适合采用Java虚拟用户进行测试。
用Java Vuser实现无法录制的测试需求,这类测试需求往往关注于对服务器产生的压力,重点测试在一定压力下服务器的负载情况,为评估、部署、调优系统提供参考。在这类测试工作中,Java的作用仅是一门语言,用于辅助测试人员完成测试程序的开发。在性能测试工作中,不能录制的测试点很多,主要有以下几类:
(一)含有控件的Web应用:在Web应用中,很多包含一些插件的浏览器应用经常不能录制。这类应用往往涉及很多协议,因此录制起来不是特别方便。对于这类应用,可以用Java语言调用其功能来完成用户行为的模拟。
(二)一些和媒体播放、文件下载等相关的应用:媒体播放或文件下载等过程的录制往往不容易控制,如果是应用基于P2P的协议,则会更加复杂。因此,这类测试只能由测试人员开发虚拟用户脚本来完成。
(三)用Java Vuser测试基于Java语言的应用系统性能:相比前面,基于Java语言开发的应用系统,在性能测试中采用Java虚拟用户更显得“门当户对”。这类虚拟用户主要应用在下面两类测试中:
(1)核心算法或业务的执行效率
对银行、电信等大型的基于J2EE的架构应用系统中,开发阶段的性能测试是必不可少的。为了降低后期遇到性能问题的风险,往往在开发阶段进行一些核心业务的性能测试。这些核心业务或要求较高的执行效率,或者要求支持较多用户的并发。因此,可以利用Java Vuser来测试这些业务的执行效率。
(2)Java应用中不能录制的业务模块
很多时候,一些J2EE架构的业务系统用LoadRunner录制起来不是特别方便,例如一些Java智能客户端程序。这时可以手工编写测试代码,完成测试任务。与非Java应用相比,Java 应用中不能录制的业务功能更适合采用Java虚拟用户,因为可以直接对一些方法进行调用。
由于Java语言的强大功能,Java虚拟用户的应用远不止上面这些。