一、Jmeter逻辑控制器
可以控制取样器(Sampler)的执行顺序,它由多个逻辑控制语句封装成不同功能的组件组成。只对其子节点的Sampler有效。
分为两种类型:
1、控制测试计划执行过程中节点的逻辑执行顺序,如:循环控制器,if控制器等。
2、对测试计划中的脚本进行分组,方便Jmeter统计执行结果以及进行脚本的运行时控制等,如:吞吐量控制器,事务控制器等。
二、if控制器
Expression (must evaluate to true or false) :表达式(值必须是true或false),也就是说,在右边文本框中输入的条件值必须是true 或 false。
Interpret Condition as Variable Expression?:默认勾选项,将条件解释为变量表达式(需要使用__jexl3 或者 __groovy 表达式)
Evaluate for all children?:条件作用于每个子项。
Use status of last sample:上一个取样器执行成功后才执行if控制器下的子项
1、文本框上的黄色感叹号,就是提示你,建议采用__jexl3 or __groovy 表达式,以提高性能,也就是默认的方式。
2、if 控制器 只能作用于其下的子项
填入${JMeterThread.last_sample_ok} 可用于检测最后一个取样器是否成功执行。(上一个请求响应是否断言正确)
三、操作数据库
1. mysql 驱动下载:https://dev.mysql.com/downloads/connector/j/
8.16版本对应的java版本是1.8
下载后,解压,把jar包放在jmeter安装目录的lib下
2.添加配置元件JDBC Connection Configuration
Variable Name Bound to Pool :数据库链接池名称, 我们可以链接多个Jdbc connection configuration(可以链接多个数据库), 每个可以起不同的名称,在Jdbc request中可以通过这个名称选择合适的链接池进行使用(可以单纯的理解为所有数据库的链接信息都可以通过这个变量名获取)正规操作变量名用字母,不会用数字母 符号和中文
Max Number of Connection: 数据库最大连接数;
Max wait(ms):连接等待时长
Time Between Eviction Runs:连接时长
Auto Commit : 自动提交。有三个选项, true、false、编辑(自己通过Jmeter提供的函数设置)
Transaction Isolaltion:事务间隔级别设置,主要有一下几个选项:
Transsaction_node 事务节点
Transaction_read_uncommitted 事务为提交读
Transaction_read_committed 事务已提交读
Transaction_Serializable 事务序列化
Default 默认
Transaction_repeatable_read 事务重读
Variable Name for created pool: 变量名称可以自定义(mysql_connection)
Database URL: 连接数据库的URL(jdbc:mysql://localhost:3306/performance_test?allowMultiQueries=true&serverTimezone=UTC&characterEncoding=utf-8),其中localhost:3306连接数据库的IP地址及端口号,performance_test数据库名称,allowMultiQueries=true允许多行查询
JDBC Driver class: com.mysql.jdbc.Driver 此属性值固定,指时明数据库类型的驱动
username:
password:
3.添加取样器---JDBC request
用result variable name来接收查询的结果
Variable Name of Poll declared in Jdbc Connection Configuration: 在数据库链接皮遏制中声明的链接池变量名。
Qurry type:必填,请求类型:增删改——update ,查——select
- Select statement 这个是查询语句类型:如果只有一条查询语句,则选择这种类型。(即使有多条查询语句,也只会执行第一条查询语句)
- Update statement: 这是一个更新语句类型(包含insert和update)如果只有一条更新语句,则选择这种类型(即使有多条update语句,依然执行第一条)
- Callable statement 这个是一个可调用语句类型,为所有DBMS(数据库管理系统)提供给一个以标准形式调用以存储过程的方法。如果调用存储过程就选择这个类型。测试很少用。
- prepared select statement 是预编译的,对于批量处理可以大大提高效率,也叫JDBC存储过程。所以对于多条查询语句执行选择这个是最好的
- prepared update statement 针对的多条设计更新sql的语句。
- commit 将为存储的sql语句结果写入数据库表;而Jmeter的jdbc请求中同样可以根据具体使用情况,选择种类型(如无特殊情况,不推荐使用)
- Rollback撤销指定sql语句过程,在Jmeter的JDBC请求中,同样可以根据需要使用这种类型(如无特殊情况,不推荐使用)
query:select * from test.students where Id = ? and Name = ? ,这里? 代表占位符
Parameter values:参数化值
Parameter types:参数类型,INTEGER, DATE, VARCHAR, DOUBLE,详见Javadoc for java.sql.Types.
Variable Names:对应响应结果的某行某列的所有值
比如上面的id对应第一行第一列的所有值
id=802 参数化传入802
id_#=1 返回数据结果1行
id_1=802 第一列第一行是802,以此往下id_2 ...
name=王五 参数化传入王五
name_#=1 返回数据结果1行
name_1=王五 第一列第一行是王五,以此往下name_2 ...
A_#=2 (number of rows) A_1=column 1, row 1 A_2=column 1, row 2 C_#=2 (number of rows) C_1=column 3, row 1 C_2=column 3, row 2
引用查询结果:https://www.likecs.com/show-204683342.html
获取到查询结果后,把该变量设置为全局变量
在用户自定义里面定义该变量
其它接口引用该变量:
这里的数据就是557556
检查发送请求的时候是否引用该结果:
正则提取:
想把id的数字提取出来:
标签:语句,控制器,数据库,查询,正则,Jmeterif,类型,true
From: https://www.cnblogs.com/dydxw/p/16788622.html