点名小辣辣,带你入门 JMeter (。・∀・)ノ゙
什么是 JMeter
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测 试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、 数据库, FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的 强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。
搭建环境
因为 JMeter 是基于 Java 开发的,所以首先要用 Java 环境。Java 的环境配置这里就不展开了。
下载 JMeter 5.0 (Requires Java 8 or 9.) / Binaries /
apache-jmeter-5.0.tgz
下载完成后解压,进入 bin 目录,运行命令 sh 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

具体的用例里则可以添加断言,来获取期望测试结果等。
接下来在具体的业务中上手试一下 JMeter 吧~
HTTP 接口测试
线程组配置
添加一个线程组
右键 TestPlan,如下添加线程组

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

配置 http 接口

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


以上配置后,点击工具栏的绿色运行按钮,可以在结果报告中看到用例的执行结果了。
以上的配置,请求中携带的参数是我们预先配置好的,但是一般登录接口中携带的参数,例如用户名、密码等不可能是固定的。那么如何配置多个用户的参数,然后在运行测试时自动填入呢?
多用户配置
首先创建一个用户列表的文本,内容如:
15659828000,123456
15654545454,123456
每行都代表了一位用户,用户名、密码以英文逗号分隔。然后在 JMeter 中生成函数读取该文本的内容。点击如下图圈中的图标打开函数助手:

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 配置中,当需要切换环境时岂不是要改到怀疑人生?所以配置全局变量是必不可少的。


也很简单,添加对应的 key-value 即可。例如定义了 host = "dev.test.cn",在配置 http 接口时,域名一栏填入 ${host} 就可以了。
以上只是简单上手试用下 JMeter,更多功能可能要在对应的业务中才会接触到。
差不多就是这样啦。nana 你在看吗? ღ( ´・ᴗ・` )比心~
点名小辣辣,带你入门 JMeter (。・∀・)ノ゙的更多相关文章
- Jmeter Web 性能测试入门 (四):一个小实例带你学会 Jmeter 脚本编写
测试场景: 模拟并发100个user,在TesterHome 站内搜索VV00CC 添加线程组 添加HTTP信息头管理器 添加HTTP Sampler 填写HTTP Sampler中的信息 添加监听器 ...
- 一个有趣的小例子,带你入门协程模块-asyncio
一个有趣的小例子,带你入门协程模块-asyncio 上篇文章写了关于yield from的用法,简单的了解异步模式,[https://www.cnblogs.com/c-x-a/p/10106031. ...
- 一天带你入门到放弃vue.js(一)
写在前面的话! 每个新的框架入手都会进行一些列的扯犊子!这里不多说那么多!简简单单说一下vue吧! Vue.js是目前三大框架(angular,vue,react)之一,是渐进式js框架,据说是摒弃了 ...
- 一天带你入门到放弃vue.js(三)
自定义指令 在上面学习了自定义组件接下来看一下自定义指令 自己新建的标签赋予特殊功能的是组件,而指定是在标签上使用类似于属性,以v-name开头,v-on,v-if...是系统指令! v-是表示这是v ...
- 一天带你入门到放弃vue.js(二)
接下来我们继续学习一天带你入门到放弃系列vue.js(二),如有问题请留言讨论! v-if index.html <div id="app"> <p v-if=& ...
- 小程序框架WePY 从入门到放弃踩坑合集
小程序框架WePY 从入门到放弃踩坑合集 一点点介绍WePY 因为小程序的语法设计略迷, 所以x1 模块化起来并不方便, 所以x2 各厂就出了不少的框架用以方便小程序的开发, 腾讯看到别人家都出了框架 ...
- DTSE Tech Talk | 第10期:云会议带你入门音视频世界
摘要:本期直播主题是<云会议带你入门音视频世界>,华为云媒体服务产品部资深专家金云飞,与开发者们交流华为云会议在实时音视频行业中的集成应用,帮助开发者更好的理解华为云会议及其开放能力. 本 ...
- 可能是史上最强大的js图表库——ECharts带你入门
PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 StanZhai 两位仁兄让我试试 ECharts ,去主页看到<Why ECharts ?&g ...
- 史上最强大的js图表库——ECharts带你入门(转)
出处:http://www.cnblogs.com/zrtqsk/p/4019412.html PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 Sta ...
随机推荐
- Spring mvc与springboot
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration: viewResolver 类路径文件 把类路径下 ...
- [从源码学设计]蚂蚁金服SOFARegistry之消息总线
[从源码学设计]蚂蚁金服SOFARegistry之消息总线 目录 [从源码学设计]蚂蚁金服SOFARegistry之消息总线 0x00 摘要 0x01 相关概念 1.1 事件驱动模型 1.1.1 概念 ...
- 冲刺随笔——Day_Four
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺 作业正文 正文 其他参考文献 无 ...
- 冲刺随笔——Day_Eight
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺 作业正文 正文 其他参考文献 无 ...
- Fiddler 4 (利用Fiddler模拟恶劣网络环境)
1.模拟弱网环境 打开Fiddler,Rules->Performance->勾选 Simulate Modem Speeds,勾选之后访问网站会发现网络慢了很多 解决办法去掉勾选的地方网 ...
- 老猿学5G:多量纲计费与QoS的QCI、5QI、ARP、GBR和MBR
☞ ░ 前往老猿Python博文目录 ░ 一.多量纲计费 多量纲计费是与传统的计费模式相区别的一种计费模式,传统的计费基本上都是通过使用量.使用时长或包固定时长等方式计费,而多量纲计费是指在考虑以上方 ...
- 第8.4节 Python类中不是构造方法却胜似构造方法的__new方法__深入剖析:语法释义
一. 引言 在本博前面的内容都对构造方法__init__进行了介绍,也在前面章节引入了__new__方法,但老猿认为__new__方法比构造方法__init__更应该属于构造方法.这是因为在Py ...
- PyQt(Python+Qt)学习随笔:model/view架构中支持QListView列表中展示图标的两种方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QListView列表视图中的项不但可以展示文字,也可以展示图标和复选框,同时可以指定项是否可以拖 ...
- PyQt(Python+Qt)学习随笔:QTreeView树形视图的allColumnsShowFocus属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTreeView树形视图的allColumnsShowFocus属性用于控制是否使视图中的所有列显 ...
- 全国11省市出台区块链专项政策,Panda Global发现 "区块链+政务"被寄予厚望!
2020年已经过半,回顾2020年的上半年,不难发现其实区块链的变化非常大,今天Panda Global就给大家回顾下上半年全国关于区块链政策的发布情况.今年上半年,全国已有11个省市出台区块链专项政 ...