Posted on 2006-07-31 14:02
Jackei 阅读(3509)
评论(27) 编辑 收藏 所属分类:
04.软件性能测试 、
18.开源技术 & 开源文化
关键字:开源性能测试工具 JMeter Oracle
JMeter 的手册中描述了如何访问 MySQL
,但是没有说明如何访问 Oracle
。对于没有 Java
应用开发经验和对 Oracle
不是特别熟悉的朋友,可以参考这篇文章来简单、快速的配置好 JMeter 中的 JDBC
连接和 JDBC Request
。
步骤:
-
新建一个 Thread Group;
-
新增 JDBC Connection Configuration;
-
点击新增的 JDBC Connection Configuration ,需要修改的参数包括:
-
Variable Name:可以先填一个 Oracle,等会解释;
-
Database URL:jdbc:oracle:thin:@{host_IP_or_machine_name}:{Oracle 监听器监听的端口}:{你的Oracle实例的名字} ——大家要注意,“{ }” 大括号 只是我用来说明用的,在配置 JMeter 时,请将 “{ }” 大括号去掉 ^_^
-
JDBC Driver class:oracle.jdbc.driver.OracleDriver
-
Username:访问上面Oracle实例的用户名
-
Password:对应的密码
-
新增一个 JDBC Request,需要修改的参数包括:
-
Variable Name:和上面的 JDBC Connection Configuration填写同样的内容。这里表示 JDBC Connection Configuration建立一个名为Oracle 的连接池,之后其它的JDBC Request都共用这个连接池;
-
Query:select * from table_name 。 这里建议打开你的数据查询工具,输入一条SQL查询语句,保证可以执行看到结果的,然后copy 过来;
-
新增一个View Results Tree;
-
点击 Run,查看结果。可以在Response data tab 看到响应的返回结果。
注意事项:
-
执行时提示:No Suitable Driver。
在电脑上搜索一下 classes12.jar 这个文件,然后copy到JMeter的Lib目录下。如果找不到classes12.jar这个文件,就找找classes12.zip文件,然后把扩展名改为jar;
-
执行时提示:ORA-00911: invalid character。
确保你在JDBC Request里面的Query中输入的SQL语句是正确的。
JMeter 用户手册中关于配置通过JDBC对数据库性能进行测试的部分如下:
http://jakarta.apache.org/jmeter/usermanual/build-db-test-plan.html
另外,我做了两个 Test Plan,一个是 for Oracle 的,一个是 for MySQL 的,你可以点击下面的链接下载。
Feedback
我用jmeter来测试oracle或者mysql的时候都会出现一些异常,不知道是什么原因
2006/09/13 17:52:38 INFO - jmeter.engine.StandardJMeterEngine: Running the test!
2006/09/13 17:52:38 ERROR - jmeter.gui.tree.JMeterTreeNode: Can't obtain GUI class for org.apache.jmeter.protocol.jdbc.config.DataSourceElement
2006/09/13 17:52:38 INFO - jmeter.testelement.TestPlan: add C:\jmeter\lib\classes12.jar to classpath
2006/09/13 17:52:38 INFO - jmeter.testelement.TestPlan: add C:\jmeter\lib\classes12_g.jar to classpath
2006/09/13 17:52:38 ERROR - jmeter.gui.tree.JMeterTreeNode: Can't obtain GUI class for org.apache.jmeter.protocol.jdbc.sampler.JDBCSampler
2006/09/13 17:52:41 INFO - jmeter.gui.util.JMeterMenuBar: setRunning(true,local)
2006/09/13 17:52:54 INFO - jmeter.engine.StandardJMeterEngine: Starting 10 threads for group 线程组. Ramp up = 1.
2006/09/13 17:52:54 INFO - jmeter.engine.StandardJMeterEngine: Continue on error
2006/09/13 17:52:54 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-1 started
2006/09/13 17:52:54 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-2 started
2006/09/13 17:52:54 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-3 started
2006/09/13 17:52:54 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-4 started
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-3 is done
2006/09/13 17:52:55 INFO - jmeter.engine.StandardJMeterEngine: Ending thread 2
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-1 is done
2006/09/13 17:52:55 INFO - jmeter.engine.StandardJMeterEngine: Ending thread 0
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-2 is done
2006/09/13 17:52:55 INFO - jmeter.engine.StandardJMeterEngine: Ending thread 1
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-5 started
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-5 is done
2006/09/13 17:52:55 INFO - jmeter.engine.StandardJMeterEngine: Ending thread 4
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-4 is done
2006/09/13 17:52:55 INFO - jmeter.engine.StandardJMeterEngine: Ending thread 3
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-6 started
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-6 is done
2006/09/13 17:52:55 INFO - jmeter.engine.StandardJMeterEngine: Ending thread 5
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-7 started
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-7 is done
2006/09/13 17:52:55 INFO - jmeter.engine.StandardJMeterEngine: Ending thread 6
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-8 started
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-8 is done
2006/09/13 17:52:55 INFO - jmeter.engine.StandardJMeterEngine: Ending thread 7
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-9 started
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-9 is done
2006/09/13 17:52:55 INFO - jmeter.engine.StandardJMeterEngine: Ending thread 8
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-10 started
2006/09/13 17:52:55 INFO - jmeter.threads.JMeterThread: Thread 线程组 1-10 is done
2006/09/13 17:52:55 INFO - jmeter.engine.StandardJMeterEngine: Ending thread 9
2006/09/13 17:52:55 INFO - jmeter.engine.StandardJMeterEngine: Stopping test
2006/09/13 17:52:55 INFO - jmeter.engine.StandardJMeterEngine: Notifying test listeners of end of test
2006/09/13 17:52:55 INFO - jmeter.gui.util.JMeterMenuBar: setRunning(false,local)
2006/09/13 17:52:55 INFO - jmeter.engine.StandardJMeterEngine: Test has ended
2006/09/13 17:52:58 ERROR - jmeter.gui.tree.JMeterTreeNode: Can't obtain GUI class for org.apache.jmeter.protocol.jdbc.config.DataSourceElement
2006/09/13 17:52:58 ERROR - jmeter.gui.tree.JMeterTreeNode: Can't obtain GUI class for org.apache.jmeter.protocol.jdbc.sampler.JDBCSampler
测试过程中使用断言监控,如下
ORJDBCRequest
Test failed, text expected to contain /2220001/
ORJDBCRequest
Test failed, text expected to contain /2220001/
View Results in Table中的success?选项为空,我看过一些测试web的例子,这项正常的话应该要打勾的,不知道我这个情况是否出现异常?但该表其它数据都有
Summary Report中的ERROR% 选项为100%,是否测试过程不成功?但该表其它选项都有数据
1、将jmeter下载并解压放到c:\jmeter
2、安装jdk1.5,并配置操作系统环境变量
3、将mysql的jdbc驱动文件(*.jar)复制到c:\jmeter\lib目录下
4、启动jmeter:命令行-》cd jmeter,cd bin,执行jmeter
5、新建一个测试计划,添加一个线程,并在添加驱动文件界面下将c:\jmeter\lib目录下mysql驱动文件添加进来
6、添加JDBC Connection Configuration,并配置(连接到远程的数据库)
7、添加JDBC Request,并配置,输入select语句(单独执行sql语句正常,没有用*号代表所有字段)
8、添加断言,随便输入一些字符
9、添加断言结果
10、添加图形结果
11、添加View Results in Table
12、添加Summary Report
13、启动
启动后,图形结果能够显示曲线的变化,还有就是出现上面提到的一些异常,监控远程数据库服务器,能看到测试的客户端连接过去的进程
不知道有无保留过测试数据库比较稳定的测试计划,能否借鉴一下?
我的email:jingxiongzhang@gmail.com
谢谢!
@ppiao
如果你看到Summary Report中的ERROR% 选项为100%,那么建议你在 Test Plan 中增加一个 View Results Tree,然后看一下具体返回的结果是什么样的,特别是留意那些被标志为红色的返回结果。这样你就可以知道请求是否成功了。
我做了两个 Test Plan,一个是 for Oracle 的,一个是 for MySQL 的,你可以点击下面的链接下载。
真的是非常感谢,解了一个测试数据库的燃眉之急。
我测试了一下,出现Summary Report中的ERROR% 选项为100%的情况可能与断言有关,我将之前的断言和断言结果删除就可以了。
@ppiao
不客气 ^_^
也感谢你跟大家分享自己的经验。有机会多交流吧 ^_^
@JMeter 执行者
先看看 JMeter 的随机文档,大概的了解一下。有问题可以在这里留言一起讨论。
我按你所说的配置后,运行有下面的错误,是怎么回事呢?
请赐教!
谢谢
Thread Name: JDBC User 1-1
Sample Start: Wed Dec 13 16:53:17 CST 2006
Load time: 0
HTTP response code:
HTTP response message: java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=153093888)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
HTTP response headers:
@飞[匿名]
1.确认一下环境有没有问题,相关的服务有没有启动;
2.确认一下 JMeter 配置有没有问题。
@东方[匿名]
上面的留言中已经提供了下载。
JMeter Test Plan for Oracle
JMeter Test Plan for MySQL
MySQL JDBC Driver (下载后需要自己把扩展名改为 .jar 然后放到 JMeter 的 lib 目录下)
出现Connection refused,肯定是database url没写对,一般情况应该是服务命名写错了,请确认服务命名。
Load time: 10
HTTP response code: null
HTTP response message: java.sql.SQLException: No suitable driver
HTTP response headers:
我是按你方法去配置的,反复检查配环境也没有错!为什么?请教!多谢
@lvfl
从提示信息来看,是没有找到合适的 Driver。如果填写的没错,那看看是否已经把相应的 JDBC Driver 放到了 JMeter 的 Lib 目录下。
我把class12.jar放到lib目录下后,运行run后,检查jmeter.log日志,有如下信息:
2007/03/22 20:47:56 WARN - jmeter.protocol.jdbc.config.DataSourceElement: Could not load driver: oracle.jdbc.driver.OracleDriver java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
日志里关于classpath的值如下:
2007/03/22 20:47:33 DEBUG - jorphan.reflect.ClassFinder: Classpath = ApacheJMeter.jar;D:\jmeter\lib\Tidy.jar;D:\jmeter\lib\avalon-framework-4.1.4.jar;D:\jmeter\lib\batik-awt-util.jar;D:\jmeter\lib\bsf-2.3.0.jar;D:\jmeter\lib\bshclient.jar;D:\jmeter\lib\commons-codec-1.3.jar;D:\jmeter\lib\commons-collections.jar;D:\jmeter\lib\commons-httpclient-3.0.1.jar;D:\jmeter\lib\commons-jexl-1.0.jar;D:\jmeter\lib\commons-logging-1.1.jar;D:\jmeter\lib\excalibur-datasource-1.1.1.jar;D:\jmeter\lib\excalibur-instrument-1.0.jar;D:\jmeter\lib\excalibur-logger-1.1.jar;D:\jmeter\lib\excalibur-pool-1.2.jar;D:\jmeter\lib\htmlparser.jar;D:\jmeter\lib\htmlparserparser.jar;D:\jmeter\lib\htmlparserparser16.jar;D:\jmeter\lib\jCharts-0.7.5.jar;D:\jmeter\lib\jakarta-oro-2.0.8.jar;D:\jmeter\lib\jdom-1.0.jar;D:\jmeter\lib\jorphan.jar;D:\jmeter\lib\js.jar;D:\jmeter\lib\junit.jar;D:\jmeter\lib\logkit-1.2.jar;D:\jmeter\lib\soap.jar;D:\jmeter\lib\xalan.jar;D:\jmeter\lib\xercesImpl.jar;D:\jmeter\lib\xml-apis.jar;D:\jmeter\lib\xpp3_min-1.1.3.4.I.jar;D:\jmeter\lib\xstream-1.1.3.jar;D:\jmeter\lib\ext\ApacheJMeter_components.jar;D:\jmeter\lib\ext\ApacheJMeter_core.jar;D:\jmeter\lib\ext\ApacheJMeter_ftp.jar;D:\jmeter\lib\ext\ApacheJMeter_functions.jar;D:\jmeter\lib\ext\ApacheJMeter_http.jar;D:\jmeter\lib\ext\ApacheJMeter_java.jar;D:\jmeter\lib\ext\ApacheJMeter_jdbc.jar;D:\jmeter\lib\ext\ApacheJMeter_jms.jar;D:\jmeter\lib\ext\ApacheJMeter_junit.jar;D:\jmeter\lib\ext\ApacheJMeter_ldap.jar;D:\jmeter\lib\ext\ApacheJMeter_mail.jar;D:\jmeter\lib\ext\ApacheJMeter_monitors.jar;D:\jmeter\lib\ext\ApacheJMeter_report.jar;D:\jmeter\lib\ext\ApacheJMeter_tcp.jar;D:\jmeter\lib\ext\classes12.jar;D:\jmeter\lib\junit\test.jar
会不会是因为classpath的内容大长,导致无发加载oracle驱动,我的操作系统似乎windows xp
因为在日志里我看到还有如下信息:
2007/03/22 20:47:34 DEBUG - jorphan.reflect.ClassFinder: strPathsOrJars[14] : ApacheJMeter_jdbc.jar
2007/03/22 20:47:34 DEBUG - jorphan.reflect.ClassFinder: strPathsOrJars[15] : ApacheJMeter_mail.jar
2007/03/22 20:47:34 DEBUG - jorphan.reflect.ClassFinder: Did not find: ApacheJMeter.jar
2007/03/22 20:57:33 DEBUG - jorphan.reflect.ClassFinder: Did not find: D:/jmeter/lib/classes12.jar
tearDown called
tearDown called
tearDown called
setup called
setup called
tearDown called
tearDown called
生成概要结果 + 322 in 896.3s = 0.4/s Avg: 249 Min: 0 Max: 1875 Err:
0 (0.00%)
生成概要结果 = 1000 in 910.7s = 1.1/s Avg: 226 Min: 0 Max: 1875 Err:
0 (0.00%)
可以回复一下是什么原因吗?我没有看到报错,可是在查看结果时候连接是不成功的,
@tesge
建议先检查一下各项参数填写的是否正确;如果都填写正确,请开发人员帮忙检查一下环境吧。
运行期间放入 classes12.jar ,需要重新启动才会消除错误
你好,请问为什么我已经把驱动程序放在了lib下还是说找不到合适的驱动,:(
Change "auto commit" "ture" to "false". The request will be OK.
在jmeter测试mysql的时候,java connection pool的最大数量值的设置是否对测试结果有影响?
谢谢
能不能介绍一下jmeter生成的报告如何看
我的可以运行了,但是对于报告不知道该怎么看
我做的mysql的压力测试!
麻烦帮我看下为什么呢?那个实例名我写的就是我登陆数据库的database名
Thread Name: JDBC User 1-1
Sample Start: 2008-08-05 10:13:04 CST
Load time: 3
Latency: 3
Size in bytes: 0
Sample Count: 1
Error Count: 1
Response code: null 0
Response message: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
192.168.3.95:1521:CD_QA