swhxzr

导航

jmeter连接数据库

mysql下载地址:https://dev.mysql.com/downloads/connector/j/

mysql连接器根据语言选择/J,用的是Mac,选择下载.tar.gz格式的

直接点最下面的开始下载,下载完成后解压,然后把mysql-connector-java-8.0.16.jar这个包放到jmeter文件夹lib文件夹里面

在测试计划页面把jar包添加进去

  • Variable Name:数据库连接池的名称,我们可以有多个jdbc connection configuration,每个可以起个不同的名称,在jdbc request中可以通过这个名称选择合适的连接池进行使用。
  • Max Number of Connection: 数据库最大链接数
  • PoolTimeout: 数据库链接超时,单位ms
  • Idle Cleanup Interval (ms): 数据库空闲清理的间隔时间,单位ms
  • Auto Commit:自动提交。有三个选项,true、false、编辑(自己通过jmeter提供的函数设置)
  •   Transaction Isolation
    事务间隔级别设置,主要有如下几个选项:(对JMX加解密) 
    【TRANSACTION_NODE   事务节点 、
    TRANSACTION_READ_UNCOMMITTED  事务未提交读、
    TRANSACTION_READ_COMMITTED   事务已提交读 、
    TRANSACTION_SERIALIZABLE   事务序列化 、
    DEFAULT  默认、
    TRANSACTION_REPEATABLE_READ 事务重复读、 
下面是原文和翻译: 

(1) Variable Name Bound to Pool

Variable Name,数据库连接池的变量名,之后JDBC request可以通过选择不同的连接池名来选择不同的数据库连接

 

Variable name变量名称:与JDBC Request的Variable name保持一致

 

原因:因为链接数据库是需要在JDBC Connection Configuration中配置好的,然后赋予一个变量名称,那么JDBC Request想要去访问数据库,就必须通过这个配置好的元件去链接,所以JDBC Reques就需要通过读取JDBC Connection Configuration的变量中的信息,

 

那怎么读取呢,JDBC Reques就需要用到这个变量了,就需要到名称为mysql的元件中去应用。

(2) Connection Pool Configuration 

Max Number of Connections    该数据库连接池的最大连接数,一般可设置为0,意思是每个线程都使用单独的数据库连接,线程之间数据库连接不共享
中文:池中允许的最大连接数。在大多数情况下,将其设置为0,这意味着每个线程将得到它自己的池,其中只有一个连接,即线程之间不共享连接。如果您真的想要使用共享池(为什么?),那么将max count与线程数相同,以确保线程不会相互等待。
原文:aximum number of connections allowed in the pool. In most cases, set this to zero (0) . This means that each thread will get its own pool with a single connection in it, i.e. the connections are not shared between threads. If you really want to use shared pooling (why?), then set the max count to the same as the number of threads to ensure threads don't wait on each other.

Max Wait (ms)   在连接池中取回连接最大等待时间
中文:如果在试图检索连接过程中(取回连接)超过所设置期限,连接池抛出一个错误
原文:ool throws an error if the timeout period is exceeded in the process of trying to retrieve a connection

Time Between Eviction Runs (ms)     疏散时间
中文:在空闲对象驱逐线程运行期间,可以休眠的毫秒数。当非正值时,将运行无空闲对象驱逐器线程。(默认为“60000”,1分钟)(如果当前连接池中某个连接在空闲了time Between Eviction Runs Millis时间后任然没有使用,则被物理性的关闭掉。)
原文:The number of milliseconds to sleep between runs of the idle object evictor thread. When non-positive, no idle object evictor thread will be run. (Defaults to " 60000 ", 1 minute)

Auto Commit    自动提交sql语句
中文:打开或关闭连接的自动提交。
原文:Turn auto commit on or off for the connections.

 

(3) Connection Validation by Pool  

这是Jmeter用来检验数据库连接是否有效的一种机制,超过5秒没有使用的话,就会用validation query去测试下这个连接是否有效

 

Test While Idle   当空闲的时候测试连接是否断开
中文:测试连接池的空闲连接,验证查询将会被使用去测试。
原文:Test idle connections of the pool, see BasicDataSource.html#getTestWhileIdle . Validation Query will be used to test it.

Soft Min Evictable Idle Time(ms)   
中文:最少的时间连接可能在池中闲置,然后才有资格被闲置的对象驱逐出去,额外的条件是至少在池中保持连接。默认值为5000(5秒)
原文:Minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle object evictor, with the extra condition that at least minIdle connections remain in the pool. See BasicDataSource.html#getSoftMinEvictableIdleTimeMillis . Defaults to 5000 (5 seconds)

 

 

(4) Database Connection Configuration

Database URL: jdbc:mysql://服务器地址:3306/数据库名  

(比如:jdbc:mysql://ip:3306/数据库名?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true)

    备注:“&allowMultiQueries=true” 这句话的意思呢  是为了在JDBC中执行多条select语句的时候用的

JDBC Driver class:数据库JDBC驱动类名:com.mysql.jdbc.Driver

Username:数据库连接用户名

password:数据库连接密码

例如(上面url或class如有问题,可试一试下面的):

Database URL:  jdbc:mysql://localhost:3306/information_schema?serverTimezone=GMT%2B8

JDBC Driver class:  com.mysql.cj.jdbc.Driver

Username:root

password:xxx

 

然后选择配置jdbc request

(如果sql写成多条的话,后面是要加上;的,还有就是看了好多人说后面不要加;,但是我加上后依然可以正常执行)

variable name of pool declared in JDBC connection configuration(注意:这里要和上面的variable name for created pool里面一致)

Query Type :查询类型

parameter values: 参数值(若sql语句中有占位符,比如type=?,问号的值可以在这个字段中写,下面这个字段写值的数据类型)

parameter types :参数类型

variable names:sql执行结果变量名(可直接用作接口参数),在其他地方使用时注意格式,并不是${account}这样就可以用的,参数使用方法下面有说明。

result variable names: 所有结果当做一个对象存储

query timeouts:  查询超时时间

handle results :定义sql返回结果,处理结果集(可以选择:store as string:存储为字符串,store as Object:存储为对象,count records:记录数,编辑,)

结果查出来后需要在线程组下创建一个循环控制器,在循环控制器下创建http请求,和计数器

 这里的count是前面sql查询的结果我直接把它用作循环次数和计数最大值,里面就一个值,写成count_#或者count_1都一样的

 循环次数可以通过查询结果作为变量使用,计数器也是一样,starting value:起始值,Maximum value:最大值,number format:数字格式(可填001,这样就是001,002,003.....或不填,默认123)

 

如果接口的请求正文不是 Form data而是Request Payload,那么就要把参数转换成json格式放在消息体数据里面

因为从数据库里查出来的密码都是加密的,所以登录接口我直接在测试计划里自定义了一个psd常量

${_V}作用:被用于执行嵌套函数,因为变量中还有变量,所以需要用${_V(account_${index})}

${_V(account_${index})} :account是sql结果变量名称,index是计数器别名

这里写成${_V(account_${index})}

Variables names 参数使用方法:

jmeter官网给的解释是:如果给这个参数设置了值,它会保存sql语句返回的数据和返回数据的总行数。假如,sql语句返回2行,3列,且variables names设置为A,,C,那么如下变量会被设置为:

  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}...来获取相应的值

 文中部分内容参考:

https://www.cnblogs.com/insane-Mr-Li/p/10098523.html

posted on 2019-08-13 11:29  swhxzr  阅读(472)  评论(0编辑  收藏  举报