Jmeter 简单接口测试

jmeter 接口测试的流程

  1. 首先是从开发那里拿到API接口文档,了解接口业务、包括接口地址、请求方式,入参、出参,token鉴权,返回格式等信息。
  2. 然后使用Jmeter工具执行接口测试,一般使用Jmeter的步骤是这样的:
  • 首先新建一个线程组。
  • 然后就是新建一个HTTP请求默认值。(输入接口服务器IP和端口)
  • 再新建很多HTTP请求,一个请求一个用例。(输入接口路径,访问方式,参数等)
  • 然后创建断言和查看结果树。
  1. 最后调试并执行用例,最后编写接口测试报告[一般一个接口可以有20-30个用例]
  2. 其实我们做接口的时候也碰到了蛮多的问题,都是自己独立解决的,比如返回值乱码(修改jmeter的配置文件为UTF-8编码方式),比如需要登录后才能取得token鉴权码并且这个鉴权码在下面的请求中需要用到(使用正则表达式提取器提取token的值等。

jmeter 简单接口测试

  1. “测试计划” – 添加“线程组”

image-1653484480294
image-1653484553031
2. 线程组 -添加“HTTP消息头管理器”、“HTTP Cookie 管理器”、 “HTTP 请求默认值”、“用户定义的变量”
image-1653484639526

使用HTTP Cookie管理器组件来管理Cookie信息

HTTP Cookie管理器内容:什么都不用填写,保持原样即可。
image-1653485135922
实现步骤:
我们在JMeter中进行登陆操作。
通过HTTP Cookie管理器组件来记录下登陆后的Cookie信息。
注意:
JMeter中自动收集的Cookie,是不会在HTTP Cookie管理器中进行展示的,但是运行后通过查看结果树可以查看到Cookie信息,接受到的Cookie会被自动存储在线程变量中。(使用Debug Sampler组件)
HTTP Cookie管理器会自动记录每一个请求所产生的Cookie,在后边对同源站点进行的请求中,都可以使用对应的Cookie进行发送。

HTTP消息头管理器

我在这里添加了登录后返回的token信息以便于其他接口的鉴权
image-1653484747657

HTTP 请求默认值

在【HTTP 请求默认值】中配置默认参数,这里我们将相同的【服务器名称】【协议】【编码】和【端口号】配置成默认的。
image-1653484736661

配置完默认值,在创建 HTTP 请求中就不用在填写这些参数了,Jmeter 会偷偷的在发送请求时帮我们把这些参数加上。

用户定义的变量

当录脚本里面有很多的相同的数据的时候,比如相同的服务器ip,端口号等…当更换服务器的时候,那么需要手动的修改脚本里面对应的服务器ip和端口号,比较繁琐,占用大部分时间,jmeter里面有一个用户自定义变量能很好的解决了这个问题
在这里我定义了登录接口的username
image-1653484761713
在接下来的登录接口中我直接使用${username}就可以获取到之前设置的参数

添加接口请求

“线程组”–添加“取样器”–“HTTP请求”
image-1653485727218

登录接口

image-1653485812810

添加用户接口

image-1653485836100

查看请求的结果

“线程组”–添加“监听器”–“查看结构树”、“聚合报告”
image-1653485888952
image-1653485980939
image-1653485998168

变量数据的提取

JSON提取

image-1653568741692
HTTP请求中添加后置处理器-JSON提取器
image-1653569014496
参数含义:

字段 结果
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) 如果匹配到多个值,则将它们都连接起来,不同值之间用 , 分隔变量会自动命名为 _ALL
Default Values 缺省值,匹配不到值的时候取该值,可写error多个值用 ; 分隔非必传

相对路径的方式:JSON提取式的写法可以用..两个点相对路径搜索。绝对路径的方式:.. 两个点相对路径搜索。 绝对路径的方式:.
其他接口可以调用此参数,这里把提取到的数据放到header里
image-1653569213081
其他接口可以通过 ${var} 这种格式,来获取提取到的值
如果匹配到多个值(像 $…token ),也只能提取到一个值 如果想提取匹配到的所有 token,可以设置为 -1

正则表达式提取器

JSON 提取器只针对接口返回的响应内容
如果想提取的是响应头、请求头的值,而非响应内容的值呢?
这个时候正则提取器的作用就出来了,它可以提取请求任一部分的值
image-1653569977039
“线程组”–添加“后置处理器”–“正则表达式提取器”
image-1653570575043
image-1653571091082
字段含义

字段 含义
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%的使用场景

一般正则表达式都可以写成下面两种
左边界(.+?)右边界
左边界(.*?)右边界

添加一个“调试取样器”查看取值结果
image-1653571151798

接口业务闭环

添加用户

因为用户名不能重复添加,所以需要加上一个随机字符串
image-1653722008955

查询用户信息

image-1653722238390

删除用户

image-1653722290021

随机参数化

生成随机数

点击打开函数助手,如图:
一个范围内的最小值和一个范围内允许的最大值,是指随机数产生的区间值,比如最小值输入:4,最大值输入:9999,就代表生成的随机数区间在4~999之间(包含4和999),再点击生成,生成所要的函数“${__Random(4,999,randomint)}”,如图:
image-1653721571882

随机生成字符串

同上打开函数助手,选择函数“RandomString”,如图:
image-1653721681781
Random string length代表:想要生成多长的字符串,Chars to use for random string generation代表:从那些内容中生成字符串

批量删除用户

查看用户列表提取出要删除的多个用户id
image-1653723747034
image-1653723768200
使用ForEach控制器
image-1653723820954
image-1653723841413
为防止删除过快导致数据库死锁–加了一个固定定时器
image-1653723886866

文件上传

image-1653729209025
注意MIME类型:multipart/form-data
或者勾选后高级中选择java
image-1653729315424

jmeter 断言

image-1653729543804
响应断言-模式匹配规则
image-1653729833762
通常每一个接口都会有至少两条断言
断言响应状态码:
image-1653730408666
断言响应数据
image-1653730430905

jmeter 数据驱动

设计编写login_data.csv

username,password,assert_str
admin12,123456,用户名不存在
,123456,参数错误
admin123,1234,密码错误
admin123,,参数错误
admin123,123456,登录成功

接口下添加 “CSV数据文件设置”
image-1653742440749
image-1653743454624
断言修改为
image-1653743490265
接口父级需添加一个循环控制器循环5次根据csv测试用例来定
image-1653743650783
接口运行结果
image-1653743541763