pays-阻焊剂
数据库性能测试方法讨论
发布时间
: 2008-5-04 16:18
作者
:
陈嘉祥
王治
方耀等
来源
:
51Testing
投
稿
字体
:
小
中
大
|
上一篇
下一篇
|
打印
|
我要投稿
|
每周一问,答贴有
奖
p>
摘要:在
LOADRUNNER
中使用脚本
和
JAVA
程序进行
数据库性能测试<
/p>
。
关键词:
LOADRUNNER
,
JAVA, Benchmark
一、
前言
p>
在测试
工作
中经常需要对数据库进行性能测
试,以对数据库进行调优,保
证数据库的稳定和高效。
p>
本文使用常用的性能测试工具
LOADRUNNER
,
JAVA
和专用数据库性能测试工
< br>具
Benchmark
,
讨论数
据库性能测试的不同方法,
希望能抛砖引玉,
寻找出更新更好的
方法。
二、
任务引入
数据库性能测试的需求,一般来源于下面几个方面:
1
、
数据库调优;
2
、
数据库选型;
3
、
数据库服务器选型;
4
、
其他;
下面,就针对于这些常用的需
求,列举几个不同的实例,共享一下测试方法。
1)
LOADRUNNER
应用
p>
测试任务:评估某项目的核心业务逻辑(数据查询、数据复用、抽取同步
整合)
在不同压力下的性能表现,判断系统瓶颈,
得到最优
系统配置参数和建议,
并为数据
库的试运行工作提供可靠的性能
可行性依据;
数据查询性能指标:
900
个用户并发,平均响应时间在
3
秒以内;
数据库性能测试需求:数据库调优或服务器选型;
include
Action()
{
static LRD_INIT_INFO
InitInfo = {LRD_INIT_INFO_EYECAT};
static LRD_DEFAULT_DB_VERSION
DBTypeVersion[] =
{
{LRD_DBTYPE_NONE, LRD_DBVERSION_NONE}
};
static void FAR *
static void FAR *
static
void FAR *
static void FAR *
static void FAR *
unsigned
long
OraEnv1;
OraSvc1;
OraSrv1;
OraSes1;
OraStm1;
rownum;
lrd_init(&InitInfo,
DBTypeVersion);
lrd_initialize_db(LRD_DBTYPE_ORACLE,3,
0);
lrd_env_init(LRD_DBTYPE_ORACLE,
&OraEnv1, 0, 0);
lrd_ora8_handle_alloc(OraEnv1, SVCCTX,
&OraSvc1, 0);
lrd_ora8_handle_alloc(OraEnv1, SERVER,
&OraSrv1, 0);
lrd_ora8_handle_alloc(OraEnv1, SESSION,
&OraSes1, 0);
//
连接数据库
lrd_server_attach(OraSrv1,
lrd_ora8_attr_set_from_handle(OraSvc1,
SERVER, OraSrv1, 0, 0);
//
设定数据库密码
lrd_ora8_attr_set(OraSes1, USERNAME,
lrd_ora8_attr_set(OraSes1, PASSWORD,
//
初始化连接
session
lrd_ora8_attr_set_from_handle(OraSvc1,
SESSION, OraSes1, 0, 0);
//
开始连接数据库
lrd_session_begin(OraSvc1, OraSes1, 1,
0, 0);
lrd_ora8_handle_alloc(OraEnv1,
STMT, &OraStm1, 0);
//
设定查询语句
lrd_ora8_stmt(OraStm1,
* FROM T_TASK_ALARM_TYPE
WHERE
TYPE_CODE=7
0);
//
执行查询语句
lrd_ora8_exec(OraSvc1, OraStm1, 0,
0,&rownum, 0, 0, 0, 0, 1);
//
释放连接数据库的各种变量
lrd_handle_free(&OraStm1, 0);
lrd_session_end(OraSvc1, OraSes1, 0,
0);
lrd_server_detach(OraSrv1, 0, 0);
lrd_handle_free(&OraEnv1, 0);
//lrd_end(0);
return 0;
}
上面的
LoadRunner
脚本在
Virt
ual User Generator
调试通过后,在
Con
troller
中打开,用
900
个模
拟用户并发测试,即可得出性能指标(
LoadRunner
的
操作
这里就不在赘述,
google
一
下)。
从上面的例子看出,
此应用比较难懂
,
是
LoadRunner
专属的方法
,
而且可
扩展性不强。如果再遇到
其他
类型的数据库测试,
协议将会是一个很大的问题。所以,
为了
容易理解,可扩展性强,引出了下面的
J
AVA
应用方法。
2)
JAVA
应用
测试任务:测试待选的数据库的性能;
p>
数据查询性能指标:
20
个用户并发,每秒
执行增删改语句数不少于
1000
条;
数据库性能测试需求:数据库选型;
import .*;
import
import ties;
public class
testsybase {
String sDbDriver =
String
sConnStr =
private Connection conn = null;
private Statement stmt = null;
ResultSet rs =
null;
public testsybase()
{
try {
e(sDbDriver);
} catch (otFoundException e) {
n(
}
}
public void executeUpdate()
{
stmt = null;
rs = null;
try {
conn =
nection(sConnStr,
stmt = Statement();
n(new Date());
int j=0;
for(int
i=0;i<10000;i++){
j=10001+i;
//
追加
sql=
//
更新
//sql=
field_no='testupdate',*,*...
where filed_no=
//
删除
//sql=
from
tablename
where
tablename=
//
查询
tablename=
}
//sql=
}
eUpdate(sql);
//rs=eQuery(sql);
//();
n(new Date());
//();
();
();
n(
} catch (SQLException ex) {
n(
+
sage());
}
public void
executeSql(String sql)
{
stmt = null;
rs = null;
try {
conn = nection(sConnStr,
stmt = Statement();
rs=eQuery(sql);
();
n(
();
();
//n(
}
catch (SQLException ex) {
n(
}
}
public static void main(String[] args)
{
testsybase mytest = new testsybase();
eUpdate();
}
}
上面的
java
代码调试通过后,
可以通过注释不同的代码段,
分别测试增
加、
修改、删除、查询的等情况的性能,并得出时长,反算出性能。
p>
这里说明一点,
java
代码即可以单独的
打成
jar
包,放在服务器上运行,
也
可以直接在本地
IDE
运行。如果觉得
LoadRunner
专业,也可以放到
LoadRunner
里运行,
选择
Java
Vuser
协议,
这里需要注意的是,
LoadRunner
运行时,
需要设置好
Runtime
Settings
中的
Classpath
,代码运行需要的
jar
包都要加到这里。提醒一点的是,笔者使用的是
LoadRun
ner 8.0
,在跑上面的代码时,使用的是
Java 1.
4
的虚拟机,高版本如
1.5
就不能<
/p>
成功运行。
从这个例子可以看出,此种应用灵
活性强,任何数据库都可以做测试,只
要有提供的驱动即可,
如
果需要,
还可以扩展其他的方法。
但测试人员需至少掌握一种高
级
编程语言,
对数据库操作也必须很熟悉,
要求较高,
所以又引出了下面的
Benchmark
的应用
方法。
3)
Benchmark
应用
1.
引言
诚然上述的编写代码以进行数据库性能测试,
对于初级测试员来说还显得有点
难度,
如何才能使用比
较简单的方法进行测试呢?这里将会介绍
Quest
公司的
Benchmark
Factory
,它以向导的方式一步步指引
你开展测试,是一
个很容易上手的工具。
2.
模型设计
假设有一个正在使用的数据库,库中有相当数量的数据,作为支撑某个系统用。每天上班时间中大
概
有
500
人次的
A
表写入记录,也大约有
500
人
次的
A
表查询;系统的程序每天大概会往数据库的
B
表写
进
50000
条记录,以及
5000
条
C
表记录,还有
1000
条
A
表记录,删除
500
条
A
表记录,更新
100
条
D
表记录;然后管理员要对
B
表、
C
表及
D
表进行
50
人次查询。根据二八
原则,百分之八十的工作在百分
之二十的时间内完成,即上述列出的工作量,其
80%
将在
1.6
小时
完成。
另外作为对
比,本次测试再对该模型进行缩减处理,即在二八原则的基础上,工作量及时间都缩减为
原来的
10%
。
最终的结果是
10<
/p>
分钟内,对数据库进行的查询操作有
40
条
A
表查询、
BCD
< br>表各
4
条查询;写操作
有
120
条
A
表记录、
4000
条
B
表记录、
400
条
C
< br>表记录;更新操作有
8
条
D
p>
表记录;删除操作有
40
条
A
表记录。
3.
语句构建
相关的
SQL
语句构建如下:
< br>
1
、查询
A
< br>表
select * from A
2
、查询
B
表
select * from B
3
、查询
C
表
select * from C
4
、查询
D
表
select * from D
5
、写入
A
表
insert into A (a,b,c) values (1,2,3)
p>
6
、写入
B
表
p>
insert into B(e,f,g) values
(4,5,6)
7
、写入
C
表
insert into
C(h,i,j) values (7,8,9)
8
、更新
D
表
update D set k = $$BFRand(100)
9
、删除
A
表记录
delete from A WHERE ROWNUM<=1
注:
$$BFRand(100)
是
Benchmark
Factory
提供的一个随即函数。
4.
方案建立
在
Benchmark Factory
里面建立好
ORACLE
的
prof
ile
后,新建一个
Scenario
(Create a custom load scenario)
因为有多个
SQL
< br>语句,所以类型选择混合
(Mix)
接着选择添加
SQL
语句
一一填写完成并根据模型设计赋予不同的权重
(Weight)
pays-阻焊剂
pays-阻焊剂
pays-阻焊剂
pays-阻焊剂
pays-阻焊剂
pays-阻焊剂
pays-阻焊剂
pays-阻焊剂
-
上一篇:人教版九年级全一册英语单词表
下一篇:民航从业人员的工作负荷的研究