JMeter:负载测试关系数据库

Apache JMeter是完全使用Java编写的性能测试工具。 可以在请求/响应模型上运行的任何应用程序都可以使用JMeter进行负载测试。 关系数据库也不例外:接收sql查询,执行它们并返回执行结果。

我将向您展示使用JMeter的图形用户界面设置测试方案有多么容易。 但是在深入研究细节之前,让我们先介绍一下基本术语:

测试计划 :描述测试方案
线程组 :代表运行您的测试方案的用户。
样本 :一种发送请求和等待响应的方式。 HTTP请求,JDBC请求,SOAP / XML-RPC请求和Java对象请求是示例示例。 逻辑控制器 :用于自定义JMeter用于决定何时发送请求的逻辑 侦听器 :接收测试结果并显示报告。 计时器 :导致JMeter在线程发出的每个请求之前延迟一定的时间。 断言 :测试应用程序是否返回预期的响应

注意这篇文章并不是JMeter的替代文档。 JMeter的文档很好。 您可以在其用户手册(http://jakarta.apache.org/jmeter/usermanual/index.html)中找到详细信息。假设我们有一个将每个事务记录到关系数据库中的应用程序。我们将创建一个测试计划–循序渐进–为了回答以下问题。

  • 一秒钟内可以将几笔交易记录插入到交易表中?
  • 将单个交易记录插入交易表需要多少时间?
  • 并发线程数(用户)如何影响插入/秒数和平均响应时间?
  • 记录数如何影响插入/秒数和平均响应时间?

步骤1

将mysql jdbc驱动程序复制到JMeter安装的lib文件夹中。 JMeter在类路径中需要合适的jdbc驱动程序以连接到数据库。

Example ~/tools/jakarta-jmeter-2.3.4/lib/mysql-connector-java-5.0.5.jar

我们将把客户的订单和订单结果存储在交易表中。

CREATE TABLE transactions (id INT NOT NULL AUTO_INCREMENT,customer_id INT NOT NULL,order_id INT NOT NULL,result INT,PRIMARY KEY (id)
);

第2步

创建一个测试计划,并将其命名为“ Test MYSQL DB”。 然后将以下jmeter组件添加到测试计划中。

  1. 名为“数据库用户”的线程组
  2. JDBC请求类型的采样器
  3. JDBC连接配置类型的Config元素
  4. 类型为“ 随机变量”的三个配置元素
  5. 摘要报告类型的侦听器

添加这些组件后,JMeter测试计划如下图所示。

第三步

配置数据库用户。 线程组组件模拟数据库用户。
1.用户数(线程)
2.用户将发送请求多少次(循环计数)。 如果选择'Forever' ,则线程将在while(true){…}循环中运行,直到您决定停止测试为止。

第四步

配置JDBC连接池。 JDBC连接配置组件用于创建jdbc连接池。 数据库URL,jdbc驱动程序,数据库用户和密码均使用此组件进行配置。 连接池由“变量名称”标识。 JDBC采样器(请求)使用此变量名称(连接池名称)来弹出和推送连接。 我将测试连接池命名为“我的数据库池”

第5步

定义将在INSERT语句中使用的随机变量。 在此测试中,我使用了三个随机变量: 用户ID,订单ID和结果 。 下图显示了用户ID的随机数配置。 随机数生成器将为我们提供1到1000000之间的随机整数。我们可以使用名称user_id来引用生成的随机数。

第6步

JDBC Request组件是我们告诉用户(线程)要做什么的地方。 在步骤3 “我的数据库池”中配置的池的名称将用作“绑定到池的变量名称” 。 所有线程将执行准备好的语句。 用户ID,订单ID和结果将由随机数配置器生成(在步骤5中进行描述)

步骤7

现在,我们已将线程配置为将事务记录插入到事务表中。 在最后一步中,我们将添加摘要报告类型的侦听器,以查看测试结果。

结果告诉我们,在无限循环中工作的10个并发用户(线程)可以在事务表中插入近3300行。 插入行所花费的平均时间为2毫秒。 您也可以选择“图形结果”侦听器以查看结果的直观表示。
我创建并运行了一个简单的数据库测试计划。 希望这篇文章对您有所帮助。 谨记这个座右铭

如果无法衡量,就无法管理也无法改善

测试愉快...

参考: 使用我们的JCG合作伙伴 Ilkin Ulas的JMeter进行负载测试关系数据库 , 所有您的博客都属于我们博客。


翻译自: https://www.javacodegeeks.com/2012/04/jmeter-load-testing-relational.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

new: Set up a window

Nehe的教程确实太老了,不过我认为它也能够让我了解OpenGL3.2以前的管线渲染模式,即使它在现在已经不常见了。因为想要了解,所以我还是会看完Nehe的教程。 现在这是一个新的教程 - JoeyDeVries的教程,可以说是网上最好的OpenGL教程…

Python全栈开发:socket

Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”&…

NetBeans 7.1:创建自定义提示

我已经在帖子中介绍了一些我最喜欢的NetBeans提示 ,这些信息是用于使Java代码现代化的七个NetBeans提示和七个不可或缺的NetBeans Java提示 。 这两个帖子中涉及的十四个提示仅占NetBeans支持的“即开即用”提示总数的一小部分。 但是,由于NetBeans 7.1使…

qregexp括号匹配_转:Qt的正则表达式和QRegExp

考虑一下我们经常遇到的问题,比如gemfield想从青岛之光读书(www.civilnet.cn/book)中找一个关键的电话号码,通常第一步就是将书中所有的电话号码查找出来放在手边。那么怎么拟定查询条件呢?电话的格式有如下几种:01088888888010 8…

具有Tron效果的JavaFX 2 Form

这是一个具有TRON效果的简单JavaFX登录表单。 在此示例中,我使用CSS设置TextField和Button的样式。 这是CSS和Effect代码的片段: .text-field{-fx-background-color: transparent;-fx-border-color: #00CCFF;-fx-text-fill: white; }.password-field{-fx…

Akka的字数统计MapReduce

在我与Akka的日常工作中,我最近写了一个字数映射表简化示例。 本示例实现了Map Reduce模型,该模型非常适合横向扩展设计方法。 流 客户端系统(FileReadActor)读取文本文件,并将每一行文本作为消息发送给ClientActor。…

Struts2之环境配置

在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计。在这儿MVC模式的好处就不在提了。 技术优势 Struts2有两方面的技术优势,…

基于JavaFX的SimpleDateFormat演示程序

对于使用Java Date进行格式化的新手甚至对于使用Java Date进行格式化的有经验的Java开发人员而言,可能有些棘手的事情是使用SimpleDateFormat规范日期/时间格式。 SimpleDateFormat的基于类级别的Javadoc的文档非常详尽,涵盖了表示日期/时间的各个组成部…

iOS与H5交互

前提:在iOS控制器中加载UIWebView,设置代理,遵守UIWebViewDelegate协议。 一、iOS调用JS方法 通过iOS调用JS代码实现起来比较方便直接调用UIWebView的方法- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script…

markdownTest

MARKDOWNTEST 11111111111111有一种神奇的语言,它比html还简单,它巧妙地将内容与格式整合在一起——它就是Markdown有一种神奇的语言,它比html还简单,它巧妙地将内容与格式整合在一起——它就是Markdown 111111111111111222222222…

Aleri –复杂事件处理

Sybase的Aleri流媒体平台是CEP市场中最受欢迎的产品之一。 它在Sybase的交易平台RAP版本中使用,该版本在资本市场中广泛用于管理投资组合中的头寸。 今天,在这个由多个部分组成的系列文章的第一个部分中,我希望提供Aleri平台的概述&#xff0…

python版本回退_Python爬虫之BeautifulSoup解析之路

上一篇分享了正则表达式的使用,相信大家对正则也已经有了一定的了解。它可以针对任意字符串做任何的匹配并提取所需信息。但是我们爬虫基本上解析的都是html或者xml结构的内容,而非任意字符串。正则表达式虽然很强大灵活,但是对于html这样结构…

WebStorm 运行Rect Native 项目

今天教大家如何直接使用WebStorm这个IDE直接完成编码运行项目工作.这样就可以不用打开Xcode了. 1.首先点击WebStorm右上方的下拉箭头弹出的Edit Configurations.... 2.然后会进入一个配置页面.点击左上方的.在弹出的列表中选中npm.如图. 3.在右边的配置框中,先选择Command为hel…

python编程比赛_用Python编程分析4W场球赛后,2018世界杯冠军竟是…

比赛已经开始,我们不妨用 Python 来对参赛队伍的实力情况进行分析,并大胆的预测下本届世界杯的夺冠热门球队吧!通过数据分析,可以发现很多有趣的结果,比如:找出哪些队伍是首次进入世界杯的黑马队伍找出2018…

JavaFX 2 GameTutorial第2部分

介绍 Ť他的是一系列与一个JavaFX 2游戏教程博客条目的第二批。 如果您尚未阅读第1部分,请参阅JavaFX 2游戏教程的简介部分。 在第1部分中,我提到了游戏的某些方面以及原型飞船的简单演示(原型由简单的形状组成),该飞船…

sqlyog连接mysql教程_如何用SQLyog实现远程连接MySQL

SQLyog客户端,用root用户远程链接MySQL时,提示ldquo;访问被拒绝rdquo;,在网上搜索了一下原因。原来是MySQL没有授权其远程链1,SQLyog客户端,,用root用户远程链接MySQL时,提示“访问被拒绝”&…

JavaME:Google静态地图API

无论您是需要基于位置的应用程序的地图还是只是出于娱乐目的,都可以使用有史以来最简单的方法:Google Static Maps API。 在这篇文章中,我们将看到如何从纬度和经度获得地图作为图像。 可以使用Location API获得纬度和经度,我们将…

深入探讨JS中的数组排序函数sort()和reverse()

最近在研究Javascript发现了其中一些比较灵异的事情。有点让人感到无语比如: alert(typeof( NaN NaN));//结果为假。 alert(typeof( NaN ! NaN));//结果为真。 嘿嘿,当然这个不是这篇文章要讨论的!!开始我们的正文 首先,我们来看一下JS中sor…

带有谓词的Java中的功能样式-第1部分

您一直在听到将要席卷全球的函数式编程,而您仍然坚持使用普通Java? 不用担心,因为您已经可以在日常Java中添加一些功能样式。 此外,它很有趣,可以节省许多代码行并减少错误。 什么是谓词? 实际上&#xff…

centos 6.5下安装文件上传下载服务

centos 6.5下安装文件上传下载服务 由于每次在CentOS中要下载一些配置文件到物理机,和上传一些文件到服务器,导致来回的开启ftp软件有点麻烦,这里我们可以使用文件上传下载服务,来解决上传和下载的问题。 1.登录服务器 2.执行命令…