性能主题

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,按下面步骤建立测试项目:

  1. Thread group 线程组取名 'Database Users'
  2. 增加一个 JDBC Request类型的Sampler 取样
  3. 增加 JDBC Connection Configuration类型
  4. 增加三个 Random Variable
  5. 增加一个监听器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中:

  1. $JMETER_HOME/lib/ext/ApacheJMeter_core.jar
  2. $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请求配置页面显示你自己定制的请求。