Jmeter连接数据库以及配合BeanShell和http request等组合应用

一、连接前准备:下载通过jdbc连接postgresql的jar包

下载地址:https://jdbc.postgresql.org/download.html

下载完成后放在Jmeter安装路径下的/Apach Jmeter4.0/lib/下,然后重启Jmeter

注意:如果没有jar包或jar包的版本不对,会提示“could not load 'org.postgresql.Driver'”。

二、配置JDBC连接

1.右键线程组->添加->配置元件->JDBC Connection Configuration

  • Variable Name for created pool:数据库连接池的名称,我们可以有多个jdbc connection configuration,每个可以起个不同的名称,在jdbc request中可以通过这个名称选择合适的连接池进行使用。
  • Max Number of Connections:连接池的最大连接数,在大多数情况下,将其设置为零(0)。这意味着每个线程将获得其自己的池,其中包含单个连接,即线程之间不共享连接。如果你真的想使用共享池),那么将最大链接数设置为与线程数相同,以确保线程不会相互等待。
  • Max Wait (ms):最大超时间
  • Time Between Eviction Runs (ms) :空闲连接池清理的时间间隔。
  • Auto Commit:事务是否自动提价选项,比如Oracle执行一条更新操作,不Commit一下,数据不会更新到数据库中的,这个选项帮我们自动提交。
  • Transaction Isolation:JDBC事务控制数据库的事务控制ADIC传送门
    • TRANSACTION_NONE:不支持的事务,TRANSACTION-NONE=0
    • TRANSACTION_READ_UNCOMMITEED:允许脏读,不可重复读和幻读
    • TRANSACTION_READ_COMMITEED:禁止脏读,允许不可重复读和幻读
    • TRANSACTION_REPEATABLE_READ:禁止脏读和不可重复读,允许幻读
    • TRANSACTION_SERILIZABLE:禁止脏读,不可重复读和幻读
    • DEFAULT:JMETER设定的。默认值是1,其实是TRANSACTION_READ_COMMITEED 禁止脏读,允许不可重复读和幻读
  • Test While Idle:测试池的空闲连接,请参阅BasicDataSource.html#getTestWhileIdle。查询验证。
  • Soft Min Evictable Idle Time(ms):
  • Validation Query:验证SQL的语法
  • Database URL:数据库地址,以下为不同数据库的连接方式:
MySQL

Driver class

com.mysql.jdbc.Driver

Database URL

jdbc:mysql://host[:port]/dbname



PostgreSQL

Driver class

org.postgresql.Driver

Database URL

jdbc:postgresql:{dbname}



Oracle

Driver class

oracle.jdbc.OracleDriver

Database URL

jdbc:oracle:thin:@//host:port/service OR jdbc:oracle:thin:@(description=(address=(host={mc-name})(protocol=tcp)(port={port-no}))(connect_data=(sid={sid})))



Ingress (2006)

Driver class

ingres.jdbc.IngresDriver

Database URL

jdbc:ingres://host:port/db[;attr=value]

Microsoft SQL Server (MS JDBC driver)

Driver class

com.microsoft.sqlserver.jdbc.SQLServerDriver

Database URL

jdbc:sqlserver://host:port;DatabaseName=dbname

Apache Derby

Driver class

org.apache.derby.jdbc.ClientDriver

Database URL

jdbc:derby://server[:port]/databaseName[;URLAttributes=value[;…]]
  • JDBC Driver class:数据库类型,数据库的驱动包需要放到/lib目录下,使用mysql依赖mysql-connector-java-8.0.13.jar下载地址
  • Username:用户名
  • Password:密码

2、右键线程组->添加->取样器->JDBC Request

  • Variable Name of Pool declared in JDBC Connection Configuration(必须) :连接池绑定的JMeter变量的名称。这必须与JDBC连接配置的“变量名称”字段一致。
  • Query Type:查询类型,根据语句设置查询的类型
    • Select Statement:执行查询语句的时候使用。可以使用${}引入参数,不可使用占位符进行参数化
    • Update Statement :执行更新操作的时候用到,包括插入与修改。可以使用${}引入参数,不可使用占位符进行参数化。
    • Callable Statement:对应JDBC规范中的CallableStaenent对象,它为所有的DBMS提供了一种以标准形式调用存储过程的方法,白话就是可以调用存储过程,也就是可以有入参,有占位符。可以使用${}引入参数,也可以使用占位符引入参数。
    • Prepared Select Statement:预编译查询语句,与Select Statement相比效率更好,可以使用${}引入参数,可以使用占位符引入参数。
    • Prepared Update Statement:预编译更新语句,包括查询与插入,与Update Statement 效率更好,支持占位符引入参数。 可以使用${}引入参数,可以使用占位符引入参数。
    • Commit:当前连接状态中的内容提交,查询语句中的SQL在执行完成后马上提交,使用该项时JDBC Connection Configuration 中的 Auto commint 选项为False。可以使用${}引入参数,可以使用占位符引入参数。
    • Rollback:当前连接状态中的内容可回滚。可以使用${}引入参数,可以使用占位符引入参数。
    • Autocommit(false):指明不要自动提交,如果JDBC Connection Configuration 中的 Auto commint为true 覆盖该选项。可以使用${}引入参数,可以使用占位符引入参数。
    • Autocommit(true):指明允许自动提价。可以使用${}引入参数,可以使用占位符引入参数。
    • Edit :变量应用,引用的为上述的任意一个变量
  • SQL Query SQL查询语句,不需要输入行尾的分好
  • Parameter values:参数值,多个值用,分割
  • Parameter types:参数类型,INTEGER, DATE, VARCHAR, DOUBLE
  • Variable Names:SQL的执行语句往往返回的是一个数据集,我们可以把它保存的变量中,让后面的元件调用。
  • Result variable name :上面的 Variable Names中额变量是个数与队列对应的,Result variable name创建一个数组,保存所有返回的结果。
  • Query timeout:定义查查询时间
  • Handle result set:定义如何处理由callable- statements语句返回的结果

三、实例操作之简单查询

1、连接postgresql数据库

扫描二维码关注公众号,回复: 12609167 查看本文章
  • 定义数据库连接池名称:MYSQL
  • URL:连接postgresql的配置,格式:jdbc:postgresql://ip:port/dbname,如jdbc:postgresql://40.98.151.20:5432/away
  • JDBC Driver class:org.postgresql.Driver
  • Username:用户名
  • Password:登录密码

2、新建查询ad表的某个字段

3、查询结果:

四、实例操作之查询参数化

1、单个查询参数化

语句:

select * from booking_domain where id= ${id}

查看查询结果:

2、多个查询参数化

语句:

select * from booking_domain where id= ${id} and name= ${name}

查询结果:

五、实例操作之引用返回结果

1、通过设置Variable Names来保存变量 查询语句

select id,name,type from booking_domain where id= ${id} and name= ${name}

我们的查询语句中指定了3个返回的值,也就是说会返回3个列。在Variable Names 设置A,B,C。A保存第一列的数据,B保存第二列的数据以此类推。那么如下变量会被设置为。

A_#=2 (总行数)

A_1=第1列, 第1行

A_2=第1列, 第2行

C_#=2 (总行数)

C_1=第3列, 第1行

C_2=第3列, 第2行

如果返回结果为0,那么A_#和C_#会被设置为0,其它变量不会设置值。如果第一次返回6行数据,第二次只返回3行数据,那么第一次那多的3行数据变量会被清除。可以使用可以使用${A_#}, ${A_1}...来获取相应的值

脚本代码:

log.info("${A_#}"); //第一列有多少行
log.info("${B_#}"); //第二列有多少行
log.info("${C_#}"); //第三列有多少行
log.info("${A_1}"); //第一列第一行的值
log.info("${B_1}"); //第二列第一行的值
log.info("${C_1}"); //第三列第一行的值

使用Beanshell Sampler 输出结果:

日志结果:

实际数据库中也确实只有这一条:

请求返回结果:

2、通过Result variable name保存结果,Result variable name会将返回的结果保存为数组,通过vars.getObject("result").get(0).get("name")获取值

脚本代码:

allvalue = vars.getObject("result"); //获取全部的值
value1 = vars.getObject("result").get(0); //获取列表你内下标为0的值
valuekey = vars.getObject("result").get(0).get("name"); //获取列表你内下标为0的值
log.info("全部的返回结果" + allvalue); //第一列有多少行
log.info("数组内下标为1的值" + value1);
log.info("数组内下标为1的值的域名" + valuekey);

使用Beanshell Sampler 输出结果:

执行结果:

附加:这边再加一个组合操作,就是把数据库查询的结果放到请求参数中:

 在http元件中使用结果,通过函数__jexl3()执行vars.getObject("result").get(0).get("name")

即:

${__jexl3(vars.getObject("result").get(0).get("name"))}

执行结果:

六、Test  Plan中定义变量与Bean Shell结合

1、在Test Plan中定义如下三个变量:

2、Bean Shell脚本:

  a、bean shell可以接受传入参数,如下图:${u1} ${u2} ${u3},中间要有空格符

  b、参数可以通过bsh.args[]按顺序提取

  c、bean shell提供了一个内置变量Parameters,来保存参数的集合

脚本代码:

// 获取参数传递过来的值并存入变量
vars.put("v1",bsh.args[0]);
vars.put("v2",bsh.args[1]);
vars.put("v3",bsh.args[2]);
// 获取参数传递过来的变量集合
vars.put("v4",Parameters);
// 输出变量集合
log.info(Parameters);
// 输出该元件的name
log.info(Label);
// 设置响应代码
ResponseCode = 500;
// 设置响应信息
ResponseMessage = "This is a test";
// 设置是否成功
IsSucces = false;
// 设置响应数据
SampleResult.setResponseData("Hello lucas");

运行结果:

下图中1输入的这两句设置:

ResponseCode = 500;

ResponseMessage = "This is a test";

下图中2输入的这两句设置:

log.info(Parameters);

log.info(Label);

猜你喜欢

转载自blog.csdn.net/LYX_WIN/article/details/108128295
今日推荐