您的位置:首页 > 数据库

使用Loadrunner测试数据库性能plus

2017-03-25 17:20 281 查看
之前写过一个文档,使用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每个脚本只会执行一次,因此每个脚本实际上只做了一次连接,若数据库会根据连接做某些判断,则这种方法无法模拟,次方法实际上脱离了中间件等网络应用环节,因此某些网络行为也无法模拟。
这种测试方法只是用于纯粹验证数据库执行操作时的性能情况,若数据库的执行需要网络中某些特定因素,则无法达到预期效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐