Jmeter系列二:CSV参数化、BeanShell、服务器监控等进阶使用

本篇博客带来Jmeter的进阶使用,包括新建测试计划、CSV参数化、BeanShell使用和服务器监控等

碎碎念

惯例碎碎念。

关于Jmeter,关于压力/性能测试,本不是我的专业范畴,但是由于前线需要,所以我就上阵了,粗浅涉猎并没有精通,所以哪里有写的不好的,请果断指出,反正我是不会改的。

忙本不应该成为拖延的理由,何况我并不是很忙。但是这时常出现的拖延症,让这篇博客一直在草稿箱里等待问世,终于是抽空把它写完了,时间就像那个什(ma)么(sai)一(ke)样,挤挤还是有的,不信你试试。

前提

好像很多事的开头都要有个前提。电视剧的开头都还有个前情提要,所以这里也有个前提,那就是Jmeter的运行环境和软件安装。

1、JDK 1.8
2、Jmeter 3.2 (or higher)

如果还不了解Jmeter,还未安装配置的,请参考格子的上一篇Jmeter文章

Hello World

对于一个科班出身的程序猿来说,学习一个语言的第一步就是写一个Hello word。那么对于使用工具来说也不例外,先从一个最简单的Hello world来熟悉一下Jmeter吧。

1、启动Jmeter
2、新建测试计划
3、新建线程组,并配置线程组
4、新建Sample → Http请求,并填写配置
5、新建结果监听 → 查看结果树
6、运行测试计划
新建线程组

线程组可以配置多个线程,相当于多个不同用户同时去请求相同的接口,而线程之间都是相互隔离的,互不影响,线程的执行过程中所操作的变量,不会影响其他线程。

线程组配置说明

配置项 描述
线程数 如中文所示
Ramp-Up Period(in seconds) 所有线程启动所需时间
循环次数 每个线程的循环次数
Delay Thread creation until needed 线程在需要的时候才创建
调度器 勾选与否决定是否启动调度器
持续时间 测试持续时间
启动延迟 多久的延迟后启动测试
启动时间 测试启动时间,会被“启动延迟”覆盖
结束时间 测试结束时间,会被“持续时间”覆盖

上述参数不进行细究,网上关于Ramp-Up Period的说明很多,灵活使用该参数是达到测试目的的重要前提,可以参考官网说明

The ramp-up period tells JMeter how long to take to "ramp-up" to the full number of threads chosen. If 10 threads are used, and the ramp-up period is 100 seconds, then JMeter will take 100 seconds to get all 10 threads up and running. Each thread will start 10 (100/10) seconds after the previous thread was begun. If there are 30 threads and a ramp-up period of 120 seconds, then each successive thread will be delayed by 4 seconds.

Ramp-up needs to be long enough to avoid too large a work-load at the start of a test, and short enough that the last threads start running before the first ones finish (unless one wants that to happen).

Start with Ramp-up = number of threads and adjust up or down as needed.

官网地址:http://jmeter.apache.org/usermanual/test_plan.html

新建HTTP请求
新建HTTP请求

配置项包括但不仅限于以下项:
1、协议
2、服务器IP
3、服务器端口
4、请求方式(get/post)
5、请求路径path
6、编码
7、超时时间
8、代理
...

简单测试结 - 结果树
简单测试结 - 聚合报告

监听器包含但不仅限于如下项:
1、结果树:详细展示每次请求结果;
2、聚合报告:整个测试过程的聚合报告,包括吞吐量等;
3、图形结果:以图形的形式展示测试结果;
4、其他。
...

抽取公用元件和用户定义变量

在进行压力测试的时候,我们往往是测试几十、上百个接口,所以难免有很多重复的劳动,这个时候,是否可以对某些元件进行复用对提高测试效率至关重要,所幸Jmeter是支持我们这么做的,下面我们来看一下怎么实现。

一、用户定义变量

概念还是那个概念,我的理解是:跟开发中的常量类似,如果某个值在项目中经常被引用,且有可能改动,那么就应该定义成公有常量,在需要改动的时候,只需要改一处,而不是所有引用的地方。

格子这里举个栗子先,比如在测试的时候,每个接口都需要用到一个加密的公钥作为请求参数,而且这个公钥有可能变动,那么你只需要将该公钥定义成用户定义变量,然后再需要的接口进行引用就行了。

1、右键 → 添加 → 配置元件 → 用户定义的变量 
2、填写变量名和变量值
3、引用方式${},{}内填写变量名
用户定义变量
读取变量
结果树监听
二、公用元件

场景举栗子,我们对某个项目进行压测时,肯定要提供ip、端口和具体的url,由于同一个项目压测的ip和端口都是一致的,没必要在每个http请求都填写,所以可以采取公用元件来配置,一方面提高了效率,一方面同用户定义变量的好处一样,修改的时候很省事。

1、右键 → 添加 → 配置元件 → Http请求默认值
2、填写协议和响应的服务器地址、端口
3、http请求中,可以不填步骤2的信息
4、执行测试,查看结果
公用原件 - http默认值
公用原件 - 清除
公用原件 - 测试结果

上面举例说明了用户定义变量和公用元件的使用和好处,但是实际使用中,可以自由发挥,灵活应用,不仅限于上面的例子,有很大的发挥空间,小伙伴们可以自行举一反三。

CSV - 参数化

压力测试的时候,让人很头疼的一个步骤就是如何实现参数化。

简单一点来说,就是我们模拟了不同的用户同时发送请求,但是要如何来为每个用户提供不同的数据进行请求发送,比如:测试登录接口,每个用户的用户名和密码肯定都是不一致的,我们不能在一个压测计划中,使用一个用户名和一个密码来发送成千上万的请求,这样不符合实际场景,也没办法到达我们压测目标。

so,Jmeter中的CSV参数化功能可以在这个时候排上用场了。

什么是CSV参数化呢,格子根据具体的使用经验来解释:事先将我们测试中需要的数据放在一个文件里,每行数据用以一个请求,同一行中的不同值用分隔符隔开,然后将该文件配置到Jmeter,测试时,在同一轮测试中的不同请求会读取csv文件中的不同行数据,来达到我们模拟数据的需求,咦,讲的好像有点儿抽象,下面具体实施,请看大屏幕。

1、准备csv文件和数据
2、右键Http请求 → 添加 → 配置元件 → CSV DATA Set Config
3、填写配置
4、引用变量
5、执行测试
CSV - 数据准备
CSV - 配置
CSV - 读取
CSV - 结果1
CSV - 结果2
CSV - 结果3

是不是很简单,是时候进行一波举一反三了。
Tips:比如模拟登录,可以从数据库中将用户名或者密码Select出来,复制到CSV文件,然后进行参数化并测试。

BeanShell使用

哎o(╥﹏╥)o,怎么还没完啊,好想分成两篇博客写,心疼格子两秒钟。

Beanshell是Jmeter提供的高级功能之一,该功能支持用户编写Java代码,打包成Jar来提供Jmeter调用。

举几个场景说明:

1、接口调用时,需要动态参数:最后一个参数由前几个MD5而来;
2、循环来模拟测试数据
3、特殊的工具方法

总而言之,Beanshell功能特别强大,以Java为桥梁,为Jmeter的功能提供了无限扩展的可能。

使用说明(推荐有Java开发基础的人使用)

1、打开你的IDE,编写Java代码,打包成Java
2、在Jmeter引用你的Java包
3、在Http请求右键 → 添加 → 前置处理器 → Beanshell PreProcessor
4、编写Java调用代码
5、测试

简单例子如下:


BeanShell - 导入Jar包
BeanShell - 编写脚本和测试

该例子只是简单说明了Beanshell的使用,当然体现不了Beanshell的强大功能,你可拿它做Java能做大多事儿,这里格子不做深入讨论,如果有疑问,欢迎提出来。

Beanshell内置了几个变量提供使用,在编写脚本的时候,可以灵活利用这几个变量

变量名 说明
ctx 当前线程上下文
vars 线程中局部变量容易,同map
props Jmeter配置信息
prev 前面sample返回的信息
sampler 当前sampler引用
log log引用,用以打印日志调试等

具体方法参考:官网API

服务器性监控

最后一个小点了,这也是我在使用过程中的需求,当对服务器进行压力测试的时候,主观上我们能感受到服务器响应的快慢,但是并没有办法得到服务器当前负载一个量化/图形化的结果,这不利于我们分析我们的应用的负载瓶颈在哪个点上,所以就诞生了这么一个需求,监控服务器当前的负载,包括CPU、内存、IO、网络等。

Jmeter以插件的方式为我们提供了该功能,下面来看一下怎么使用吧

1、安装Jmeter插件功能(下载,存放,重启)
2、重启Jmeter,点击选项 → Plugins Manager
3、选择PerfMon和jpgc插件进行安装
4、下载ServerAgent
5、启动ServerAgent
6、测试计划 → 右键 → 添加 → 监听器 → jp@gc - PerfMon Metrics Collector
7、填写相关配置
8、启动测试查看结果

Plugins Manager地址:这里
ServerAgent地址:这里

操作步骤如下

服务器监控 - 插件管理器
服务器监控 - 插件安装
服务器监控 - ServerAgent启动
服务器监控 - 监控结果

格子这里只对CPU进行了监控,如果需要监控内存、IO等负载的话,请自行添加。

后话

除去前面描述的功能,Jmeter还提供,正则提取变量、变量传递等其他功能,篇幅所限,不一一列举了。

感觉写了好久,Jmeter第二话终于落幕,掌声在哪里~~

求喜欢,求点赞,求评论 (✺ω✺)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353