Jmeter 链接MySQL测试
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
1.环境部署
1.1官网下载MySQL Connector
https://dev.mysql.com/downloads/connector/j/
1.2 解压后将jar放到jmeter/lib目录下
1.3 在测试计划中添加引用
2.脚本设置
2.1设置JDBC Connection Configuration
先添加一个setUp线程中在setUp中添加“配置元件”-JDBC Connection Configuration
注当然你也可以根据测试需求在执行线程组中添加JDBC Connection Configuration放在setUp中主要是为了避免每次迭代都重新创建链接
在Variable Iame for created pool中写入创建链接的引用名后续使用此名称
在Database Connection Configuration 中写入链接数据库信息
Database URL数据库连接 URL
JDBC Driver class 数据库驱动
Username 数据库登录用户名
Password 数据库登录密码
Connection Properties 建立连接时要设置的连接属性
数据库 | 驱动 | URL |
---|---|---|
MySQL | com.mysql.jdbc.Driver | jdbc:mysql://host:port/{dbname} |
PostgreSQL | org.postgresql.Driver | jdbc:postgresql:{dbname} |
Oracle | oracle.jdbc.driver.OracleDriver | jdbc:oracle:thin:user/pass@//host:port/service |
sqlServer | com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://host:port;databaseName=databaseName |
还可以根据自己需求自定义其他参数
2.2 设置 JDBC Request
2.2.1 参数说明
- Variable Name填写前面创建的数据库连接池的名字
- Query type填写的sql语句
- Parameter valus参数值
- Parameter types参数类型可参考Javadoc for java.sql.Types
- Variable names保存sql语句返回结果的变量名
- Result variable name创建一个对象变量保存所有返回的结果
- Query timeout查询超时时间
- Handle result set定义如何处理由callable statements语句返回的结果
2.2.2 Query type 参数设置
- Select statement查询语句只能进行一条sql语句的查询
- callable statement如果需要进行多条sql语句的查询
- Update Statement这是一条更新语句包含insert和update也是只能进行一条sql语句的查询
- Prepared Select Statement用于多次执行的select语句
- prepared select用于绑定变量重用执行计划对于多次执行的SQL语句prepared select 的第一次执行消耗很高它的性能主要体现在重复执行上
- Prepared Update Statement和我们的prepared select用法极为类似
- Commit将未存储的SQL语句写入数据库使用不多
2.2.3 Parameter valus的使用
在sql query中使用”“作为占位符并传递参数值和参数类型
3.获取返回值
3.1 通过参数名获取
当Variable names中设置了参数名可以使用参数名获取参数值
- keyA_# 获取A列总行数
- keyA_1 获取A列第一个值
- keyA_2 获取A列第二个值
- keyB_2 获取B列第二个值
- ...
执行时直接引用参数名
def key_all = vars.get('row_key_#')
log.info('总行数 '+key_all)
def key_1 = vars.get('row_key_1')
3.2 for each 遍历
请求中引用输出变量名${F_row_key}
输出
4.记录一个坑
设置唯一数时使用jmeter计数器设置自增规则后在JSR223中引用
4.1原始JSR脚本报错
直接引用以${}形式引用'${P_select}'
def P_select = '${P_select}'
log.info('当前key '+ P_select)
导致'${P_select}'计数器在执行取值阶段数据异常并没有按照预想递增方式取值
5并发演示
以线程1-3为例所以迭代取值都为key = 16
4.2 修改后JSR
使用vars方式取值
def P_select = vars.get('P_select')
log.info('当前key '+P_select)
能够按照设定依次递增取值
5.补充
跨线程组传参
线程组1 props.put('P_row_pk',row_pk)线程组2接收 String props_pk = props.get('P_row_pk')