利用jmeter对mysql数据库进行压力测试课案

上传人:我** 文档编号:114693069 上传时间:2019-11-12 格式:DOCX 页数:13 大小:732.71KB
返回 下载 相关 举报
利用jmeter对mysql数据库进行压力测试课案_第1页
第1页 / 共13页
利用jmeter对mysql数据库进行压力测试课案_第2页
第2页 / 共13页
利用jmeter对mysql数据库进行压力测试课案_第3页
第3页 / 共13页
利用jmeter对mysql数据库进行压力测试课案_第4页
第4页 / 共13页
利用jmeter对mysql数据库进行压力测试课案_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《利用jmeter对mysql数据库进行压力测试课案》由会员分享,可在线阅读,更多相关《利用jmeter对mysql数据库进行压力测试课案(13页珍藏版)》请在金锄头文库上搜索。

1、利用jmeter对mysql数据库进行压力测试前期准备工作: Jmeter的安装包可以在公司W:engineeringsoftwarelinuxjmeter下可以找到。Jmeter的运行需要java环境的支持的,要运行jmeter首先要安装JDK java运行环境,此安装包可以在公司的W:engineeringsoftwarelinuxjava 下找到。此外要使用jmeter对mysql进行压力测试还要安装mysql的JDBC驱动,例如驱动包mysql-connector-java-5.1.14-bin 放到jmeter的解压包下的lib文件夹下。这样测试环境就部署好了,接下来进行测试计划的创

2、建。创建测试计划:1. 添加用户(1) 添加线程组测试计划 添加 线程组,如下图所示。“线程数” 表示的是JMeter会同时创建多少个线程来进行压力测试,对于一个网站而言,也就是模拟一次存在多少个用户来访问该网站;而“Ramp-Up Period(in seconds)”表示JMeter每个秒发动多少并发;“循环次数”则是指配置好的并发情形发生多少次。 这里新增一个线程组,重命名为“JDBC USER”,如下图所示。(2) 在“线程组”下创建一个“User Defined Variables” JDBC USER 天加 - 配置元器件 用户自定义的变量即用户自定义变量,重命名为“我们定义的动态

3、语句部分”,这里我们使用它来生成动态SQL语句,让用户每次访问数据库的SQL语句都不一样,这样减少mysql数据库对相同SQL语句的缓存对测试结果所带来的影响。可以用ctrl + F 来打开函数代码辅助工具生成我们所需的函数调用。(2) 接下来是配置JDBC连接设置JDBC USER 添加 - 配置元器件 JDBC Connection Configuration(3)创建一个具体的JDBC请求JDBC USER 添加 Sampler JDBC Request,如下图所示。 the Pool Name: MySQL (same as in the configuration element)Q

4、uery Type中选择的是预编译语句;SQL语句当中,动态内容的代码行是 where accountser0_.ACCOUNT_ID= ?,这里的?就是预编译语句中的动态参数,在属性页下面的Parameter Values和Parameter types来指定,由于预编译语句在Java教程已有很多讲解,这里不再赘述。(4)创建监听器JDBC USER 添加 监听器 图形结果(5)保存测试计划文件 保存测试计划案例http:/ 技术文档】作为一名开发人员,大多情况下都会认真的做好功能测试,但是却常常忽略了软件开发之后的压力测试,尤其是在面向大量用户同时使用的Web应用系统的开发过程,压力测试往

5、往是不够充分的。近期我在一个求职招聘型的网站项目中就对压力测试的重要性体会颇深。在项目中,我负责开发职位信息的搜索部分,但是由于缺乏压力测试,仓促将搜素部分的功能提交到生产环境,结果当并发量稍稍到达一定程度时,数据库系统便已经不堪重负。无奈之下向网上资源查询解决方法,其中一个就是对现有的应用做足够到位的压力测试。压力测试有着很丰富的内容,而这里,我只针对应用中所遇到的问题以及解决方法做一个简单的描述,希望对以后遇到同样问题的朋友能够起到些许帮助作用。我自己做的例子使用的环境是:测试工具:JMeter 2.3.1数据库:Oracle 10G其他环境:JDK 1.6.0_05(也可以使用JDK1.

6、4及以上版本)1.创建好的JMeter测试计划树形结构图如下:2.在刚打开JMeter的时候,默认会存在两个节点,一个是“Test Plan”,点击这个节点,在右边的属性页面中,命名为“我们的数据库测试计划” 在属性页的最下面,我们看到设置jar包所在路径的选项,默认存在一个选项E:softwaredeveloptestunitjMeter jakarta-jmeter-2.3.1lib,这个是我的机器中JMeter的lib目录,在这个例子中,Oracle的jdbc驱动也已经拷 贝到该目录下。内容导航 3.新增一个“Thread Group”,重命名为“使用变化的SQL来做数据库压力测试”。其

7、 中,“Number of Threads”表示的是JMeter会同时创建多少个线程来进行压力测试,对于一个网站而言,也就是模拟一次存在多少个用户来访问该网站;而 “Ramp-Up Period(in seconds)”表示JMeter每个多少秒发动并发;“Loop Count”则是指配置好的并发情形发生多少次。4.在“Thead Group”下创建一个“User Defined Variables”,即用户自定义变量,重命名为“我们定义的动态语句部分”,这里我们使用它来生成动态SQL语句,让用户每次访问数据库的SQL语句都不一样,这样减少Oracle数据库对相同SQL语句的缓存对测试结果所带

8、来的影响。变量定义的完整内容如下:注:$_split(.) 是JMeter中自带的拆分字符串为数组的函数,可以通过JMeter工具栏Options-Function Helper Dialog来打开函数代码辅助工具生成我们所需的函数调用。另外有个需要注意的问题是:在$_split(.) 中,如果拆分字符串中的内容包含有符号,,一定得用符号进行转义,否则可能被JMeter误认为是参数分隔符,会导致无法正确生成字符串数组。内容导航 5.接下来是配置JDBC连接设置6.创建一个具体的JDBC请求Query Type中选择的是预编译语句; SQL语句当中,动态内容的代码行是and contains(p

9、.p_name,?) 0,这里的?就是预编译语句中的动态参数,在属性页下面的Parameter Values和Parameter types来指定,由于预编译语句在Java教程已有很多讲解,这里不再赘述。注:这里有一个JMeter的函数_V.没有提到,将在后面说明另外一个JDBC调用测试的时候进行补充。内容导航 7.创建三个监听器,可以从三个不同的层面来观察响应结果执行一下测试计划,我们来看看三个监听器所返回的结果是怎样的。以上是表格方式查看响应结果的情况,可以看到通过表格可以查看某个范围内的响应时间和响应状态是否正常;以上三幅截图则是来自树形监听器,树形监听器在几种监听器中应该是最细致的,可

10、以查看响应状态、时间、以及执行的SQL语句,乃至返回的结果均能进行验证。至于上面的图形监听器,可以宏观的观察SQL语句在压力测试下响应的平滑度,并且有一定的统计信息,能够观察平均响应时间等。现在我们来看另外一种方式编写我们的JDBC调用。就是使用JMeter提供的函数动态生成我们所需要不断变化的SQL语句部分。之所以需要这么做是为了方便我们观察执行的SQL语句内容。在前面使用预编译的方式,传递动态参数的SQL语句执行的结果,大家已经看到过,在树形监听器中,我们观察到到执行过的SQL语句是:Code highlighting produced by Actipro CodeHighlighter

11、 (freeware)http:/www.CodeH *FROM (SELECT tmp.*, ROWNUM rnFROM (select p.p_id, p.p_name, c.cmp_namefrom test_product p, test_company cwhere p.cmp_id = c.cmp_idand contains(p.p_name, ?) 0-and (p.p_name like %D% or p.p_name like %AIX%)ORDER BY p.p_id desc) tmpWHERE 1 = 1 AND ROWNUM = 1这样导致我们无法看出参数?当中表示

12、的具体值是什么,这对我们在某些情况下确定SQL语句的性能是相当不利的。所以我们这里需要使用JMeter的动态函数特性。我们创建第二个JDBC Request节点,而后禁用产品名 全文关键字 JDBC Request,将新创建的JDBC Request重命名为产品名 like JDBC Request,将其中的SQL语句改写为:Code highlighting produced by Actipro CodeHighlighter (freeware)http:/www.CodeH *FROM (SELECT tmp.*, ROWNUM rnFROM (select p.p_id, p.p_n

13、ame, c.cmp_namefrom test_product p, test_company cwhere p.cmp_id = c.cmp_idAND ( $_V(smt_$_Random(1,4,rnd) )ORDER BY p.p_id desc) tmpWHERE 1 = 1 AND ROWNUM = 1 这里核心的部分就是代码行AND $_V(smt_$_Random(1,4,rnd) 。$_Random(1,4,rnd)用来生成随机数,取值范围在1到4之间,而_V(.)函数帮助我们转 义smt_$_Random(1,4,rnd)生成的内容,很类似于JavaScript中的eval函数。例如$_Random(1,4,rnd)生成随机数为1,则smt_$_Random(1,4,rnd)对应的内容为smt_1,_V将获取数组变量smt中的第一个元素,于是生成的SQL语句如下:这里我们可以清楚的看到所执行的SQL语句。后记本例中我们使用了JMeter附带的函数_split和_V,_Random等等,文章对于这些函数的描述可能不够完整,亦可能不够准确,更多详尽的解释,大家可以参考JMeter官方文档。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号