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查看数据库数据变化情况:

可以看到,两个学校都被禁用了。

浙公网安备 33010602011771号