jmeter接口测试教程
一、jmeter接口请求方法介绍
http的组成部分:
请求url、请求方法get/post常用的、请求头header、请求body、响应response;
http和https的本质区别:https增加了ssl,加密处理,没有证书是不能通过抓包来获取数据的;
1.1get请求
get请求的传参格式
window打开cmd输入命令:jmeter打开
添加线程组》request请求》get请求方式,参数要放在parameters中,不能放body里,为的是在请求接口时直接拼在路径后面
1.2 post请求
需要把参数放到body里面,不能在请求路径里面暴露出来,为了安全性,如果参数中有中文那么content encoding编码格式必须要:utf-8,否则请求后会乱码
二、jmeter变量
2.1用户定义的变量
test-plan测试计划页面,用户定义的变量位置如下图
后续需要用到这个变量值时,可以直接用${url}直接调用了
2.2用户参数
添加》前置处理器》User Parameters
2.3函数生成变量
2.4BeanShell变量
菜单》前置处理器》BeanShell
vars:
使用方法:
vars.get(String key),从jmeter中获得变量值
vars.put(String key, String value),数据存到jmeter变量中
在第一个请求中添加脚本处理器,脚本如下,vars.put是固定语法输出待提取的脚本的,id是输出的字段,需要调用该字段则用${id},字段和value之间需要用,分割,且value值需要双引号;其他请求(第二个接口)也可以直接调用该处理结果;
线程组》取样器》添加debug sampler,查看结果树,可以查看变量的值
2.5数据文件变量:
是否忽略首行,选择了false表时不忽略,如果在文件中首行是参数字段,那么需要忽略:true,首行直接取value
2.6配置元件用户定义的变量
2.7jmeter正则表达式提取器
菜单位置:后置处理器
引用名称:其他地方引用的变量名称,可自定义;
正则表达式:()括号表示提取字符串中的部分值,前后是提取的边界内容;(.+?)表示"id":后的是需要提取的信息,括号表示需要提取的信息,点.是任意字符,+是表示数据中满足条件后会再次查后面的字符是否满足条件5和1,满足则一起返回51,直到不满足条件的数据终止,再往后面继续查,中断后再满足的条件的数据算第二个数组,?表示循环查询数据只要满足.+条件则返回数据,不满足则返回空,即0次,那么51会展示5和1,两个数组;
runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 号代表前面的字符必须至少出现一次(1次或多次)。
runoo*b,可以匹配 runob、runoob、runoooooob 等,* 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。
colou?r 可以匹配 color 或者 colour,? 问号代表前面的字符最多只可以出现一次(0次、或1次),是最小匹配;
模板:正则表达式的提取模式。如果正则表达式有多个提取结果,则结果是数组形式,模板$1$,$2$等等,表示把解析到的第几个值赋给变量;从1开始匹配,以此类推。若只有一个结果,则只能是$1$;
匹配数字:正则表达式匹配数据的所有结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。-1表示全部,0随机,1第一个,2第二个,以此类推。若只要获取到匹配的第一个值,则填写1
我们在第一个请求中添加正则提取器、然后再新建一个请求,入参的value是第一个请求正则中的变量名称{id}
没加?则提取到冒号:后全部的字段
图1待提取的响应
表达式
提取结果
加了问好?提取到括号后的字符截至
表达式扩展:
\d:数字
\d{8}:匹配到的数字次数,达到条件则返回
[131159110]\d{8}表示获取字符串里面开头数字符合[131159110]限定的,即1、3、5、9、0,然后8个连续的数字,则就匹配成功
(131|159|110)\d{8}表示获取字符串开头为131|159|110的
三、jmeter配置元件请求头默认值(添加多个接口共用的部分)
四、jmeter cookie管理
线程组》配置元件》cookie管理器
添加cookie是为了将想要存储的数据存储在cookie里,设置cookie方式如下
五、jmeter 授权管理
如果请求的接口加了用户信息的认证,那么没有认证信息的传参,则不会有响应数据,如何设置认证信息,如下
线程组》配置元件》HTTP Authorization Manager
在请求头中会带经过MD5编码后的信息,可以用base64解码查看
六、jmeter断言
线程组添加响应断言:设置中用响应文本,包含字段,断言信息配置response中的字段,包含该字段则响应成功,否则响应失败,在查看结果树中可以查看原因,通过则展示请求通过的响应数据;
如下是断言失败的情况
七、jmeter接口测试数据分离
多个接口请求,请求地址不同,请求参数不同,用if控制器,如果是get请求则如下:
循环控制器(Loop Controller): 作用:指定其子节点运行的次数;
把需要用到的路径参数、传参等信息放到文件中
因为首行定义了名字,所以我们需要忽略首行
if控制器判断如果方法是get方法,interpret需要勾选,为了性能更好,勾选后必须用函数助手生成公式
__jexl3和__groovy方法
${__groovy("${methods}"=="Get",)}
如果不勾选,则输入公式:"${methods}"=="Get"
断言是响应数据中有true则响应成功
八、jmeter HTML测试报告dashboard report
生成步骤:
打开cmd 进入jmeter 目录bin目录
执行命令:
-n 是无GUI模式
-t 是脚本路径
-l(小L)是存放测试数据的文件,文件名必须不存在,会自创,查看结果树,聚合报告等都在里面
-e是生成html报告
-o是存放html报告的地方,也需要文件名不存在,会自创