故事发生在2013年,long long ago,公司有个项目在针对数据库选型的时候曾经做过一次POC性能测试,那次主要是比较在公司的业务场景下,hana和Oracle的处理能力,那个时候还在使用LoadRunner,当时为了屏蔽应用本身对结果的影响,特意列选了业务系统几个典型的sql,直接在两个数据库上进行压力测试。
当时真是痛苦的经历啊,反复斟酌再三决定使用LoadRunner的java vuser协议,直接通过JDBC连接数据库,然后执行特定的几条SQL。
首先是LoadRunner是32 bit版本,所以JDK也只能选择32 bit版本;
然后建立数据连接,访问数据库,执行SQL,所有这些都要自己编码。当年就是因为不喜欢编码,才选择的测试岗啊,为什么最后还是要来写代码(内牛满面.jpg)。
后来又想到频繁建立和销毁数据库连接简直是性能杀手,又不得不在LoadRunner里维护了一个数据库连接池。(我特么是在写一个应用Demo吗?一副懵逼脸.jpg)
前前后后折腾了半个多月,才终于把编码简陋且粗糙的脚本正式跑起来。
经历过这次之后,再有直接压测数据库的事情,我都是能躲就躲,因为我是真的特别特别讨厌写代码啊,尽管后来因为意志不坚定而又做了一次达梦和Oracle的POC性能测试。
时间再拉回到现在,前段时间公司有个项目做性能测试,因为其中某个核心的业务逻辑是写在存储过程的,所以在做性能测试方案的时候,这个存储过程也入选了测试对象中,尽管我依然还是不愿意做针对数据库的压力测试,但也没办法,谁让人家顶着“核心”这两个字的主角光环呢,这个时候我们已经全面使用HyperPacer来进行日常的各种测试工作了。
下面就再来说一说用HyperPacer做数据库压力测试的过程。
按照国际惯例,还是先show一下完成后的脚本,如下:
是不是很简单明了?在这个脚本里依次使用到了如下几个元件:配置元件里的JDBC连接配置、参数化管理器,取样器里的JDBC取样器。
首先在我们的工程里添加JDBC连接配置,在连接配置填写信息如下:
都是常规的信息填写,没太多可说的。
然后在场景并发测试下添加JDBC取样器,如下所示:
这里各个编辑控件和下拉控件的使用及每个选项的说明,只要在HyperPacer的工具栏上点击帮助就可以看到,已经写的很清晰了,我们这里不再重新写一遍辣么严肃的话了。
在绑定变量赋值的编辑区域里,我们看到在前两个变量赋值这里做了参数化,关于参数化和数据池使用的详细解释可以参考社区的其它文章:
《如何在性能测试中实现脚本参数化》
这里需要注意的是:此处绑定变量赋值的顺序和个数需要和存储过程中定义的参数保持完全一致。
在绑定变量类型的编辑区域,这里的类型只可以是在java.sql.Types中定义的类型,并且要保证和我们调用的存储过程中的参数类型保持一致。
我们这里说的类型保持一致要分为两方面来看:
一方面要保证用于传参的变量类型保持一致,即这里写的JDBC类型要和SQL类型保持一致,关于保持类型一致的转换映射关系可以查看JDK的官方文档,针对每一种类型都有很详细的说明:
这里注意要根据自己HyperPacer配置使用的JDK版本确定相应的官方文档,我这里列出的是1.5版本的一个官方文档。
另一方面要保证此处填写的类型与存储过程的参数类型保持一致,我们知道存储过程的参数类型有输入参数IN、输出参数OUT以及输入输出参数IN OUT类型,因此在绑定变量类型这里也要加上相应的参数类型前缀 。如果没有加上类型前缀的话,工具默认认为参数类型为IN。比如在咱们的例子中存储过程最后面的4个参数为输出参数,则在绑定变量类型这里填写类型的时候就需要加上OUT作为前缀。
返回变量列表不要求必须填写,如果在后面的测试步骤里需要用到该存储过程的返回值,就必须要写,否则可以不写。在咱们的例子里,因为这里返回的“transaction_id”在下一个JDBC取样器里要作为调用存储过程的输入,所以可以看到咱们填写了返回变量列表,并且和存储过程的输出参数保持一致。
按照上面的讲解,再依次将其它要串行执行的存储过程也如此添加JDBC取样器并设置好,我们的测试脚本就算是完成了。
如此操作下来,使用HyperPacer进行数据库压力测试的脚本设计完成,总共耗时不到5分钟。然后再回头想一想前面文章开头我们说的用LoadRunner来实现数据库性能测试脚本的工作量。不言而喻,在针对数据库进行性能测试这件事上,HyperPacer明显要方便快捷的多。
[email protected]
test
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
一个具有注脚的文本。2
Markdown将文本转换为 HTML。
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::
这将产生一个流程图。:
我们依旧会支持flowchart的流程图:
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
mermaid语法说明 ↩︎
注脚的解释 ↩︎