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