目录
使用Jmeter来测试已经写好的博客系统
线程组
要进行测试,先添加线程组,并且设置参数:

这里设置线程数为3,相当于有三个用户发起请求:

HTTP请求默认值
由于他们的IP地址和端口号都一样,为了方便在请求之前设置一个请求默认值,将请求要发送给的ip地址和端口号写死:


HTTP信息头管理器
因为后端接口要接受的请求是json字符串格式,所以在http信息头管理器中设置Content-Type:application/json,如果是使用表单数据的话就不需要这个了,直接在参数中填写即可:


在进行除登录页的其他页面功能测试的时候,需要之前的登录信息,这个登录信息放在请求头中的user_token中,所以在http信息头管理中还需要加入token:

这里的token可以从登录页面的响应信息中获取:

还要注意一点:这里的信息头的名称要和我们自己设置的这个token的名称是一样的,如果不确定可以先在开发者工具中找到这个名称直接复制就好了:

查看结果树
为了方便查看请求结果,设置查看结果树:

查看结果树中能看到的信息包括:

用户定义的变量
如果有多个地方需要用到用户名和密码,可以自己定义变量,写在用户自定义变量中:


在使用的时候,需要用${username}才能正确获取到这个username变量中的值,并且在json传中,获取这个变量的时候也需要使用""将变量名包裹起来:

CSV数据文件设置
如果想要测试多个用户名密码的登录,可以使用CSV文件来进行:
这里需要注意的是csv的文件格式一定要对


JSON提取器
详情页测试需要blogId,这里我们可以使用JSON提取器,提取之前请求的返回值:
注意:这里要进行json提取,就需要让博客列表页有返回值,不然就没办法提取
这里是正则表达式的语法:正则表达式


这里博客列表页返回的数据是这个样子的(本文主要介绍jmeter的使用,这里的乱码无伤大雅):


JSON断言


如果不存在这样的内容,那么就会断言报错:


如果是不匹配也会出现断言报错,并且给出了断言报错的原因:


也可以使用正则表达式来匹配:


同步定时器
虽然前面设置了三个线程,但是通过这个日志可以看出,线程1执行结束后,线程2、3才准备好了。所以他们并不是在同一时间发出的请求。同步定时器就有这样的作用,让这三个线程都准备好了之后在统一开始发送请求。




这里就可以看出,和之前的并不一样,这三个线程都处于started状态之后,才开始发送请求了。
聚合报告
这个和查看结果树功能差不多,都是查看运行之后的数据信息的

通过这个我们可以看到具体的吞吐量的信息:

事务控制器
有的时候一个接口是一个事务,有的时候多个接口是一个事务,如果多个接口是一个事务的话,那就需要用事务控制器来将这多个接口在一个事务下。

事务控制器,就是将几个请求放在同一个事务里,使用事务控制器需要将这些请求统一放到事务控制器的下面,这样这些请求才能是一个事务:

与上面没有事务控制器的时候相比,这个时候的聚合报告中多了一行------事务控制器:

逐步增压测试

并且给这个线程组添加一个监听器

要使用这个两个功能还需要安装两个插件:jpgc - Standard Set 和 Custom Thread Groups。

下面是运行的结果:
我们可以看出在55秒之前,响应时间不是很长,所以TPS呈现一个向上增长的趋势,这是因为:在一开始的时候响应时间并不是很长,但是总的事务数在增加,相应的成功的事务数肯定也在增加,所以TPS呈现上升趋势;在55秒到1分50秒的这段时间内,响应时间增大,TPS整体呈现较为平缓的趋势,这是因为:这个时候线程增加到最大,导致响应时间增大,响应时间变大,成功总事务数也变大,所以TPS总体上是平缓的;在1分50秒之后,响应时间开始减少,TPS也开始下降,这是因为:在最大线程数持续了30秒之后,线程开始减少,系统压力减少,所以响应时间开始减少,并且总事务也开始减少,因此TPS整体上是一个下降趋势,直到所有线程结束。


导出测试报告
使用 jmeter -n -t [测试文件] -l [后缀为.jtl的日志文件] -e -o [导出目录] 来导出测试报告,其中日志文件和导出目录可以不存在,如果存在也要为空,不然就会导出失败。

在导出目录的文件夹中,有一个html文件,打开这个文件就可以看到具体的测试报告了

