JMeter测试JDBC应用的实例

一、项目基本背景

某游乐园为应对春节入园高峰,需对入园的闸机检票系统进行针对性的性能测试,然后依据测试结果对系统的软硬件等进行相应的调整。

此闸机检票系统是由国外开发团队基于Dephil开发并运行在Windows系统中的一个系统,有关于业务流程和业务逻辑并没有相应的文档进行说明。由于比较清楚此闸机系统是与数据库直连,所有的操作都是直接对数据库进行读写等操作,所以最终确定对该系统的性能测试主要就是对数据库的性能测试

二、测试基本流程

01、 工具的选取

目前针对JDBC应用进行性能测试的工具比较多,LoadRunner作为一款比较成功的商业软件,能通过VirtualUser Generator生成代理和虚拟用户来模拟业务流程和真正用户的操作行为,而且后期的数据处理和报表生成功能十分强大。JMeter作为一款开源软件,安装简单,不依赖于界面,脚本维护方便,作为性能测试工具功能比较完善。

就软件功能的优缺点而言,LoadRunner自然是最好的选择,但是LoadRunner免费版的只提供50个Virtual User,无法满足客户需求,所以性能测试执行的工具还是选择了开源免费的JMeter。不过LoadRunner依旧可以作为我们脚本制作的辅助工具,比如抓取系统操作过程中调用的SQL语句。

此闸机检票系统有一个比较突出的特点是会跟一些外接硬件进行交互,在交互过程中也会执行一些SQL语句。由于LoadRunner自身的缺陷,导致系统与硬件交互时调用的SQL语句无法被抓取,此时必须使用DB Trace将LoadRunner未抓取部分的SQL语句找到,填充到我们编辑的脚本中。

基本思路确定后,接下来就是将思路付诸行动

02、抓取并提取SQL语句

打开LoadRunner创建一个COM/DCOM协议的脚本

在这里插入图片描述
在LoadRunner的录制功能中完成配置

在这里插入图片描述
开始录制后在检票系统中完成所有实际需要进行的操作,结束录制并等待记录生成

扫描二维码关注公众号,回复: 13184704 查看本文章

在这里插入图片描述
通过LoadRunner中的搜索功能搜索出所有的SQL语句,提取后按照先后顺序进行排列

在这里插入图片描述
然后通过DB Trace抓取LoadRunner未能抓取部分的SQL语句,将其整理到LoadRunner获得的SQL语句列表中去。至此我们已经获得了全部我们想要的SQL语句。

03、完成脚本的编写及调试

前期已经已经确定了具体执行性能测试的工具是JMeter,接下来就是进行一系列的配置及将得到的SQL语句移植到JMeter脚本中。

首先添加数据库的配置文件并修改相应的参数

在这里插入图片描述
然后创建线程组,将得到的SQL语句按照先后顺序放到JDBC Request中

在这里插入图片描述
最后提供相应的数据并运行,进行必要的调试

在这里插入图片描述
04、 JMeter脚本的一些情况说明

  • Q:脚本中有大量的JDBC Request,为什么不是将所有的SQL语句放到同一个Request中?

  • A:由于下边的SQL语句可能需要从上边的SQL语句中获取相应的值,所以需要分开并将上边SQL语句中得到的某些字段结果进行参数化处理。

  • Q:如何实现脚本中字段的参数化处理及传递?

  • A:首先在Variable names中对获得的不同的数据分别进行定义并命名,然后在后续的JDBC Request中使用

    在这里插入图片描述

  • Q:进行参数化调用时为何需要加上“_1”?

  • A:同一条SQL语句可能会搜索出多条记录,那么参数化后的字段名称会代表多个值,加上“_1”表示取这些值中的第一个。

  • Q:Timer加在JDBC Request内和外有什么区别?

  • A:Timer加在JDBC Request外表示对所有的Request都起作用,每执行一个JDBC Request都会首先执行一次Timer。Timer加在JDBC Request内表示只对当前Request起作用,执行当前的request时会首先执行一次Timer,不会对其他的Request有任何的影响。

在这里插入图片描述

三、 典型问题及解决办法

  1. 问题:系统调取硬件执行指令部分的操作无法被LoadRunner捕获。

解决办法:尝试过使用软件来替代硬件的方式,仍旧无法解决。最后使用DB Trace获取相应的SQL语句来补全LoadRunner所缺失的那部分。

  1. 问题:JMeter脚本完成后无法成功运行并报错。

解决办法:根据报错的具体情况进行处理,很大的可能性是因为没有将sqlserver的jar包放到JMeter文件夹的lib目录下。

  1. 问题:JMeter 脚本中只有一条SQL语句时是可以成功运行的,但是多条SQL语句就无法正常运行。

解决办法:在配置JDBC Connection Configuration文件时,Database URL中应当添加上“allowMultiQueries=true”。

  1. 问题:当一个JDBC Request中只有select语句时可以成功运行,但是含有其他类型的SQL语句时就无法成功运行。

解决办法:将JDBC Request中的Query Type修改为“Callable Statement”

四、心得体会

  1. 并不是所有的不清楚详细业务逻辑的系统都是不可以进行性能测试的,性能测试对于业务逻辑的知情度要求会低一点。

  2. 性能测试不是功能测试,在进行性能测试时要进行思维的转变,它不要像功能测试那样要求面面俱到。在进行性能测试时有些不重要的点是可以舍弃的。

最后也为大家准备一份软件测试学习资源:

囊括了:

  • 2021.9月最新版软件测试全套完整视频
  • 500套软件测试面试题+面试讲解视频
  • 10套典藏版 超高价值的软件测试试卷
  • 300套软件测试项目简历模板
  • 80套各类软测用例的设计模板合集

有需要的朋友可以关注我的公众号:程序员二黑,直接获取!

最后一句话送给大家:机会只垂青有准备的人,这是一个靠本事的社会。有时候,你之所以发展得不好,不是因为没有机遇,而是因为你没有准备好,导致机遇与你擦肩而过。如果你想要学习,什么时候开始都不晚,而不是瞻前顾后,你只要用尽全力,剩下的交给时间!

加油吧,测试人!路就在脚下,成功就在明天!

精彩推荐:

公司新来的阿里p8,看了我做的APP和接口测试,甩给了我这份文档…

腾讯二面:web测试问题被虐哭了,直到学长给了我这些知识点…

面试滴滴科技,被按在地上摩擦,鬼知道我经历了什么?

猜你喜欢

转载自blog.csdn.net/qq_56271699/article/details/121366578