Jmeter 压测 http(s)

  上一篇文章关于Jmeter介绍了Jmeter入门相关的知识。本文是实战篇,讲讲如何使用Jmeter对Http(s)进行压力测试。

Http测试

测试一

  首先,添加 “线程组”,选择 “添加” -> "Sampler" -> "HTTP请求"。其次,分别添加 “查看结果树”,“聚合报告”,“图形结果”等,用于查看测试结果。

Jmeter测试1

  配置 "HTTP请求",对应上图中的 “jmeter测试1”。这里配置Get请求,测试本地8080端口下的jmeter/test1接口地址,具体的Http配置及测试代码请参考如下。

Http配置1

@RequestMapping("jmeter")
@RestController
public class HttpController {

    private AtomicInteger atomicInteger = new AtomicInteger(0);

    @GetMapping("test1")
    public Map<String, Object> test1() {
        Map<String, Object> map = new HashMap<>(1);
        int decrementAndGet = atomicInteger.incrementAndGet();
        System.out.println("decrementAndGet = " + decrementAndGet);
        map.put("atomicInteger", decrementAndGet);
        return map;
    }
    
}

  配置好后,点击绿色三角图标即可启动线程组,线程组的配置如下。

线程组配置

  启动测试请求后,响应结果如下,这是模拟1s内发起200次的请求。

察看结果树响应

聚合报告响应

图形结果响应

测试二

  一般而言,测试都需要尽可能的模拟真实用户。因此,通过传递不同的请求参数,来模拟不同的用户进行请求是必不可少的。接下来使用 “函数助手的” 方式,告诉大家如何模拟不同的用户进行压力测试。

  案例场景:模拟10个用户发起POST请求,请求地址jmeter/test2,要求在Http请求头中自定义请求头 Authorization ,不同用户对应的自定义请求头参数值不同。

1. 使用函数助手添加请求头参数

CSV,即Comma Separate Values,这种文件格式经常用来作为不同程序之间的数据交互格式。具体文件格式:每条记录占一行,以逗号为分隔符,逗号前后的空格会被忽略。字段中包含有逗号,该字段必须用双引号括起来;字段中包含有换行符,该字段必须用双引号括起来;字段前后包含有空格,该字段必须用双引号括起来;字段中的双引号用两个双引号表示;字段中如果有双引号,该字段必须用双引号括起来。

  在本地创建test2.cvs(如:G:\TEST\test2.cvs),添加10个用户对应的Authorization值(假设是:1 ~ 10),使用函数助手进行添加。

函数助手配置

2. 配置 “HTTP信息头管理器”

配置HTTP信息头管理器

  如上图所示,分别设置 Content-Type:application/jsonAuthorization:${__CSVRead(G:\TEST\test2.cvs,0)}

3. 模拟用户请求进行测试
@RequestMapping("jmeter")
@RestController
public class HttpController {

    @PostMapping("test2")
    public Map<String, Object> test2(HttpServletRequest request) {
        Map<String, Object> map = new HashMap<>(1);
        String authorization = request.getHeader("Authorization");
        map.put("authorization", authorization);
        return map;
    }

}

  启动测试后,响应结果如下。

察看结果树响应

聚合报告响应

测试三

  案例场景:使用配置元件 “CSV数据文件” 的方式,模拟10个用户发起PUT请求,请求地址jmeter/test3,要求不同用户对应请求参数reqId的值不同。

1. 使用“CSV数据文件”添加请求参数

  在本地创建test2.cvs(如:G:\TEST\test2.cvs),添加10个用户对应的reqId值(假设是:1 ~ 10)。

CSV数据文件配置

2. 配置 “HTTP信息头管理器”

配置HTTP信息头管理器

  如上图所示,通过在请求路径使用占位符${}来读取“CSV数据文件”中对应的配置参数和值。注意,占位符内的参数名称要保持与配置一致。

3. 模拟用户请求进行测试
@RequestMapping("jmeter")
@RestController
public class HttpController {

    @PutMapping("test3")
    public Map<String, Object> test3(@RequestParam int reqId) {
        Map<String, Object> map = new HashMap<>(1);
        System.out.println("id = [" + reqId + "]");
        map.put("id", reqId);
        return map;
    }

}

  启动测试后,响应结果如下。

察看结果树响应

Https测试

  为了方便,关于https的测试将选取网上站点进行,如我的简书主页,参考如下。

Https测试配置

写在最后

  关于http(s)这块的测试到这就介绍完了,本文重点部分就是学习两种实现参数化的方式。JMeter作为一款压测工具,我们只需要熟悉之后再多加练习,便可以基本掌握。下来我将继续梳理如何使用JMeter进行ws(s)测试,欢迎关注。


Jmeter系列

关于Jmeter Jmeter 压测 http(s) Jmeter压测 ws(s)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏aoho求索

Spring Cloud Bus中的事件的订阅与发布(二)

在之前的文章Spring Cloud Bus中的事件的订阅与发布(一)介绍了消息总线的相关事件。本文主要介绍消息总线的事件监听器以及消息的订阅与发布。 事件监听...

4207
来自专栏IMWeb前端团队

Nodejs进阶:用debug模块打印调试日志

前言 在node程序开发中时,经常需要打印调试日志。用的比较多的是debug模块,比如express框架中就用到了。下文简单举几个例子进行说明。文中相关代码示例...

2989
来自专栏Java架构师学习

Java程序员必知的并发编程艺术——并发机制的底层原理实现

Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。 volatile借助Java内存模型...

36511
来自专栏张善友的专栏

Microsoft Avro介绍

Microsoft发布了他们自己对Apache Avro通信协议的实现。Avro被描述为“紧凑的二进制数据序列化格式,类似于Thrift或者Protocol B...

18410
来自专栏月牙寂

docker源码分析(5)---daemon

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

3218
来自专栏编程软文

快速上手友盟推送前后端

2585
来自专栏乐百川的学习频道

Python 日志输出

打印日志是很多程序的重要需求,良好的日志输出可以帮我们更方便的检测程序运行状态。Python标准库提供了logging模块,让我们也可以方便的在Python中打...

2529
来自专栏静默虚空的博客

spring 4 升级踩雷指南

spring 4 升级踩雷指南 前言 最近,一直在为公司老项目做核心库升级工作。本来只是想升级一下 JDK8 ,却因为兼容性问题而不得不升级一些其他的库,而其他...

3519
来自专栏Kevin-ZhangCG

[ Java面试题 ] 框架篇

  1. struts是一个按MVC模式设计的Web层框架,其实它就是一个Servlet,这个Servlet名为ActionServlet,或是ActionSe...

1552
来自专栏流柯技术学院

Ant_build.xml的最完整解释

Ant的概念 Make命令是一个项目管理工具,而Ant所实现功能与此类似。像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant却克服了这...

1232

扫码关注云+社区