Jmeter(10)Jmeter连接mysql、mysql参数化
jmeter连接mysql
jmeter
连接mysql
的步骤:
- 创建
testplan
,创建线程组 testplan
需要设置导入mysql
驱动包(mysql-connector-java-xxx.jar
包)- 创建
JDBC Connection Configuration
- 创建
JDBC Request
- 创建
Debug Sampler
和View Results Tree
来查看结果
如下:
1、TestPlan设置:
mysql
驱动包下载:https://dev.mysql.com/downloads/connector/j/
2、JDBC Connection Configuration设置:
Variable Name
: 变量名称,需要变量名绑定到池。需要唯一标识。与JDBC Request取样器中的相对应。JDBC request
可以通过选择不同的连接池名来选择不同的数据库连接
Max Number of Connection
: 数据库最大链接数
Auto Commit
:自动提交
Transaction Isolation
: 事务间隔级别设置
3、JDBC Request设置:
4、运行
运行后,可以看到,已经把f_student_name
的字段的值都取出来了。我们接下来可以利用这些值进行参数化了。
Foreach Controller以及mysql参数化
下面以小强系统为例,使用Foreach Controller
(遍历控制器)和设置mysql
参数化(点击搜索商品参数化)。
参数:
Input Variable Prefix
:输入变量前缀
Output variable name
:输出变量名称,提供给其它控件引用
Start index for loop(exclusive)
:循环开始的索引(默认从0开始,如果填写是2,实际是从2+1个开始执行)
End index for loop(inclusive)
:循环结束的索引(默认从0开始,如果填写是2,实际是从2+1个开始执行)
Add "_" before number
:输入变量名称中是否使用“_”
进行间隔。
点击搜索商品取样器设置,进行参数化(引用的变量是Output variable name
):
运行:
Foreach Controller以及mysql参数化案例2
ForEach Controller
只支持一个变量作为输入,但是有时候我们需要使用多个变量作为输入变量。比如下面,以禁用招生系统的多个学校为目的,实现多个前缀变量的提取和引用:
从上面两图可以看出,ForEacn Controller
只能循环读取同一个前缀的变量,不同变量不同前缀就不行了。因此,我们可以让ForEach
控制器只控制一个变量的输入,然后使用函数来获取另一个前缀的变量的值。
获取相同前缀的变量的值可以使用__V嵌套函数
和__counter计数函数
来实现。
V
函数介绍:
函数__V可以用于执行变量名表达式,并返回执行结果。它可以被用于执行嵌套函数引用。
目前直接使用${A1_${B1}} ,Jmeter是不支持的,所以需要函数来帮忙。
举个栗子,当前有两个变量 A1、A2,还有一个 N = 1
${A1} :可以正常引用
${A${N}} :不可以这样使用,因为不支持函数嵌套
${__V(A${N})} :可以这样使用, A${N} 会变成 A1 ,__V 函数会返回 A1
语法格式:
${__V(var,default)}
参数讲解:
字段 含义 是否必传
Variable Name 需要执行的变量名表达式 yes
Default Name 默认值 no
counter
函数介绍
语法格式:
${__counter(参数1,参数2)}
属性 描述 必填
参数1 如果您希望每个模拟用户的计数器保持独立并与其他用户分开,则为TRUE。 False是对全局请求进行计数。 是
参数2 用于重用此函数创建的值的引用名称。存储的值的格式为$ {refName}。这允许您保留一个计数器并在多个位置引用其值。 否
计数器每次调用时都会生成一个新数字,从1开始,每次递增+1。计数器可以配置为将每个模拟用户的值分开,或者为所有用户使用相同的计数器。如果每个用户的值分别递增,那就像计算测试计划中的迭代次数一样。全局计数器就像计算该计划中运行的请求次数。
计数器使用整数变量来保存计数,因此最大值为2,147,483,647。
本案例禁用学校两个关键值:id
和schoolId
:
id
使用ForEach
来控制,schoolId
使用函数来解决,如下:
schoolId
的函数公式如下:
[{"id":${id},"disable":0,"schoolId":${__V(idd_${__intSum(2,${__counter(TRUE,)})},)}}]
其中:__V(idd_${__intSum(2,${__counter(TRUE,)})},)生成的变量名是:idd_xxx格式的
除了V
函数和counter
函数外,还是用到了intSum
函数,因为counter
默认是从1开始计数的,但是我们的ForEach
控制器设置了遍历id前缀的变量的start index
的值为2,所以我们也要让counter
从2
开始计数(即加个2
),以此来保证id
和schoolId
的相对应。
intSum
函数介绍:
语法格式:
${__intSum(1,2,3)}
参数解释:
字段 含义 是否必传
First number 第一个要添加的整数 yes
Second number 第二个要添加的整数 yes
nth number 后续继续要添加的整数 no
Variable name 引用返回值的变量名 no
运行后,查看观察树:
观察上面观察树的图和下面Navicat
的图,可以发现,id
和schoolId
是对应的,如果不是对应的,禁用一步也会报错。
再使用navicat
查看数据库数据变化情况:
可以看到,两个学校都被禁用了。