jmeter接口测试快速上手
以http://118.31.19.120:3000/api为例。
一、get请求
get请求有两种方式:
第一种是在路径中把参数补充完整
新建线程组,并在线程组下新建http请求
![](https://img.haomeiwen.com/i11755552/c65f0cf845b451f3.png)
![](https://img.haomeiwen.com/i11755552/9cdeb3256e4aec0a.png)
线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
准备时长:设置的虚拟用户数全部启动的时长。如果线程数为20,准备时长为10(秒),那么需要10秒钟启动20个线程。也就是平均每秒启动2个线程。
循环次数:每个线程发送请求的个数。如果线程数为20,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到手动点击工具栏上的停止按钮,或者设置的线程时间结束。
![](https://img.haomeiwen.com/i11755552/c78275e6921bdff5.png)
根据接口文档我们可以知道所测接口的协议,服务器名称或者ip以及端口号,请求方法和路径
以该接口为例:get /topics 主题首页
接收get参数
page Number 页数
tab String 主题分类。目前有 ask share job good
limit Number 每一页的主题数量
mdrender String 当为 false 时,不渲染。默认为 true,渲染出现的所有 markdown 格式文本
在jmeter中做接口测试则为如下:
方法是GET请求,路径中可以把参数也表现出来,topics后面开始加参数,格式是topics后面+?参数=value,多个参数的话中间用&的符号连接起来
/api/v1/topics?page=3&tab=ask&limit=1
原理其实跟我们使用Postman是一样的
跟上面的协议和服务器ip地址组合起来的话就是一个完整的http请求
http://118.31.19.120/api/v1/topics?page=3&tab=ask&limit=1
![](https://img.haomeiwen.com/i11755552/00b21e1667fe45eb.png)
http请求参数编辑完成后,在执行后我们也需要查看结果,在jmeter中可以线程组下新建察看结果树
![](https://img.haomeiwen.com/i11755552/80cc37c4f936575a.png)
响应数据在查看结果树下可以看到:
![](https://img.haomeiwen.com/i11755552/18b84b17bc71e6d0.png)
2.jmeter的get请求第二种方式
把参数添加在Parameters中
实践如下:
![](https://img.haomeiwen.com/i11755552/06897db310281ab2.png)
把key和对应的value写入Parameters,jmeter自动将参数组合,在发送请求的时候依然是一个完整的请求。
同样运行后可以查看结果树:
![](https://img.haomeiwen.com/i11755552/e79d41b8fedfdf84.png)
小技巧:
在接口测试过程中,我们发现不同的接口测试的服务器ip地址和端口是一样的,但是如果每次写接口测试的时候都要补充一遍以上重复信息是很浪费时间的,这时候我们可以使用jmeter的一个强大功能,即http请求默认值。
同样在线程组下面添加它。
![](https://img.haomeiwen.com/i11755552/4e94278e60565c08.png)
补充完整如下:
![](https://img.haomeiwen.com/i11755552/930640316a02686a.png)
二、post请求
以该接口为例:
post /topics 新建主题
接收 post 参数
accesstoken String 用户的 accessToken
title String 标题
tab String 目前有 ask share job dev。开发新客户端的同学,请务必将你们的测试帖发在 dev 专区,以免污染日常的版面,否则会进行封号一周处理。
content String 主体内容
返回值示例
{success: true, topic_id: '5433d5e4e737cbe96dcef312'}
在jmeter中做接口测试则为如下:
方式是post请求,注意,post请求不同于get请求,post请求参数必须在写在Parameters中不得写在路径中
根据该接口的说明,新建主体,需要有用户的accessToken(添加一个主题,必须是已经登录成功的用户,所以会用到用户的token),title ,tab ,content 四个必填字段,所以我们需要把这四个key添加到Parameters中
![](https://img.haomeiwen.com/i11755552/6237dbf458f8c430.png)
同样运行之后我们可以再结果树中查看响应数据
![](https://img.haomeiwen.com/i11755552/4caaae1a45156d00.png)
三、关联
在实际的接口测试过程中,经常存在的现象是,同一个线程组,后一个接口测试的请求值会用到前一个接口测试的响应值,此时我们怎么来将两者关联起来呢。接下来看。
jmeter中提供了一个正则表达式提取器。可以用来实现上述的需求
解释下图场景:
HTTP请求默认值:新建主题和编辑主题都是同一个服务器ip以及端口号
新建主题同上述post请求,该接口测试运行后,返回值中包含一个topice id,并且唯一,是话题的唯一编号
编辑主题:是针对本线程组下新建主题接口测试中的话题(通过topice id关联)进行编辑修改。
编辑主题接口内容如下:
我们将topic_id进行参数化,格式为${topic_id}
![](https://img.haomeiwen.com/i11755552/efe708edd6ecedd1.png)
此时,只是参数化了编辑主题接口的请求数据topic_id,我们还需要对新建主题接口的返回数据进行正则表达式提取。
操作如下,新建主题下新建正则表达式提取
![](https://img.haomeiwen.com/i11755552/2e9a13c5332ad1e6.png)
补充内容如下:
![](https://img.haomeiwen.com/i11755552/aeff5f09969ba56e.png)
正则表达式则要根据新建主题运行后的返回值做一些修改
返回数据如下
![](https://img.haomeiwen.com/i11755552/e38e83be9f270c94.png)
"topic_id":"5b18a87f2da1586d0281ff7e"修改value为"topic_id":"(.+?)",模版为$1$,匹配数字:1,不设置缺省值。
这样我们就成功将上个接口测试的响应数据关联到下个接口测试的请求数据。
运行后查看结果树:
![](https://img.haomeiwen.com/i11755552/7f175278b3d0c66a.png)
两个接口测试的相应数据一致。
查看页面也已经成功修改
![](https://img.haomeiwen.com/i11755552/f1380a2544803d75.png)