Jmeter 简单接口测试
jmeter 接口测试的流程
- 首先是从开发那里拿到API接口文档,了解接口业务、包括接口地址、请求方式,入参、出参,token鉴权,返回格式等信息。
- 然后使用Jmeter工具执行接口测试,一般使用Jmeter的步骤是这样的:
- 首先新建一个线程组。
- 然后就是新建一个HTTP请求默认值。(输入接口服务器IP和端口)
- 再新建很多HTTP请求,一个请求一个用例。(输入接口路径,访问方式,参数等)
- 然后创建断言和查看结果树。
- 最后调试并执行用例,最后编写接口测试报告[一般一个接口可以有20-30个用例]
- 其实我们做接口的时候也碰到了蛮多的问题,都是自己独立解决的,比如返回值乱码(修改jmeter的配置文件为UTF-8编码方式),比如需要登录后才能取得token鉴权码并且这个鉴权码在下面的请求中需要用到(使用正则表达式提取器提取token的值等。
jmeter 简单接口测试
- “测试计划” – 添加“线程组”
2. 线程组 -添加“HTTP消息头管理器”、“HTTP Cookie 管理器”、 “HTTP 请求默认值”、“用户定义的变量”
使用HTTP Cookie管理器组件来管理Cookie信息
HTTP Cookie管理器内容:什么都不用填写,保持原样即可。
实现步骤:
我们在JMeter中进行登陆操作。
通过HTTP Cookie管理器组件来记录下登陆后的Cookie信息。
注意:
JMeter中自动收集的Cookie,是不会在HTTP Cookie管理器中进行展示的,但是运行后通过查看结果树可以查看到Cookie信息,接受到的Cookie会被自动存储在线程变量中。(使用Debug Sampler组件)
HTTP Cookie管理器会自动记录每一个请求所产生的Cookie,在后边对同源站点进行的请求中,都可以使用对应的Cookie进行发送。
HTTP消息头管理器
我在这里添加了登录后返回的token信息以便于其他接口的鉴权
HTTP 请求默认值
在【HTTP 请求默认值】中配置默认参数,这里我们将相同的【服务器名称】【协议】【编码】和【端口号】配置成默认的。
配置完默认值,在创建 HTTP 请求中就不用在填写这些参数了,Jmeter 会偷偷的在发送请求时帮我们把这些参数加上。
用户定义的变量
当录脚本里面有很多的相同的数据的时候,比如相同的服务器ip,端口号等…当更换服务器的时候,那么需要手动的修改脚本里面对应的服务器ip和端口号,比较繁琐,占用大部分时间,jmeter里面有一个用户自定义变量能很好的解决了这个问题
在这里我定义了登录接口的username
在接下来的登录接口中我直接使用${username}
就可以获取到之前设置的参数
添加接口请求
“线程组”–添加“取样器”–“HTTP请求”
登录接口
添加用户接口
查看请求的结果
“线程组”–添加“监听器”–“查看结构树”、“聚合报告”
变量数据的提取
JSON提取
HTTP请求中添加后置处理器-JSON提取器
参数含义:
字段 | 结果 |
---|---|
Apply to | 应用范围,选默认的 main sample only 就行了 |
Names of created variables | 接收提取值的变量名多个变量用 ; 分隔必传 |
JSON Path expression | json path 表达式,用来提取某个值多个表达式用 ; 分隔必传 |
Match No.(0 for Random) | 取第几个值,多个值用 ; 分隔0:随机,默认-1:所有1:第一个值非必传 |
Compute concatenation var(suffix_ALL) | 如果匹配到多个值,则将它们都连接起来,不同值之间用 , 分隔变量会自动命名为 |
Default Values | 缺省值,匹配不到值的时候取该值,可写error多个值用 ; 分隔非必传 |
相对路径的方式:JSON提取式的写法可以用.
其他接口可以调用此参数,这里把提取到的数据放到header里
其他接口可以通过 ${var} 这种格式,来获取提取到的值
如果匹配到多个值(像 $…token ),也只能提取到一个值 如果想提取匹配到的所有 token,可以设置为 -1
正则表达式提取器
JSON 提取器只针对接口返回的响应内容
如果想提取的是响应头、请求头的值,而非响应内容的值呢?
这个时候正则提取器的作用就出来了,它可以提取请求任一部分的值
“线程组”–添加“后置处理器”–“正则表达式提取器”
字段含义
字段 | 含义 |
---|---|
Apply to | 应用范围,选默认的 main sample only 就行了 |
Field to check | 可提取的字段 |
Names of created variables | 接收提取值的变量名必传 |
Regular Expression | 正则表达式 |
Template | 从找到的匹配项中创建字符串的模板 |
Match No.(0 for Random) | 取第几个值0:随机,默认-1:所有1:第一个值非必传 |
Default Value | 缺省值,匹配不到值的时候取该值非必传 |
Use empty default value | 勾选后,提取不到值时,则返回空字符串 |
Template
- 如果一条正则表达式有多个提取结果,则提取结果是数组形式
- 模板
$1$
、$2$
…表示把解析到的第几个值赋给变量,从 1 开始匹配 $0$
表示整个表达式匹配的内容(后续具体看栗子)- 若只有一个结果,只能是
$1$
Field to check
属性 | 含义 |
---|---|
Body | 响应体,不包括响应头;最常用 |
Body (unescaped) | 响应体,替换了所有HTML转义符;不建议使用 |
Body as a Document | 从不同类型的文件中提取文本;影响性能 |
Request Headers | 请求头 |
Response Headers | 响应头 |
URL | URL |
Response Code | 响应码 |
Response Message | 响应信息 |
知识点
提其他接口可以通过 ${var} 这种格式,来获取提取到的值
( ) 里面写匹配规则,用于解析正则表达式
.? 表示匹配任意长度的任意字符,这也是最常用的正则表达式
一般 (.+?) 和 (.?) 能够满足我们 80%的使用场景
一般正则表达式都可以写成下面两种
左边界(.+?)右边界
左边界(.*?)右边界
添加一个“调试取样器”查看取值结果
接口业务闭环
添加用户
因为用户名不能重复添加,所以需要加上一个随机字符串
查询用户信息
删除用户
随机参数化
生成随机数
点击打开函数助手,如图:
一个范围内的最小值和一个范围内允许的最大值,是指随机数产生的区间值,比如最小值输入:4,最大值输入:9999,就代表生成的随机数区间在4~999之间(包含4和999),再点击生成,生成所要的函数“${__Random(4,999,randomint)}”,如图:
随机生成字符串
同上打开函数助手,选择函数“RandomString”,如图:
Random string length代表:想要生成多长的字符串,Chars to use for random string generation代表:从那些内容中生成字符串
批量删除用户
查看用户列表提取出要删除的多个用户id
使用ForEach控制器
为防止删除过快导致数据库死锁–加了一个固定定时器
文件上传
注意MIME类型:multipart/form-data
或者勾选后高级中选择java
jmeter 断言
响应断言-模式匹配规则
通常每一个接口都会有至少两条断言
断言响应状态码:
断言响应数据
jmeter 数据驱动
设计编写login_data.csv
username,password,assert_str
admin12,123456,用户名不存在
,123456,参数错误
admin123,1234,密码错误
admin123,,参数错误
admin123,123456,登录成功
接口下添加 “CSV数据文件设置”
断言修改为
接口父级需添加一个循环控制器循环5次根据csv测试用例来定
接口运行结果
评论