概要步骤:
1.在eclipse建立java工程,编译要使用的java方法;
2.打开loadrunner,新建立脚本选择java脚本模式;
3.找到脚本存放的文件夹,把步骤1中整个的编译后的目录(class文件所在的整个目录)放如脚本文件夹中,
loadrunner就可以使用该java方法;
Java脚本开发基础
要想掌握Java虚拟用户的使用,测试脚本开发人员至少需要两方面的技能:一是具有Java语言方面的技能,并熟练使用至少一种Java集成开发工具,例如Eclipse;二是掌握LoadRunner的Java API,Java API是访问Vuser函数的基础,通过LoadRunner的Java API可以在脚本中很容易地创建事务与并发点、获取用户信息等功能。
不难看出,Java虚拟用户要求测试脚本开发人员具有良好的开发基础,否则Java Vuser很难发挥应有的作用。限于篇幅,本节在Java测试开发基础部分,仅对Java语言方面的知识做概要介绍,读者可以通过Java方面的书籍进行学习;在LoadRunner的Java API部分,将会介绍一些相对重要的方法。
1 Java虚拟用户开发基础
Java语言基础
Java语言博大精深,即使资深的Java开发工程师也未必敢自称精通,测试人员就更不容易成为“高手”了。但是如果仅仅为了满足测试开发,还是很容易快速入门的。表7-1列出了一些进行Java虚拟用户开发的知识点,读者可以自行学习。
表7-1 Java语言基础知识
知识点 | 详细内容 |
Java背景知识 | ² Java历史及发展、语言特点 ² Java开发环境、程序工作原理 |
续表
知识点 | 详细内容 |
Java语言基础 | ² Java数据类型 ² Java运算符与表达式、控制语句 ² Java类定义规范 ² Java数组 ² Java的包 |
Java与面向对象技术 | ² 面向对象的概念 ² Java中的类、方法和变量 ² Java名字空间及访问规则 ² Java中的抽象类、接口和程序包 ² 对象的构造方法 |
Java中的数据结构 | ² Java数组 ² 向量 ² 字符串 |
输入/输出处理 | ² I/O流概述 ² 字节流 ² 字符流 |
例外处理(Exception) | ² 例外的概念 ² 例外的分类 ² 捕获例外 ² 声明例外 ² 抛出例外 |
多线程 | ² 多线程基本概念 ² 创建线程的方式 ² 线程的生命周期及控制 ² 线程的调度 ² 多线程的互斥与同步 ² 线程组 |
Java基本网络编程 | ² Java与Internet ² 使用InetAddress ² 使用URL ² Socket通信、数据报通信 |
JDBC | ² JDBC基础、JDBC驱动程序 ² JDBC编程 |
续表
知识点 | 详细内容 |
Java Servlet | ² Servlet基本概念 ² Servlet API ² Servlet执行过程与生命周期 ² 容器、部署与运行 |
Java Server Page(JSP) | ² JSP基础、JSP语法 |
测试人员在掌握了上面这些技能后,基本可以进行Java虚拟用户的开发了。同时,本着学无止境的原则,测试人员仍要以积极的态度来学习Java开发知识。
Java集成开发工具Eclipse
Eclipse是一个与NetBeans、Sun ONE Studio和Borland Jbuilder类似的,一种基于Java的整合型可扩展开发平台,也是目前最著名的开源项目之一。IBM一直在大力支持该项目的发展,并在2001年 11月宣布投入4千万美元到该项目的研发,这也是Eclipse项目发展较快的原因之一。
Eclipse专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目组成,具体包括四个组成部分:Eclipse Platform、JDT、CDT和PDE。JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,Eclipse Platform则是一个开放的可扩展IDE,提供了一个通用的开发平台。
Eclipse SDK(软件开发包)是Eclipse Platform、JDT和PDE所生产的组件合并,它们可以从eclipse.org网站(http://www.eclipse.org /downloads)上下载。这些组件提供了一个具有丰富特性的开发环境,允许开发者有效地建造可以无缝集成到Eclipse Platform中的工具。Eclipse SDK由Eclipse项目生产的工具和来自其他开放源代码的第三方软件组合而成。
在接下来的内容里,将介绍用Eclipse创建与编译Java类文件的过程以及如何在Java虚拟用户中调用编译好的类文件。关于Eclipse更深入的内容请读者参考其相关书籍。
l 创建Java项目
启动Eclipse后,依次选择菜单的“文件”→“新建”→“项目”,进入图7-7所示的界面。
图7-7 新建项目
在图7-7中选择Java项目,单击“下一步”,进入图7-8所示的界面。
图7-8 配置项目
在图7-8的“项目名称”输入“LoadRunnerDev”,“位置”下选择“在外部位置创建项目”,目录下选择“D:\LoadRunner”。然后点击“配置缺省值(O)...”,进入图7-9所示的界面。
图7-9 配置缺省值
在图7-9的“源和输出文件夹”处选择“文件夹(F)”,“源文件夹名(S):”默认为“src”,无须改变,在“输出文件夹名(O):”处输入“classes”,完成后返回图7-8所示界面。在图7-8中点击“下一步”,进入图7-10所示的界面。
图7-10 配置结果界面
在图7-10中,单击“完成”,新建Java项目工作完成。在图7-11中可以看到新建的项目“LoadRunnerDev”。
图7-11 包资源管理器
l 建立Java文件
如图7-12所示,在LoadRunnerDer中选中“src”,点击鼠标右键,进入“新建”,点击“类”,进入图7-13所示的新建Java类文件设置界面。
图7-12 新建Java类文件
在图7-13中,输入包名称“com.lr.test”、类名称“HelloWord”,其他各项设置默认即可。点击“完成”,进入源代码编辑界面,如图7-14所示。
图7-13 文件基本配置信息
图7-14 文件编辑界面
在源代码编辑界面,输入测试语句“System.out.println("HelloWord!");”如图7-14所示。代码编辑完成后,按照图7-15编译与运行程序。如果编译执行成功,可以在Eclipse的控制台看到输出结果,如图7-16所示。
图7-15 执行Java程序
图7-16 查看编译结果
l 编译与运行Java程序
编译后的class文件可以在“D:\LoadRunner\classes\com\lr\test”下找到,如图7-16所示。需要注意的是,类文件的存放路径是根据建立项目的设置来决定的。
l 开发虚拟用户脚本
进入到“D:\LoadRunner\classes”目录下,把整个“com”文件夹复制到“C:\j2sdk1.4.1\lib”,这样LoadRunner创建的所有Java Vuer脚本均可以直接调用;如果放到虚拟用户脚本的当前路径下,则只有当前的虚拟用户脚本可以调用。多台主机进行并发测试时,应该把编译好的类文件放到对应的虚拟用户脚本目录下。根据图7-1和图7-2所示新建一个Java虚拟用户脚本,并对照图7-17,输入同样的测试脚本,尤其要在代码开始处输入包的导入语句“import com.lr.test.*;”。
图7-17 Java虚拟用户示例脚本
l 运行虚拟用户脚本
点击Virtual User Generator 工具栏上的 图标开始执行脚本。正确的执行结果如图7-18所示,可以看到执行日志中有“System.out: HelloWord!”。如果运行不正确,读者可以参照前面的过程进行分析,同时检查JDK的路径设置。
图7-18 正确执行的虚拟用户脚本
与 C Vuser脚本相比,Java Vuser 脚本是先编译再执行,而C Vuser脚本是解释性的。VuGen在JDK安装路径内查找javac编译器,并在脚本内编译Java代码。该阶段由VuGen窗口底部的“正在编译... ”状态消息来指示。如果在编译期间出错,则这些错误将在执行日志中列出。
测试脚本保存后,接下来可以放到Controller中来运行,读者可以自己进行实验。需要注意的是,如果进行多台计算机联机测试,则所有运行测试脚本的客户机必须安装JDK环境并正确设置路径,否则将会出现如图7-19所示的提示。
图7-19 JDK环境不正确的提示
要想正确使用Java虚拟用户,首先要保证测试环境配置正确。执行测试时,可以先用本节的示例程序来检查环境是否正确,然后再进行复杂功能的开发。
2 LoadRunner的Java API
LoadRunner为访问Vuser函数提供了特定的 Java API,这些函数都是lrapi.lr类的静态方法。借助Java API可以大大增强Java虚拟用户脚本的可用性。本节将介绍常用的Java API的用法,更多的函数及其用法读者可以参考LoadRunner联机手册。
在Java虚拟用户中,Java API函数的用法与Vuser函数中的用法基本一致,只是写法稍稍不同,更符合Java语言的特点。
1. 事务函数(Transaction Functions)
(1)int lr.start_transaction( String transaction_name ):标记事务开始;
(2)int lr.end_transaction ( String transaction_name, int status ):标记事务结束。
2. 信息函数(Informational Functions)
(1)String lr.get_group_name( ):返回 Vuser 组的名称;
(2)String lr.get_host_name( ):返回执行 Vuser 脚本的负载生成器的名称;
(3)String lr.get_master_host_name ( ):返回运行Controller计算机的名称;
(4)int lr.get_scenario_id( ): 返回当前方案的ID;
(5)int lr.get_vuser_id( ) :返回当前 Vuser 的ID。
3. 运行时函数(Run-Time Functions)
(1)void lr.peek_events ( );:指示可以暂停Vuser 脚本的位置;
(2)int lr.rendezvous( String rendezvous_name ):在 Vuser 脚本中设置集合点;
(3)void lr.think_time( double time ):暂停脚本执行,模拟实际用户操作之间的思考时间。
4. 字符串函数(String Functions)
(1)String lr.eval_string ( String instring ):用当前值替换参数;
(2)int lr.eval_int ( String name ):用整型值替换参数;
(3)int lr.next_row ( String dat_file ):指示使用指定参数的下一行数据。
5. 消息函数(Message Functions)
(1)int lr.debug_message( int message_level, String message):向输出窗口发送测试过程的调试消息;
(2)int lr.error_message ( String message ):向Vuser日志文件和输出窗口发送错误消息以及位置的详细信息;
(3)int lr.log_message ( String message ):向 Vuser 日志文件发送消息;
(4)int lr.message ( String message ):向输出窗口发送消息;
(5)int lr.output_message ( String message ):向日志文件和输出窗口发送消息和位置信息;
(6)int lr.vuser_status_message ( String message ):向Controller窗口中的“Vuser状态”区域发送消息。