重点:参数化、csv读取数据、函数
难点:正则表达式
JMeter脚本制作
手工编写脚本
接口参数
接口的传递参数可由:
1、接口文档、api文档、swagger工具整合
2、抓包工具
录制脚本
badboy工具录制
1、接口文档、api文档、swagger
2、抓包工具
http代理服务器
1、代理配置
使用JMeter做接口测试的时候建议加上断言。做性能测试的时候断言课加可不加
HTTP信息头管理器:HTTP请求头的必带参数
后置处理器:获取到请求的值传给变量
监听器:输出各种报告结果
参数化
参数值以 ${变量名称} 取值
用户定义的变量:
同一个线程组,用户定义变量值是不会变的(解决方法,可以把随机函数放到参数值里面)
断言
json提取器
$.字段名
层级取值:$.字段名[索引值].二级字段名
正则表达式:通常都是由Perl语言改进来的
说明:
(1)引用名称:下一个请求要引用的参数名称,如填写title,则可用${title}引用它。
(2)正则表达式:
():括起来的部分就是要提取的。
.:匹配任何字符串。
+:一次或多次。
?:不要太贪婪,在找到第一个匹配项后停止。
(3)模板:用$$引用起来,$1$表示解析到的第1个值
(4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填0
(5)缺省值:如果参数没有取得到值,那默认给一个值让它取。
补充:
(.)换行符以外的所有字符
* 多次
? 一次
.* 0次或多次
.+ 1次或多次
[0-9] 1数字
[0-9]+ 至少匹配一次
\d+ 匹配0到多个数字
\w+ 多个字母或数字都可以匹配
[a-z]+ 配置所有字母
正则表达式:主要就是:左边界(.*?)右边界,左右边界就是为了能准确定位到想匹配的内容,(.*?) 是替换了想要提取的内容
里面的'?'为非贪婪匹配,(非贪婪模式就是说在遇到第一个右边界后就停止匹配,这样就可以精确拿到想要的内容)
模板:对应正则表达式提取器类型,样式为:$n$,
若模板为:$0$,则为整个表达式匹配到的内容,就是包括小括号内跟小括号外的内容
若模板为:$1$,则对应正则表达式中的第一个(.*?)所匹配的内容,
若模板为:$2$,则对应正则表达式中的第二个(.*?)所匹配的内容,
若模板为$1$$2$,则把2个(.*?)所匹配的内容拼接起来,
匹配数字:正则表达式匹配数据的最终结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。
当为 0 时,随机返回匹配的数据
当为 1 时,表示返回匹配结果数组的第一个元素。当为负数(-1,-2,-99都可以)时,表示返回全部元素,并且同时会返回一个元素总数的变量如sessid,在引用时:通过${sessid_1}的方式来取第1个匹配的内容,${sessid_2}来取第2个匹配的内容。
缺省值:匹配失败时的默认值。通常用于后续的逻辑判断
文件读取
在国内建议使用.txt的文本格式文件,如果使用.csv格式文件很有可能出现乱码
在.txt文本中,以换行为区分遍历数据,在CSV数据文件设置中变量要以英文,分割
常用函数 random、time、v函数
random 随机数
time 时间函数
如果参数需要为当前日期,那公式为:${__time(yyyy-MM-dd,)} 或者 ${__time(YMDHMS,)}
${__time(yyyy-MM-dd HH:mm:ss:SSS,time)} :格式化生成时间格式 2018-06-01 11:08:23:635
${__time(,)} :默认该公式精确到毫秒级别,13位数 1527822855323
${__time(/1000,)} :该公式精确到秒级别,10位数 1527822871
v 嵌套函数
已经定义了一个变量A 要再在这个变量名后面加一个变量(如递增数字)N 不能直接用${A${N}},必须用嵌套函数__V :${__V(A,${N})}脚本调优
写入文件
如果要把一个接口请求到的数据写到一个文件中去,则在察看结果数中的所有数据写入一个文件,浏览到路径即可
Jmeter插件安装与使用
插件安装
下载
https://jmeter-plugins.org/install/Install/
存放到 /lib/ext目录下
安装插件
进入选项-plugins manager
弹窗中选择available plugins页签,选择jpgc-**插件
点击右下角的 apply changers and restart Jmeter
场景设计
阶梯场景(stepping thread group)
next add XXX threads xxx seconds XXX using ramp-up XXX
next add XXX threads xxx seconds XXX using ramp-up XXX
波浪式场景(UItimate thread group)
ServerAgent 服务监控软件(安装在服务器中启动)
启动服务监控,用tcpd
默认启动
startAgent.sh 默认端口4444
自定义端口启动
startAgent.sh --udp-port 0 --tcp-port 自定义端口号
--udp-port 0 关闭udp服务