使用JMeter5测试PostgreSQL数据库

在本节中,我们使用“JDBC请求”取样器组件来测试PostgreSQL数据库服务器。其他需使用的组件包括 线程组、 JDBC请求、摘要报告。对于MySQL或其他可以通过JDBC驱动连接的数据库,方法是类似的。

准备测试环境

本示例中JMeter与PostgreSQL运行在同一台机器,使用Java 11,PostgreSQL版本是13.4。

(1)准备数据库

首先需要安装PostgreSQL数据库(后面简称PG),请参考官方安装说明[ pg下载地址:https://www.postgresql.org/download/ ],选择相符的操作系统,下载和安装PG。完成安装后,我们在PostgreSQL中创建数据库,并在该库下创建数据表以及创建相关用户。

本示例中创建数据库为“exampledb”,表名称为“user_tbl”。下表为相关sql命令。

代码片段 0-1 在PostgreSQL数据库上创建用户和数据表:

1
2
3
4
5
6
7
#使用postgres用户在pg命令行上执行下述命令
CREATE USER dbuser2 WITH PASSWORD 'password';
CREATE DATABASE test OWNER dbuser ENCODING utf8;
GRANT ALL PRIVILEGES ON DATABASE test to dbuser;
#然后使用新创建的用户dbuser登录pg后执行下述命令插入记录
CREATE TABLE user_tbl(name VARCHAR(20), signup_date DATE);
INSERT INTO user_tbl(name, signup_date) VALUES('john', '2020-10-01');

(2)安装数据库驱动

JMeter需要通过数据库驱动程序连接PostgreSQL数据库服务器,因此要将相关驱动文件复制到 JMeter安装目录下的 ./lib目录,并重启JMeter。JMeter从lib和lib/ext目录加载jar,更多详细信息请参阅JMeter的类路径。我们使用postgresql-42.2.23.jar[ 下载地址:https://jdbc.postgresql.org/download.html ]作为访问PostgreSQL数据库的驱动持续。

添加JDBC请求组件

此处略过如何添加线程组以及设置用户数,参考之前的操作步骤即可。现在我们要在测试计划中添加执行JDBC Request的JMeter组件,即“JDBC请求”取样器。
首先需要配置JDBC连接属性。选择“线程组”,单击鼠标右键,然后选择 添加  →  配置元件 →  JDBC Connection Configuration 。配置该元件属性,如下图所示。

图 3-5-2-1 jdbc connection设置
jdbc connection

需要设置的字段包括:

  • 连接池变量名称(Variable name for created pool):JDBC取样器使用它来识别相关配置,可以是任何字符串。本示例设为postgresql。
  • 数据库地址(Database URL):jdbc:postgresql://localhost/exampledb
  • JDBC 驱动类(JDBC Driver class):org.postgresql.Driver
  • 用户名(Username):数据库的用户名。本示例中,此处为dbuser2。
  • 密码(Password):用户名的密码。本示例中,用户dbuser2的密码是password。
  • 其他字段可以使用默认值。
  • Validation query字段:
1
2
3
4
5
6
7
8
9
10
11
Validation Query:这个有好多资料里都没说到,validationQuery must be an SQL SELECT statement, that returns at least one row。不同的数据库,所选择的Validation Query是不同的,经过外国友人的测试,具体可参照以下(postgresql选select 1):
hsqldb - select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
Oracle - select 1 from dual
DB2 - select 1 from sysibm.sysdummy1
mysql - select 1
microsoft SQL Server - select 1 (tested on SQL-Server 9.0, 10.5 [2008])
postgresql - select 1
ingres - select 1
derby - values 1
H2 - select 1
Firebird - select 1 from rdb$database

接着,添加JDBC请求取样器。再次选择 JDBC 用户元素,单击鼠标右键,在弹出菜单选择 添加  →  取样器  →  JDBC Request 。然后,左键选择这个新元素并修改相关配置。

在我们的测试计划中,包括三个 JDBC Request取样器。第一个取样器向PostgreSQL数据库增加一行记录,第二个取样器查询记录,第三取样器清理第一个取样器插入的记录。JMeter 将按顺序将请求发送到服务器。具体配置如下。

图 0-1 第一个JDBC请求取样器即执行增加记录操作的取样器:
jdbc connection

上述为第一个请求配置面板,属性按如下设置编辑:

  • 将名称更改为“jdbc add”。
  • 连接池变量名称:“ postgresql”(与JDBC Connection Configuration即JDBC连接配置中的相同)
  • 设置查询类型(Query Type)为“Update Statement”
  • SQL 查询字符串
1
2
3
4
5
6
7
INSERT INTO user_tbl(name, signup_date) VALUES('mike', '2020-10-01');
--其中查询字符串中可以使用JMeter变量或?,如:
INSERT INTO user_tbl(name, signup_date) VALUES('${name}', '2020-10-01')
--其中name为用户定义的变量。
--或者:
INSERT INTO user_tbl(name, signup_date) VALUES(?, '2020-10-01')
--目前暂时不能使用占位符,比如VALUES(?)这样。
  • 在parameter values传入相关参数,在parameter types设置参数类型,均以逗号分隔。

第二个用于查询的JDBC Request取样器如下。
jdbc add

第三个JDBC Request取样器用于清理之前插入的数据,配置如下。
jdbc add

执行和查看结果

在执行测试时,JMeter 使用控制面板中指定的配置创建数据库连接池。该连接池在 “JDBC Request ”中的“Variable Name of Pool declared in JDBC Connection Configuration”字段中引用。可以使用多个不同的 JDBC 配置元素,但它们必须具有唯一的名称,否则定义在后面配置将覆盖前面定义的配置。每个 JDBC Request都必须引用一个 JDBC 配置池,多个 JDBC Request可以引用同一个池。

在计划中,可以添加监听器来查看/存储测试结果。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021 Johnny Li
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信