Jmeter常用控件详解
Jmeter常用控件详解
一、线程组
主要配合ConstantThroughput Timer 定时器控件 来控制并发量及执行次数
ConstantThroughput Timer 每分钟处理事务量(如设置60 相当于每个线程组每秒执行一次)
如图:每秒10并发,总共跑5000次
二、配置元件
1.HTTP信息头管理
通常公司内部环境使用,使用指定的头信息发送请求
2.JDBC Connection Configuration
数据源连接配置,下图以mysql数据源为例
注:jdbc:mysql://10.103.51.90:3306/xiaodai?allowMultiQueries=true
加此参数为了配合JDBC Request使用,可以执行多条sql语句
3.HTTP Cookie管理器
创建控件即可,会自动保存Cookie状态
4.用户定义的变量
内部变量定义与取值,${名称}
5.CSV Data Set Config
外部数据源定义与取值
三、逻辑控制器
1.如果(IF)控制器
条件:字符串比较 “${变量名}” == “字符串”
条件:整数比较 ${变量名} == 整数
注:条件为比较字符串,比较两边都需要加双引号
2.While Controller控制器
条件:字符串 ${__javaScript(${变量名}!=5&& ${变量名} == 1)}
条件:整数比较 ${__javaScript(“${变量名}”!= “字符串” && ${变量名} == 整数)}
使用技巧
场景:循环5次数退出循环体 配合计数器来实现
节点示意图
1) 创建While Controller 条件:${__javaScript(${count}!=5)}
2) 在控制器子节点创建计数器
场景:循环10分钟退出循环体 配合BeanShell Sampler
节点示意图
1) 创建BeanShell Sampler 通过脚本获取当前时间(也是初始化的启始时间)
vars.put("startTime","${__time(HHmmss,)}");
2) 创建While Controller控制器
${__javaScript(${startTime}+600>${currentTime})}(以秒为单位 600为10分钟)
开始时间+运行时间>当前时间 退出循环体
3)创建BeanShell Sampler 通过脚本获取当前时间(实时获取当前时间为了与启始时间实时比对)
3.Switch Controller控制器
Switch Value:${变量名 } (变量可以是字符串或者整数)
使用技巧
场景:根据变量值分别走不通的分支 配合简单控制器、BeanShell Sampler
节点示意图
1) 创建BeanShell Sampler 最终将代码返回的值赋给S_isPhone
代码引用了外部jar包,主要功能判断手机号是哪家运营商,将返回值赋给S_isPhone
2)创建Switch Controller控制器 Switch Value:${S_isPhone} 变量传递
3)节点下创建三个简单控制器 名称分别是:中国移动、中国联通、中国电信
四、Sampler
1.JDBC Request
1)此处Variable Name是JDBC Connection Configuration里的Variable Name
2)Query Type:Callable Statement 可以执行多次sql 注:JDBC Connection Configuration里的Database URL:地址后必须加?allowMultiQueries=true
3)Variable names 用于取值定义的变量名
使用技巧
变量取值方式
3.1)Variable names方式定义变量名
例:SELECTVERIFY_CODE,PHONE FROM SMS_VERIFY
${DB_code1_1}取的第一列VERIFY_CODE的值
${DB_code1_2}取的第一列PHONE的值
………以此类推
3.2)Result variable name方式定义变量名
例:SELECT *FROM SMS_VERIFY
${__BeanShell(vars.getObject("Result variablename变量名").get(${__intSum(1,-1)}).get("数据库字段名"))}
${__BeanShell(vars.getObject("Result variablename变量名").get(${__intSum(1,-1)}).get("VERIFY_CODE"))}取的第一列VERIFY_CODE的值
2.SSH Command请求
如图为通过证书方式登录
使用技巧
结合linux命令可以达到日志收集的效果
场景:搜索文件jm开头并且包含access字符串的文件,并将指定文件挪到历史文件夹nmonhis下,并通过tail –f 实时输出到新的文件里
ls /server/nmondir/jm_*|grep access|xargs -i mv {}/server/nmondir/nmonhis/;tail -f /data/nginx/logs/access.log >>/server/nmondir/jm_nginxsidekiq_24.85.access${__time(YMDHMS)}.log&
注1:有些命令不能直接通过管道符号执行命令,需要通过xargs来调,xargs –i 配合 {} 可以达到文件替换的作用,如上面一行命令将管道分符左部分命令过滤的内容替换到{}位置
注2:如果远程登录的服务器账户不是root用户很多常用操作没有权限
方法2.1 通过chown修改当前操作的文件夹或文件为该用户组
方法2.2 通过执行命令前加sudo命令,需要编辑 /etc/sudoers 文件,将Default requiretty注释掉。
3.BeanShell Sampler
参数位置输入变量名称,多个变量以空格隔开
变量取值通过bsh.args[n],n为数组下标0到n分别对应参数名称依次取值
五.监视器
1.SSHMon Samples Collector
使用前需要添加扩展插件http://blog.****.net/u011417723/article/details/78215012
读取cpu指标sar -u1 1 | awk '/^Average:/{print 100-$8}'
读取io指标iostat-x -k -d 1 2 |grep 'vdb' |awk '{print $14}' |awk 'NR==2{print}'| awk -F.'{print $1}'
注1:如需证书访问远程机,添加证书需要用${__FileToString(路径/xx.pem)}
注2:通过iostat取指标时,第一条数据无效,通过awk 'NR==2{print}'取第二条数据