最近一个项目是要先发一个邀请,生成一个邀请id,然后填写对应邀请再提交,这里就是后一个接口需要用到前一个接口生成的邀请id,但是第一个接口并没有返回一个邀请id,此时就无法用正则表达式提取返回结果中的邀请id了,所以只能从数据库中查询出邀请id传输到下一个接口中,因此,今天我们来看看jmeter从数据库获取数据并作为变量传输
首先是用jmeter连接数据库,我这篇博客中(https://www.cnblogs.com/jasmine0627/p/9493314.html)已经做了详细讲解,因此这里不再重述
1、添加JDBC Request,并设置相关信息
ariable Name: 数据库连接池的名字,需要与上面配置的JDBC Connection Configuration中Variable Name Bound Pool的Variable Name相同
Query:填写的sql语句未尾不要加“;”
Parameter valus:参数值
Parameter types:参数类型,可参考:Javadoc for java.sql.Types
Variable names:保存sql语句返回结果的变量名
Result variable name:创建一个对象变量,保存所有返回的结果
Query timeout:查询超时时间
Handle result set:定义如何处理由callable statements语句返回的结果
variables names设置为A,B,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}...来获取相应的值
2、在http请求中加入变量
invite_id_N:N为数字,指取第几个数
------------------------------------------------------------------------------------------------
实际中,我们是取出多个值,循环传入数据库
1、添加循环控制器:线程组--逻辑控制器--循环控制器
2、目标接口放入到循环控制器下,另外添加一个计数器,因为我们取的值是根据${invite_id_N}来取的,那么这个N可以通过计数器递增的方式获得
3、计数器
4、通过函数助手获取嵌套函数
函数__V可以用于执行变量名表达式,并返回执行结果。它可以被用于执行嵌套函数引用(目前JMeter不支持)。
例如,如果存在变量A1、A2和N=1,则:
${A1}:能正常工作。
${A${N}}:无法正常工作(嵌套变量引用)。
${__V(A${N})}:可以正常工作。A${N}变为A1,函数 __V返回变量值A1。
5、运用在目标接口中