【原创】LoadRunner Java Vuser脚本的配置和调试指南

1 编写目的

本文介绍了Loadrunner多负载压力机的配置,并经过测试Java Vuser的数据库链接脚本对配置结果进行了验证,同时对配置过程当中遇到的问题和解决的过程进行了记录,关于Java数据库编程的深刻学习,你们能够参考其余Java相关教程。java

文中的内容大部分来源于本人工做中解决问题的实际经验,另外一部分来源于网络,全部内容本人都亲自验证,但不免有疏漏之处,若有疑问,请你们不吝赐教。sql

文中Loadrunner版本为9.5,操做系统类型为Windows XP和Windows 2003 Server,数据库为Oracle 10g。数据库

2 测试场景介绍

本次咱们使用四台负载压力机,其中一台仅做为统一调度管理和监控使用,其他三台做为产生负载的机器,测试的脚本和场景由调度监控所在机器管理。编程

测试脚本为Java脚本,脚本内容为Java链接Oralce数据库并向数据库内插入数据。因此咱们不只须要配置Loadrunner的环境,还须要进行Java和Oralce的配置,这也是咱们介绍的主要内容,性能监控信息收集和分析不是本文的重点,将在后续的教程中陆续介绍。网络

3 Oracle数据库安装及配置

根据测试场景的要求,咱们须要在四台机器上都安装Oracle。Oracle的具体安装过程比较简单,这里不作介绍。须要注意的是,Java链接Oracle时,须要提供驱动,即导入JDBC的jar包。不然执行脚本时会提示相似java.lang.ClassNotFoundException的异常信息。session

JDBC全称是Java Data Base Connectivity,是一种用于执行SQL语句的Java API。在数据库安装完成后,能够在C:\oracle\product\10.2.0\db_2\jdbc\lib目录下找到对应的jar包,Oracle 10g对应的JDBC驱动是ojdbc14.jar。并发

导入jar包能够经过在系统属性设置CLASSPATH环境变量的方式,也能够在Loadrunner的Run-time Settings中设置。oracle

3.1 数据库链接调试

根据咱们的测试需求,咱们在管理机上建立了test数据库,用户名/密码为test/test,并建立了一个表:app

clip_image002

下面咱们测试数据库链接是否成功,首先使用PL/SQL Developer进行验证,这里之因此不使用Loadrunner Java Vuser脚本直接验证,是由于脚本执行时还涉及Java运行环境及数据库驱动的配置检查,咱们在验证数据库配置是否正确时,使用最简单的工具便可,这样当出现问题时,定位排查的方向比较单一,易于解决问题。工具

在四台机器上分别验证,因为管理机是数据库所在机器,因此首先验证管理机是否能够登陆数据库。

使用PL/SQL Develop登陆,提示“ORA-12514:TNS:监听程序当前没法识别链接描述符中请求的服务”,以下图:

clip_image004

出现该提示,通常有两个排查方向,一是数据库的服务没有启动,二是tnsnames.ora文件中数据库test配置的服务名称有误。

咱们首先检查服务是否启动,进入“计算机管理->服务和应用程序->服务”,查看与数据库test相关的服务:OracleServiceTEST确实没有启动,将其手动启动便可。再次使用PL/SQL Develop登陆成功。

接下来是三台负载压力机的数据库链接测试。三台机器都安装了PL/SQL Developer,而且只安装了Oracle客户端,本地没有Oracle的服务须要启动。经过Oracle Net Manager设置服务标识和监听程序后,启动PL/SQL Developer进行链接测试。发现报错,提示“ORA-12170:TNS:链接超时”,以下图:

clip_image006

仔细排查安装目录下tnsnames.ora和listener.ora文件,发现配置没有问题,使用ping命令检查到管理机的链接也没有问题。经过以前的验证,确认管理机的数据库也没有问题。咱们再仔细分析这个报错的含义,负载压力机尝试链接数据库,可是由于超时失败了,因为客户端链接远程数据库是经过网络服务承载的,因此推测问题仍是出在网络访问上,关掉管理机的杀毒软件和防火墙,再次使用负载压力机上的PL/SQL Developer链接,成功登陆。

到这里咱们能够知道,因为管理机的Windows防火墙默认对远程的数据库链接进行了屏蔽,因此形成了上述的问题,而管理机的防火墙ICMP设置中,并无禁止ping请求,因此才会有能够ping通,可是连不上数据库的问题

4 Java运行环境配置

Java运行环境的配置能够参考《LoadRunner Java Vuser开发环境配置指南》,这里再也不赘述。一样,根据测试场景的要求,咱们须要在四台机器上都安装Java运行环境。

5 Loadrunner多机负载场景

5.1 多机负载概述

在实际的性能测试中,单个压力机产生的负载是很是有限的。在以前的某管理系统的性能测试中,使用的负载压力机的硬件配置为目前的主流配置,在执行5000用户并发时,单机的操做系统已经出现假死机、应用程序无响应等现象,这时压力机模拟5000用户并发已经没有实际意义,此时采用多机产生负载就很是必要了。

多机负载是在多个负载压力机上安装Load generator,经过Remote Agent Dispatcher(Process) 和Agent组件在多个负载压力机上联合产生负载的测试方法。按照HP Loadrunner官方的文档中描述:Controller和Load generator使用Agent进行通讯,当咱们运行一个场景时,Controller通知Remote Agent Dispatcher进程启动Agent。Agent根据Controller的指令,对Vuser进行初始化、运行、暂停或中止操做,同时,Agent也会将Vuser的状态通知Controller。

5.2 多机负载配置

5.2.1 负载压力机配置

首先咱们进行三个负载压力机的配置。三个负载压力机仅负责联合产生负载,若是没有其余特殊要求,能够只安装Load Generator。运行Loadrunner安装文件,点击“Load Generator”安装便可(注意安装Loadrunner须要.Net Framework3.5)。以下图:

clip_image008

安装完成能够看到,在LOAD GENERATOR的服务启动后,屏幕右下角的任务栏上会显示一个Loadrunner Agent Service的图标。以后,分别登陆三台负载机,进入程序->LoadRunner->Tools->LoadRunner Agent Runtime Settings Configuration(LoadRunner代理运行时设置配置):

image

输入用户名和密码,单击[OK]。

下面咱们进行管理机的配置,启动Loadrunner,点击Run Load Test,进入Controller界面,点击Scenario->Load Generators,单击[Add],添加三台负载压力机的信息,包括主机名(或IP),选择Platform,填写Temporary directory。这里要注意的是,临时目录必需要填写对应的负载压力机实际存在的路径,不推荐默认路径,不然后面执行场景时可能会由于路径不存在而报错。

clip_image012

添加完成后,单击[Connect],链接成功后,能够看到status变为Ready。

clip_image014

直到这里,负载压力机的配置初步完成,配置的过程很是顺利。下面的章节将介绍脚本调试和场景配置,咱们会遇到各类各样的问题,解决问题是咱们进步的最大动力。

5.2.2 测试脚本介绍

咱们采用的脚本是Java语言编写的,脚本的功能是向Oracle插入数据。下面是测试脚本的action部分代码:

clip_image016

先介绍一下脚本中与配置有关的部分,具体整个脚本的含义,你们能够参考Java数据库编程的相关教程。

Class.forName("oracle.jdbc.driver.OracleDriver");表示加载数据库的驱动,根据咱们的配置,这里加载的驱动来自ojdbc.jar,不一样数据库的驱动也是不一样的,而且有些软件的驱动是私有或通过封装的,具体的须要根据实际的项目状况来判断。

DriverManager.getConnection("jdbc:oracle:thin:@192.168.186.250:1521:test","test","test");表示链接数据库,其中“jdbc:oracle:thin:@192.168.186.250:1521:test”咱们通常叫作数据库的URL,其中的test是数据库的service name,后面两个test分别是访问数据库的用户名和密码。

5.2.3 测试脚本执行

数据库和Java运行环境的配置基本完成,咱们能够执行测试脚本了,同以前的章节同样,咱们首先使用管理机进行本机脚本运行调试。

启动Loadrunner,点击“Create/Edit Scripts”,打开已经编写好的Java Vuser脚本,直接单击F5,运行该脚本,报错以下:Error: System.err: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver,这个错误信息的含义是没法找到某个类,在以前的《LoadRunner Java Vuser开发环境配置指南》中咱们见过相似的报错,通常的缘由是CLASSPATH中没有配置咱们须要加载的类(jar包)。根据3.1节的介绍,运行Run-time Settings,发现咱们没有加载JDBC驱动,即没有导入ojdbc.jar,将该包导入便可,或者经过修改系统的CLASSPATH变量,告诉Loadrunner在哪里能够加载到该驱动。

再次运行脚本,执行成功,查看数据库,成功的插入了3条数据(脚本设置迭代3次):

clip_image018

下面咱们要创建测试场景,经过管理机调度负载压力机联合产生负载,验证各个压力机的脚本执行结果。

clip_image020

直接点击F5(Start Scenario),执行完成后,提示以下几种错误(注意这些错误并非一块儿出现的,这里为了便于讲解,将全部遇到的错误列出):

①Error: System.out: java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection

②Files transfer error: The file/directory C:\Documents and Settings\

Administrator\Local Settings\Temp\brr_YAR.29\netdir\c\documents and settings

\tian_yu\local settings\temp\res19\192.168.186.5_10.map does not exist.

③Error: System.err: java.lang.ClassNotFoundException: oracle.jdbc.driver.

OracleDriver

咱们来一个个的解决这些问题。

首先第一个问题,初步判断是网络问题。登陆产生报错的负载压力机,使用PL/SQL登陆数据库,提示“ORA-12170:TNS:链接超时”,这个报错咱们并不陌生,在3.1节中遇到过,关闭管理机的防火墙,问题解决。

再看第二个问题。根据问题描述能够大体得出结论,是因为Temporary directory配置路径问题。回想在5.2.1中提到的Load generator设置,其中有一步就是添加Temporary directory,因此这里咱们须要检查各个负载压力机的配置路径是不是存在而且有权限访问,通过测试,问题获得解决。

最后一个问题也见过,咱们定位是数据库的驱动加载问题,可是有的负载压力机报错,有的不报错,这个是为何呢?在管理机上咱们已经加载了驱动,执行脚本是没有问题的。

仔细分析多负载压力机的运行原理(见5.1),咱们知道各个负载压力机是由管理机的Controller统一进行管理的,负载压力机此时不会从本机的CLASSPATH获取到任何信息(即便安装了完整的Loadrunner),一切都是由Controller经过Agent与Load generator进行通讯的,因此当脚本执行到加载数据库驱动语句时,必然是按照管理机的CLASSPATH配置路径来加载驱动,但因为不一样机器上的Oracle不是统一安装的,并且并不能保证每一个压力机的Oracle安装路径彻底相同,因此当负载压力机与管理机的驱动路径不一致时,就会提示上面最后一个错误信息。

那么该如何解决呢?两个办法,一是将全部的机器的Oracle安装在彻底一致的路径下,这个操做比较麻烦,涉及卸载和重装Oracle。还有一个办法,就是按照管理机ojdbc14.jar所在的路径,在负载压力机上建立彻底一致的目录结构,只将驱动放在该目录下便可,通过测试后该办法可行,问题获得解决。

目前已有的问题都解决了,咱们再次运行场景。又报错了,提示:Listener refused the connection with the following error:ORA-12519, TNS:no appropriate service handler found The Connection descriptor used by the client was…。可是查看运行结果,插入了118条数据,就是说咱们离成功很近了,再接再砺。

通过以前错误排查和场景的运行结果的分析,咱们推测这个错误可能不是必现的,果真再运行一次,没有报错,数据库里也插入了正确的数据(118+120):

clip_image022

可是咱们仍是不能放过这个错误,要解决它。由于是非必现的问题,咱们就要考虑整个场景中,哪些因素是可能根据时间和状态的不一样发生动态变化的,这也是致使问题非必现的主因。大体能够推测出来,系统的资源和网络状况是最有可能动态变化的,咱们优先考虑系统资源。这里的系统资源主要是数据库的资源了,数据库有两种重要资源:session和process。经过命令查看session配置为170,process配置为150,而且考虑到各个压力机在以前的问题定位都打开了PL/SQL Developer,它们在必定时间内占用了部分资源,场景也反复执行了屡次,因此极可能是因为资源不足致使了上面的问题,咱们将session和process的值都修改成500,而且关闭各个压力机上的PL/SQL Developer软件,反复执行几回场景,未出现报错,数据库中也插入了正确的数据,至此,咱们认为该问题目前已经获得了解决。

6 关于license

在以前的《LoadRunner Java Vuser开发环境配置指南》中提到过,调试Java Vuser脚本并不要求有Global license,可是当运行场景时,须要提供Global license,不然会提示以下信息:“You do not have a license for this Vuser type.Please contact HP Software to renew your license.”因此,当进行非Web的测试时,license应该是咱们首先要解决的问题。

7 总结

本文针对LoadRunner多负载压力机的环境配置及脚本调试作了介绍,在配置和脚本调试过程当中能够看到,咱们遇到了不少的问题。因为多负载压力机配置的自己涉及多个环境变量和多个软件的配置,有必定的复杂性,可是经过不断的排查和解决问题,咱们最终完成了场景的配置和测试,这其中的收获仍是很是大的,在后面的教程中,将继续经过实例介绍咱们在实际工做中遇到的各类问题及定位解决的方法,你们一块儿学习,共同进步。

8 参考资料

[1]hp_man_LoadRunner11.00_ControllerUser_pdf,PDF page 37,HP LoadRunner Vuser Technology.

相关文章
相关标签/搜索