使用Loadrunner测试数据库性能plus

之前写过一个文档,使用LR通过JDBC测试数据库性能,但那个文档主要介绍的是在MyEclipse里编写类后,在LR中如何加载如何设置,此种方法有一定的局限性,例如把写好的类放在LR中调用,都是在action中调用类的所有方法,若方法中包含完整的建立连接和断开连接,每次迭代的时候就会不断重复这个操作,既耗费资源,又耗费时间,对于要求高并发的测试场景,显然不是最好的办法,因此重新考虑将java的脚本直接放在LR中进行编辑。

首先我们要明确一个问题,使用MyEclipse编写类的手段仍然是不可或缺的,因为LR在编写JAVA脚本时不能对其他脚本进行调用,如果需要外部方法,则必须通过引入jar的办法,所以如果LR脚本里需要其他类和方法的支持,就必须提前把这个class通过import的办法加载到这个脚本里。另外为了LR使用,必须使用J2EE而不能使用J2SE,因为虽然在验证效果上J2EE和J2SE都能体现java功能和数据连接,但是发布的时候,J2EE能够根据创建的包的层次,分别发布每一个class文件,而J2SE则会把所有的class发布在一个jar里。

接下来我们开始准备LR的编辑环境,当然脚本协议仍然是java vuser,


 

1.      准备编辑环境

a)      引入lrapi.jar

打开编辑器之后,为了能有更多的java编辑提示和引用提示,需要导入一个jar包。方法是,找到lr系统安装目录下的classes目录,(%loadrunner%\classes),里面有一个lrapi目录,把这个目录完整复制到j2se的一个项目里,然后把这个j2se工程发布成一个jar包,最后再把这个jar包import到LR脚本中。



其他需要的jar包,例如jdbc等,根据需要同样引入到环境中。

a)      调整jvm参数

由于需要大量运行java程序,所以为了避免出现堆错误和内存溢出,需要对jvm进行设置,根据运行位置的不同,共有3个地方需要添加jvm参数。

在系统运行,需要修改系统环境变量,增加一个系统环境变量JAVA_OPTS,如图:

 在lr脚本调试时,编辑“用户运行时”设置,如图:

注意选择指定的jdk(1.6)和添加VM参数,参数内容:

-Xmx512m -Xms512m -Xmn200m -XX:PermSize=64m-Xss128k

在编辑lr场景时,同样要设置ii的内容,如图:


注意如果如图,每个脚本都是独立的,需要每个脚本各自设置。

编辑的内容和脚本调试时一样。



2.      编辑脚本

由于是在LR的编辑器里编辑需要的内容,因此要充分发挥这个环境的特点,在这个Actions类中包含init(),action(),end()3个方法,而和普通的http协议一样,也是init()和end()只执行一遍,action()会根据场景设置不断循环迭代,因此为了提高执行效率减少jdbc连接断开所产生的资源消耗,可以把创建连接和断开连接写到init和end里,把具体的查询语句写到action里。

首先需要在Actions里建立公共变量:



接下来我们具体讲如何在init里编写连接初始化,通过jdbc连接数据库实际上有两种办法,一个是使用DriverManager,一个是使用DataSource。

DriverManager:

Class.forName("");

conn= (Connection)DriverManager.getConnection("url","user","pass");

这里得到了conn属性,在action中所有的查询都是使用这个连接属性。

DataSource:

             PoolDataSource k =newPoolDataSource();

             k.setHostName("");

             k.setPort(1234);

             k.setDatabaseName("");

             k.setUser("user");

             k.setPassword("pass");

//          k.setUrl("jdbc:url");

             k.setMaxActive(2);

             k.setMinIdle(1);

             k.setLoginTimeout(3000);

             PooledConnection pc =k.getPooledConnection();

             conn =(Connection)pc.getConnection();

同样也是得到conn属性,以上两种形式在init里任选一种即可。

 

打开的conn要在end()中关闭,


在action中调用conn执行操作,

statement= conn.prepareStatement("select * from table);

rs = (ResultSet)statement.executeQuery();

if(rs.next()){

                    System.out.println("select1 OK");

                }

                else{

                    System.out.println("select1 fail");

                }

通过自己写对rs的状态判断,获得输出内容。如果需要获得查询内容,则需要import外部jar包,存储数据对象的get方法和set方法。这里可以根据需要灵活增加。

以上为编辑脚本的基本方法,完成编辑后可先做单步调试,确保脚本编写正确。


3.      执行测试

执行测试的方法和其他LR性能测试的方法有太大区别,但是需要注意的是,这个场景必须选择以进程方式运行,否则使用线程方式会产生大量的错误。


以进程方式运行即可。

4.      需要注意

这种数据库性能测试方法需要注意的是,无论用哪个方式连接,都是在init中获得conn属性,而init每个脚本只会执行一次,因此每个脚本实际上只做了一次连接,若数据库会根据连接做某些判断,则这种方法无法模拟,次方法实际上脱离了中间件等网络应用环节,因此某些网络行为也无法模拟。

这种测试方法只是用于纯粹验证数据库执行操作时的性能情况,若数据库的执行需要网络中某些特定因素,则无法达到预期效果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你说我听海绵宝宝派大星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值