什么是 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 文件本质上是一个 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 接口测试

线程组配置

  1. 添加一个线程组

    右键 TestPlan,如下添加线程组

    简单解释一下各个参数:

    • Number of Thread

      线程(用户)的数量
    • ramp-up period(in second)

      使用多长的时间启动所有线程(比如 10 个线程,这里填了 10 秒,即每秒启动一个线程),默认为 0,即立即启动所以线程
    • Loop count

      循环次数(勾选 Forever 即为无限循环)
  2. 在线程组中添加一个用例(http 请求)

    配置 http 接口

  3. 添加结果报告

    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 (。・∀・)ノ゙的更多相关文章

  1. Jmeter Web 性能测试入门 (四):一个小实例带你学会 Jmeter 脚本编写

    测试场景: 模拟并发100个user,在TesterHome 站内搜索VV00CC 添加线程组 添加HTTP信息头管理器 添加HTTP Sampler 填写HTTP Sampler中的信息 添加监听器 ...

  2. 一个有趣的小例子,带你入门协程模块-asyncio

    一个有趣的小例子,带你入门协程模块-asyncio 上篇文章写了关于yield from的用法,简单的了解异步模式,[https://www.cnblogs.com/c-x-a/p/10106031. ...

  3. 一天带你入门到放弃vue.js(一)

    写在前面的话! 每个新的框架入手都会进行一些列的扯犊子!这里不多说那么多!简简单单说一下vue吧! Vue.js是目前三大框架(angular,vue,react)之一,是渐进式js框架,据说是摒弃了 ...

  4. 一天带你入门到放弃vue.js(三)

    自定义指令 在上面学习了自定义组件接下来看一下自定义指令 自己新建的标签赋予特殊功能的是组件,而指定是在标签上使用类似于属性,以v-name开头,v-on,v-if...是系统指令! v-是表示这是v ...

  5. 一天带你入门到放弃vue.js(二)

    接下来我们继续学习一天带你入门到放弃系列vue.js(二),如有问题请留言讨论! v-if index.html <div id="app"> <p v-if=& ...

  6. 小程序框架WePY 从入门到放弃踩坑合集

    小程序框架WePY 从入门到放弃踩坑合集 一点点介绍WePY 因为小程序的语法设计略迷, 所以x1 模块化起来并不方便, 所以x2 各厂就出了不少的框架用以方便小程序的开发, 腾讯看到别人家都出了框架 ...

  7. DTSE Tech Talk | 第10期:云会议带你入门音视频世界

    摘要:本期直播主题是<云会议带你入门音视频世界>,华为云媒体服务产品部资深专家金云飞,与开发者们交流华为云会议在实时音视频行业中的集成应用,帮助开发者更好的理解华为云会议及其开放能力. 本 ...

  8. 可能是史上最强大的js图表库——ECharts带你入门

    PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 StanZhai 两位仁兄让我试试 ECharts ,去主页看到<Why ECharts ?&g ...

  9. 史上最强大的js图表库——ECharts带你入门(转)

    出处:http://www.cnblogs.com/zrtqsk/p/4019412.html PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 Sta ...

随机推荐

  1. 浅尝 Elastic Stack (一) Elasticsearch、Kibana、Beats 安装

    Elastic Stack 包括 Elasticsearch.Kibana.Beats 和 Logstash,也称为 ELK Stack.能够安全可靠地获取任何来源.任何格式的数据,然后实时地对数据进 ...

  2. 20200311_最新爬取mzitu

    废话不多, 直接上代码, python3.6: import requests from bs4 import BeautifulSoup import os import time; import ...

  3. 学习工具---maven

    写在前面 为什么要用maven? 作为一跨平台的项目管理工具,它有着以下丰富的应用场景: 作为程序员,有相当一部分时间花在编译.运行单元测试.生成文档.打包.部署和发布等不起眼的工作上,而maven将 ...

  4. PyQt(Python+Qt)学习随笔:QListView的viewMode属性

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListView的viewMode属性用于控制QListView的视图模式,该属性类型为枚举类型Q ...

  5. PyQt(Python+Qt)学习随笔:布局控件layout的LeftMargin等contentsMargins属性

    在Qt Designer中布局控件有4个,分别是Vertical Layout(垂直布局).Horizontal Layout(水平布局).Grid Layout(网格布局).Form Layout( ...

  6. 上传到github

    我是为了自己下次不用再找github上传的地方了,索性就复制了一篇 转载于 https://blog.csdn.net/m0_37725003/article/details/80904824 首先你 ...

  7. 算法数据结构——数的深搜和广搜(dfs和bfs)

    leetcode104 二叉树的最大深度 https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/ 深度搜索分两种:递归(使用栈) ...

  8. 动态svg图片简单制作

    一.简介 #topics #no-box-shadow-img { box-shadow: none } 博主头像 svg图片格式不同于其它图片格式,svg图片本质上是一个xml文件,它内部是标记语言 ...

  9. 手把手教你写DI_2_小白徒手撸构造函数注入

    小白徒手撸构造函数注入 在上一节:手把手教你写DI_1_DI框架有什么? 我们已经知道我们要撸哪些东西了 那么我们开始动工吧,这里呢,我们找小白同学来表演下 小白同学 :我们先定义一下我们的广告招聘纸 ...

  10. 关于Redis分布式锁这一篇应该是讲的最好的了,先收藏起来再看!

    前言 在Java并发编程中,我们通常使用到synchronized .Lock这两个线程锁,Java中的锁,只能保证对同一个JVM中的线程有效.而在分布式集群环境,这个时候我们就需要使用到分布式锁. ...