Jmeter脚本增强之参数化(关联数据库)(7)
支持如下多种参数化方式:
①User Defined Variables:用户定义的变量(设置不需要随迭代发生改变的参数,例如:被测应用的host和port值)
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。②User Variables:用户参数
③随机变量(已补齐)
④正则表达式提取器(待补齐)
⑤函数助手:_CSVRead
⑥读取参数文件:CSV数据控件
⑦读取数据库(已补齐)
====================================
⑦连接mysql数据库
(下载地址:https://dev.mysql.com/downloads/connector/j/)
添加需要的mysql数据库的驱动jar包
1.直接将jar包复制到jmeter的lib目录
2.使用jmeter的Test Plan引入相应的jar包,如:
添加JDBC Connection Configuration
点击线程组添加配置元件→ :JDBC Connection Configuration
填写以下变量值:
Variable Name: 数据库连接池的名称,
一个测试计划可以有多个jdbc connection configuration,每个可以起个不同的名称,在jdbc request中可以通过这个名称选择对应的连接池进行使用。
Database URL:
数据库url,jdbc:mysql://主机ip或者机器名称:mysql监听的端口号/数据库名称, 如:jdbc:mysql://localhost:3306/test
JDBC Driver class: com.mysql.jdbc.Driver
username:数据库登陆的用户名
passwrod:数据库登陆的密码
添加JDBC Request
点击线程组添加Sampler→ :JDBC Request
看看该界面的几个参数:
Variable 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语句返回的结果
--------------------------------
到此为止,我们可以先运行这个jdbc request,看看查询结果了。
======数据库读取更多参数,需配合其他函数(如计数)===============================
点击线程组添加‘逻辑控制器’→ :循环控制器
通过SQL返回结果的变量,设置循环次数(此处设置为${user_mobile_# 即从数据库中读取到的行数})。
点击该‘循环控制’,添加‘配置元件’→ :计数器
运用在http 请求中:将数据库读取到的手机号传入给http请求,作为入参
注意:下面截图中,设置了:
线程线:1
循环控制器中,循环次数:3
计数器中的次数,最大值:5
从运行结果来看:JDBC request513只运行了一次(线程数决定的 1*1)
登录时参数化运行了三次(每个线程中循环3次 1*3)
而此处计数器,未达到最大值,第1次,运行‘登录时参数化’时,传入的${user_mobile_1}
第2次,运行‘登录时参数化’时,传入的${user_mobile_2}
第3次,运行‘登录时参数化’时,传入的${user_mobile_3},
小结:
①每个线程数执行某个请求的循环次数由循环控制器决定,
②执行登录时参数化 请求时,计数器会在上次计数的基础上,按步长增加,从而传入新的N。
③当线程数=1、循环次数=6、计算器=5时,在第6次循环时,插入N=1。(即计数器达最大值后,又从1开始计数)
④当线程数=6、循环次数=1、计算器=5时,在第6次循环时,插入N=1。(即计数器达最大值后,又从1开始计数)
第4种场景更贴合实际:有6个用户,每个用户登录时,传入是数据库查询出来的手机号。
${__V(user_mobile_${N})}
==========================================
函数__V可以用于执行变量名表达式,并返回执行结果。
${user_mobile_1}:能正常工作。
若要传入N,作为动态参数:
直接使用${user_mobile_${N}} (嵌套变量引用),目前Jmeter是不支持的,所以需要函数_V来帮忙。
${__V(user_mobile_${N})}:可以正常工作。user_mobile_${N}变为user_mobile_1,函数 __V返回变量值user_mobile_1.
======参照===========
https://blog.csdn.net/lluozh2015/article/details/52705268
https://www.cnblogs.com/wuyonghuan/p/7479582.html
https://blog.csdn.net/hwhua1986/article/details/64442943 查询的SQL需要传入变量值。
================================
③随机变量
使用jmeter自带的函数助手工具:
其中_Random为随机数的生成函数,下图是随机四位数的生成截图,输入最大值和最小值,点击“Generate”按钮,就会生成自动随机生成四位数的函数;函数使用和变量使用方法一致;
_RandomString为随机生成字符串的函数,下图为随机四位字符串的生成截图,输入字符串长度和用于随机字符串生成的字符,点击“Generate”按钮,就会生成自动随机生成四位字符串的函数;
参照:https://bbs.huaweicloud.com/blogs/d7c3f679e93e11e79fc57ca23e93a89f
==================
