点名小辣辣,带你入门 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
19年12月4日,为了测试另外一个部门的服务在注册到这边zk后能否拿到dubbo代理,在controller草草写了一个http服务请求之,发现所有的dubbo接口都没有被注入代理,排查许久之后,发现 ...
- 【MySQL/C#/.NET】VS2010报错--“.Net Framework Data Provider。可能没有安装。”
前言 公司行业是金融软件,之前用的都是Oracle数据库.Oracle数据库用一个词来形容:大而全.MySQL的话,可能是因为开源.便宜,现在越来越主流. 我们也支持MySQL数据库,不过平时不用.最 ...
- LeetCode 036 Valid Sudoku
题目要求:Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudo ...
- GitHub上最火的、最值得前端学习的几个数据结构与算法项目!没有之一!
Hello,大家好,我是你们的 前端章鱼猫. 简介 前端章鱼猫从 2016 年加入 GitHub,到现在的 2020 年,快整整 5 个年头了. 相信很多人都没有逛 GitHub 的习惯,因此总会有开 ...
- 第三十章、containers容器类部件QMdiArea多文档界面部件功能介绍及开发应用
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 老猿在前期学习PyQt相关知识时,对每个组件的属性及方法都研 ...
- 超详细讲解mysql存储过程中的in/out/inout
存储过程 大概定义:用一个别名来描述多个sql语句的执行过程. 最简单 delimiter // create PROCEDURE p1() begin select * from userinfo; ...
- 项目测试环境自动化部署[jenkins前后端配置、Nginx配置]
持续部署:关注点在于项目功能部署到服务器后可以正常运行,为下一步测试环节或最终用户正式使用做准备.(问题点:一个环节有问题,其他环节跟着有问题) 持续集成:关注点是在于尽早发现项目整体运行问题,尽早解 ...
- es6 Object对象扩展新方法
ES6给Object拓展了许多新的方法,如: keys(obj):获取对象的所有key形成的数组 var obj = { foo: 'bar', baz: 42 }; Object.keys ...
- NOI Online #2 提高组 游记
没 NOI Online 1 挂的惨就来写游记吧,不知道为啥 NOI Online 1 民间数据测得 60 分的 T1 最后爆零了... 昏昏沉沉的醒来,吃了早饭,等到 \(8:30\) 进入比赛网页 ...
- HashMap相关类:Hashtable、LinkHashMap、TreeMap
前言 很高兴遇见你~ 在 深入剖析HashMap 文章中我从散列表的角度解析了HashMap,在 深入解析ConcurrentHashMap:感受并发编程智慧 解析了ConcurrentHashMap ...