零基础带你入门JMeter-模拟高并发接口测试,小白教程!
Posted IT挖掘机y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了零基础带你入门JMeter-模拟高并发接口测试,小白教程!相关的知识,希望对你有一定的参考价值。
一、JMeter介绍
JMeter是Apache组织开发的基于Java的压力测试工具, 而且用Jmeter 来测试 Restful API, 非常好用。
二、JMeter下载安装
JMeter官网:https://jmeter.apache.org/
2、解压缩文件
3、点进bin目录->jmeter.bat运行即可
注意把系统环境变量PATH中的jdk路径放到第一位,否者jmeter可能会运行失败!
三、准备工作
代码资源我已经上传到CSDN了
代码免费下载地址:https://download.csdn.net/download/Kevinnsm/19098746?spm=1001.2014.3001.5503
此处我使用的是Eureka作为注册中心,eureka-server和eureka-server02是作为两个注册中心;product-service是服务提供模块,consumer-service是服务消费模块;(简单了说就是我们访问消费模块,消费模块远程调用服务提供模块返回给我们数据;至于那两个注册中心的作用就是:说白了就是把product-service和consumer-service放到注册中心 -----这叫服务注册)
那什么叫服务发现呢?
就是消费模块需要调用服务提供模块,而这个服务提供模块恰好又在注册中心,所以我们消费模块就可以直接从注册中心拉去数据;这就叫做服务发现!
扯远了,回归正题;哈!我不是在瞎扯淡
四、测试代码
在服务提供模块,对第一个接口进行两秒暂停
我们消费模块的那两个接口是远程调用该服务提供模块的接口的,当我们访问消费模块时,由于消费模块要远程调用服务提供模块的这两个接口,对于第一个,由于暂停两秒,所以返回数据比较慢;对于第二个没有进行什么操作,所以就会比较块
访问消费模块的三个接口如下,同时对应服务提供模块的三个接口
@RestController
public class OrderController {
@Resource
private OrderService orderService;
@GetMapping(value ="/select/{id}")
public Order selectOrderById(@PathVariable("id") Integer id) {
return orderService.selectOrderById(id);
}
@GetMapping(value = "/query/{id}")
public Order queryOrderById(@PathVariable("id") Integer id) {
return orderService.queryOrderById(id);
}
@GetMapping(value = "/search/{id}")
public Order searchOrderById(@PathVariable("id") Integer id) {
return orderService.searchOrderById(id);
}
}
访问第一个接口(由于人为暂停两秒,所以用了2.11秒
访问第二个接口,由于没有干涉用了50ms
五、模拟高并发
启动JMeter工具
注意把系统环境变量PATH中的jdk路径放到第一位,否者jmeter可能会运行失败!
1、右键测试计划->添加->线程->线程组
2、右键线程组->添加->取样器->HTTP请求
3、右键HTTP请求->添加->监听器->察看结果树
最后结果如下所示
启动测试
我在application.yml中配置了该服务最多只能使用10个线程,我们模拟了2500个请求,另外该接口的服务提供模块被我们暂停了两秒,所以会需要一段时间才能执行完毕;在这个过程中我们可以访问那个我们没有做过任何手脚的接口,发现竟然用了9.79秒
出现这个问题的原因是系统中几乎所有的资源都倾斜给了第一个接口测试,而当我们手动浏览器访问第二个接口时,没线程给我们处理,所以就一直在等。
而且你还会发现还有一部分请求失败的情况,果然高并发不是那么好玩的,我还是洗洗睡吧!
结束!
注意第一个接口测试时需要很久,可以手动关闭测试
溜了溜了!
以上是关于零基础带你入门JMeter-模拟高并发接口测试,小白教程!的主要内容,如果未能解决你的问题,请参考以下文章
10分钟零基础带你入门Ribbon小项目-啥?小白都能看懂?