点名小辣辣,带你入门 JMeter (。・∀・)ノ゙

什么是 JMeter

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测 试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、 数据库, FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的 强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。

搭建环境

因为 JMeter 是基于 Java 开发的,所以首先要用 Java 环境。Java 的环境配置这里就不展开了。

JMeter 官网地址

下载 JMeter 5.0 (Requires Java 8 or 9.) / Binaries /
apache-jmeter-5.0.tgz

下载完成后解压,进入 bin 目录,运行命令 sh jmeter 即可打开图形页面。

jmeter

顺便提一下,从上面的命令可以看出,jmeter 文件本质上是一个 shell 脚本,我们使用文本编辑器打开可以看到,其最后执行了 "$JAVA_HOME/bin/java" $ARGS $JVM_ARGS $JMETER_OPTS -jar "$PRGDIR/ApacheJMeter.jar" "$@",所以该脚本的作用只是一个预置的配置文件,真正打开的是 ApacheJMeter.jar 这个 jar 包。

接下来通过一个简单的测试项目来进一步了解一下 JMeter。

首先不深入到具体的细节,先宏观了解一下 JMeter 里定义任务的结构。

目录结构

工作目录

TestPlan

最外层的 Test Plan(测试计划),右键可以看到可添加的配置:

测试计划

可以看到 TestPlan 里包含了 ThreadGroup(线程组)、Config(用户自定义的配置)。
另外还可以添加例如 Listener(测试结果报告等),以及我还没接触过的,但是从名字上看可能是轮询/计时器、以及对测试任务的前置后置处理等等,这些也是其他几种目录都可以添加的功能。

ThreadGroup

线程组

线程组里可以添加 Sampler(我将其理解为具体的测试用例,比如下面会介绍到的 HTTP 测试,就是添加 HTTP request Sampler)。一个线程组可以包含多个测试用例,并且可以自定义(同时运行的)线程数量、运行间隔等,这些配置也是压力/疲劳测试必不可少的组成部分。

Sampler

Sampler

具体的用例里则可以添加断言,来获取期望测试结果等。

接下来在具体的业务中上手试一下 JMeter 吧~

HTTP 接口测试

线程组配置

  1. 添加一个线程组
    右键 TestPlan,如下添加线程组

    添加线程组
    线程组配置

    简单解释一下各个参数:

    • Number of Thread
      线程(用户)的数量
    • ramp-up period(in second)
      使用多长的时间启动所有线程(比如 10 个线程,这里填了 10 秒,即每秒启动一个线程),默认为 0,即立即启动所以线程
    • Loop count
      循环次数(勾选 Forever 即为无限循环)
  1. 在线程组中添加一个用例(http 请求)

    http 请求

    配置 http 接口

    http 配置
  1. 添加结果报告

    Result Tree 中可以看到每次运行的请求、响应的数据等。
    Summary Report 可以查看运行结果报告,包括平均响应时间(Avarage)、最快响应时间(Min)、最大响应时间(Max)、错误率、吞吐量(Throughput)等等

    result tree
    summary report
    report

以上配置后,点击工具栏的绿色运行按钮,可以在结果报告中看到用例的执行结果了。

以上的配置,请求中携带的参数是我们预先配置好的,但是一般登录接口中携带的参数,例如用户名、密码等不可能是固定的。那么如何配置多个用户的参数,然后在运行测试时自动填入呢?

多用户配置

首先创建一个用户列表的文本,内容如:

15659828000,123456
15654545454,123456

每行都代表了一位用户,用户名、密码以英文逗号分隔。然后在 JMeter 中生成函数读取该文本的内容。点击如下图圈中的图标打开函数助手:

CSV Reader

Choose a function 选择 --CSVRead,第一行 CSV file to get values from | *alias 后面填入用户账号列表的文件地址,第二行 Column number of CSV file | next | *alias 后面先填 0(即获取每行的第一个参数,即用户名),然后点击下方的按钮 Generate & copy to clipboard,就会看到按钮左侧生成了一串形如 ${__CSVRead(/Users/zengyazhi/Downloads/apache-jmeter-5.0/backups/users.txt,0)} 的函数(并且已自动复制到剪贴板),下方也显示出了该函数所取到的值。接下来只要在 http 接口配置的地方填入该函数即可。

需要注意的是:该函数看起来很好理解,无非就是去读取某个文件里的第几个值,我在测试的时候只生成了一次,后续密码的那栏我直接将 0 改成 1,结果却读不到对应的值。所以记得有几个值就要使用函数助手生成几次。

另外还有人提到了使用 badboy 来配置多用户。

使用 badboy 录制 Jmeter 脚本,badboy 录制的脚本比 Jmeter 自己运行的 Http 请求要有更多的参数,比如图形验证码、服务器名称或 IP 会自动加载,无需手写。另外自动加载 Http Cookie 管理器、用户定义的变量、HTTP信息头管理器,以及 Http 请求。

除此之外,Badboy 还可以模拟浏览器操作,记录操作脚本,再配合 JMeter 做压测等等,这里就不展开了。

更多介绍见官网文档 Badboy software

全局变量配置

Http 接口一般都存在环境的区别,例如线下环境、生产环境等,如果直接把对应的 host 直接填在上述的 http 配置中,当需要切换环境时岂不是要改到怀疑人生?所以配置全局变量是必不可少的。

全局变量
config

也很简单,添加对应的 key-value 即可。例如定义了 host = "dev.test.cn",在配置 http 接口时,域名一栏填入 ${host} 就可以了。

以上只是简单上手试用下 JMeter,更多功能可能要在对应的业务中才会接触到。

差不多就是这样啦。nana 你在看吗? ღ( ´・ᴗ・` )比心~

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

推荐阅读更多精彩内容