Jmeter(10)Jmeter连接mysql、mysql参数化

jmeter连接mysql

jmeter连接mysql的步骤:

  • 创建testplan,创建线程组
  • testplan需要设置导入mysql驱动包(mysql-connector-java-xxx.jar包)
  • 创建JDBC Connection Configuration
  • 创建JDBC Request
  • 创建Debug SamplerView Results Tree来查看结果

如下:

image-20200904170914131

1、TestPlan设置:

image-20200904171014527

mysql驱动包下载:https://dev.mysql.com/downloads/connector/j/

image-20200904172905290

2、JDBC Connection Configuration设置:

image-20200904174613257

Variable Name: 变量名称,需要变量名绑定到池需要唯一标识。与JDBC Request取样器中的相对应JDBC request可以通过选择不同的连接池名来选择不同的数据库连接

Max Number of Connection: 数据库最大链接数

Auto Commit:自动提交

Transaction Isolation: 事务间隔级别设置

3、JDBC Request设置:

image-20200904175651334

4、运行

运行后,可以看到,已经把f_student_name的字段的值都取出来了。我们接下来可以利用这些值进行参数化了。

image-20200904175819767

Foreach Controller以及mysql参数化

下面以小强系统为例,使用Foreach Controller(遍历控制器)和设置mysql参数化(点击搜索商品参数化)。

image-20200904181646933

参数:

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):

image-20200904181729144

运行:

image-20200904182600897

image-20200904182704175

Foreach Controller以及mysql参数化案例2

ForEach Controller只支持一个变量作为输入,但是有时候我们需要使用多个变量作为输入变量。比如下面,以禁用招生系统的多个学校为目的,实现多个前缀变量的提取和引用:

image-20200905111857740

image-20200905103652398

从上面两图可以看出,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。

本案例禁用学校两个关键值:idschoolId

id使用ForEach来控制,schoolId使用函数来解决,如下:

image-20200905114431053

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,所以我们也要让counter2开始计数(即加个2),以此来保证idschoolId的相对应

intSum函数介绍:

语法格式:
${__intSum(1,2,3)}

参数解释:
字段	         含义	         是否必传
First number	第一个要添加的整数	yes
Second number	第二个要添加的整数	yes
nth number	   后续继续要添加的整数  no
Variable name	引用返回值的变量名   no

运行后,查看观察树:

image-20200905121443449

观察上面观察树的图和下面Navicat的图,可以发现,idschoolId是对应的,如果不是对应的,禁用一步也会报错。

再使用navicat查看数据库数据变化情况:

image-20200905130734277

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

posted @ 2020-08-30 22:56  Whatever_It_Takes  阅读(273)  评论(0编辑  收藏  举报