性能主题
Apache JMeter性能负载测试工具
使用Jmeter进行数据库测试
测试目标:
- 每秒能够插入多少个事务记录?
- 插入一个事务记录耗时多少?
- 并发用户数是如何影响每秒插入和平均响应时间?
- 记录数是如何影响每秒插入和平均响应时间??
步骤:
拷贝mysql-connector-java-5.0.5.jar到你的Jmeter安装目录,
数据库表结构:
CREATE TABLE transactions (
id INT NOT NULL AUTO_INCREMENT,
customer_id INT NOT NULL,
order_id INT NOT NULL,
result INT,
PRIMARY KEY (id)
);
开始启动Jmeter,按下面步骤建立测试项目:
- Thread group 线程组取名 'Database Users'
- 增加一个 JDBC Request类型的Sampler 取样
- 增加 JDBC Connection Configuration类型
- 增加三个 Random Variable
- 增加一个监听器Summary Report类型
最后,如下图:
配置Database users参数:
1. 用户数 也是线程数
2. 发出请求多少次,选择'Forever', 线程将以while(true) {...} 循环运行。
配置 JDBC connection连接池:
定义随机random变量,用来插入数据库是使用的,三个随机变量名分别是user id, order id 和 result
配置SQL执行,JDBC Request 是告诉线程做什么逻辑,敲入SQL语句,变量是上面三个:
启动运行即可在Summary Report总结报表中看到结果。
.
定制自己的java请求配置
尽管Jmeter已经有很多Samplers,这里讲解自己编写Jmeter的Sample方法,我们自己编写上面类似JDBC Request 的Java request程序,用于复杂的业务测试:
准备工作,将下面两个jar包加入Classpath中:
- $JMETER_HOME/lib/ext/ApacheJMeter_core.jar
- $JMETER_HOME/lib/ext/ApacheJMeter_java.jar
如果使用Eclipse,将它们作为外部文件加入到build path中。
需要继承抽象类AbstractJavaSamplerClient ,完成下面三个方法:
public Arguments getDefaultParameters() {...}
public void setupTest(JavaSamplerContext context) {...}
public void teardownTest(JavaSamplerContext context) {...}
public SampleResult runTest(JavaSamplerContext context) {...}
getDefaultParameters
如果你要对测试参数进行初始化设置,实现getDefaultParameters. JMeter会显示这些参数在 Java Request configuration GUI. (下图的红框区) :
public Arguments getDefaultParameters() {
Arguments defaultParameters = new Arguments();
defaultParameters.addArgument("memcached_servers", "localhost:11211");
defaultParameters.addArgument("username", "testuser");
defaultParameters.addArgument("password", "testpasswd");
return defaultParameters;
}
setupTest
类似Junit的setup,能够读取测试参数,初始化测试客户端,每个线程只调用一次这个方法。
teardownTest
清理上面方法hold的一些资源。
runTest
在这个方面编写测试逻辑代码,
@Override
public SampleResult runTest(JavaSamplerContext context) {
SampleResult result = new SampleResult();
boolean success = true;
result.sampleStart();
//
// Write your test code here.
//
result.sampleEnd();
result.setSuccessful(success);
return result;
}
将上面你实现的代码打包成jar,放置到$JMETER_HOME/lib/ext/ ,Jmeter将在Java请求配置页面显示你自己定制的请求。