什么是性能,新华字典中对此的解释是:性能指器物所具有的性质与效用。在日常生活当中,性能无处不在,比如一辆车的性能,起步提速的快慢,爬坡是否有足够的动力等等,又或者我们日常使用的电脑,开机是快是慢,玩大型单机游戏时电脑是否会卡,操作是否会不流畅等等,这些都是平常生活中大家会遇到的一些性能问题。正如大家所理解的,软件,自然有其性能,一个大型的系统,有许多值得关注的性能:操作的流畅性,点击功能模块时的响应时间等等,这些都是普遍大众关注的软件性能点。
为什么要进行性能测试呢?很多人都使用过12306订票系统,该系统在购票高峰期时,经常奔溃,导致很多人都订不到票,招致一片的骂声,这时如果有更好的系统,相信大家都会转而去选择更好的产品,而这样就会给公司带来灾难性的损失。性能测试就是为了优化产品质量,提高用户体验,避免客户流失的手段。在软件行业里,性能测试也是非常重要的一块内容,目前越来越多的企业开始重视产品的性能测试。
很多企业在面对软件性能时,常常束手无策,一般资金雄厚的企业,会选择增加硬件的配置来提升软件的性能,但是长此以往,并不能完全地解决所有的性能问题。而如果能够从软件上进行改善,不仅节约了公司的成本,还能够改善性能问题。因此,如何从软件上提升性能,成为了很多企业重点思考的问题。也正是在此需求下,市场上涌现了多款性能测试工具,有商用的,也有开源的,目前大部分的性能测试工具都是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试,在实际选择测试工具时,各企业需要从本身的需求出发进行考虑。
性能测试包括很多方面的测试,其中有前端的性能测试和后端的性能测试,而后端主要关注的是接口的性能测试、数据库的性能测试、服务器代码的性能测试等。这些都是性能测试领域里的重点以及难点的测试。在此主要阐述数据库的性能测试。
接下来以市民健康信息系统为例,讲解如何进行数据库的性能测试,使用的工具是网上开源的一款性能测试工具。
在Web Service协议中,可以使用该性能测试工具内置的数据库连接函数db_connect()来完成对各种常见数据库的连接,从而进一步通过场景并发进行数据库性能测试。
db_connect()函数默认支持四种数据库连接模式:
● SQL(原生MS SQL Server)。
● OLEDB(使用OLEDB连接数据库)。
● ODBC。
● ORACLE。
例如需要完成一个对Oracle数据库的连接,可以通过OLEDB的方式来完成,代码如下:
db_connect(“StepName=Connect”,
“ConnectionString=Provider=OraOLEDB.Oracle.1, Data
Source=********;Server=192.168.*.**;Persist Security Info=True;User ID=****;Password=****”,
“ConnectionName=db1”,
“ConnectionType=OLEDB”,
LAST );
在这里Data Source需要填写连接Oracle时需要的Net Service名称,而用户名密码需要填写在UserID和Password属性中,使用的连接方式是OLEDB。
而通过db_executeSQLStatement()函数可以对数据库进行SQL指令执行。如果想在数据库中执行某条语句查询数据集,并且获得该返回数据集中的部分属性,对其进行响应时间分析从而获得系统数据库的性能时,可以这样写:
int NumRows=0;
int i;
db_connect(“StepName=Connect”,
“ConnectionString=Provider=OraOLEDB.Oracle.1,Data Source=********;Server=192.168.*.**;Persist Security Info=True;User
ID=****;Password=****”,
“ConnectionName=db1”,
“ConnectionType=OLEDB”,
LAST );
start_transaction(“SQL”);
NumRows = db_executeSQLStatement(“StepName=PerformQuery”,
“ConnectionName=db1”,
“SQLStatement=select * from USERS”,
“DatasetName=MyDataset”,
LAST);
end_transaction(“SQL”, AUTO);//获得查询记录开销的时间
output_message(“The query returned %d rows.”,NumRows);
while(i<numrows) span="" {<="">
db_getvalue(“StepName=GetValue”,
“DatasetName=MyDataset”,
“Column=USER_NAME”,
“Row=next”,
“OutParam=MyOutputParam”,
LAST);
output_message(“The value is: %s”,eval_string(“{MyOutputParam}”));
i=i+1;
}
db_disconnect(“StepName=Disconnect”,
“ConnectionName=db1”,
LAST);
通过上面的代码,便可以得到相应的结果。可以通过PL/SQL Developer中执行相应的SQL语句,进行时间上的对比,查看测试出来的响应时间是否准确。
如果需要直接使用ODBC的方式来完成数据库性能测试,那么可以这样编写:
db_connect("StepName=Connect",
"ConnectionString=Driver={SQL
Server};Server=192.168.*.**;Database=*********;Trusted_Connection=yes;",
"ConnectionName=db1",
"ConnectionType=ODBC",
LAST);
这里可以按照标准的ODBC或OLEDB连接写法修改ConnectionString串完成对各种数据对象的连接,并且通过添加事务完成响应时间的监控。
上面分享的是数据库性能测试的一种方式,使用该性能测试工具对数据库进行性能测试,实际上有多种方法,包括通过现有的数据库协议进行CS模式的先录制后执行的模式,以及通过socket方式向服务器发包方式的测试方式。这些是常规书籍上介绍的比较简单上手的测试方法。也可以使用java user的协议进行所有数据库性能的测试工作,java user不需要录制,把所有的操作通过java语言进行实现,通过该性能测试工具调用java的class进行加压批量操作,这样可以不关心被测系统是哪个数据库,只要能够通过jdbc进行访问,就能实现性能测试。
当然也可以通过其他的工具进行数据库性能测试,比如jemeter也是一款出色的性能测试工具,并且相对于上面提到的性能测试工具,这款工具在进行数据库性能测试时,可以提供可视化的界面进行操作,相比上面分享的性能测试工具要调用一大堆的函数来说,jemeter在进行数据库性能测试时,表现得更加简便。


