笔者最近了解 Apache组织开发了基于Java的压力测试工具Apache JMeter。如有兴趣可自行搜索它的相关信息。笔者记录了一些使用方法,如有错误或遗漏,欢迎联系改正。

官方下载地址:
https://jmeter.apache.org/download_jmeter.cgi
(注意选择对应自己机器的版本)
安装完成之后在 apache-jmeter/bin文件下点击jmeter.bat打开。注意这里会打开一个界面+一个控制台,不要关闭控制台。

记录这篇内容时使用的是Jmeter5.1.1版本。

你可以像拼积木一样的使用Jmeter,需要什么东西就添加什么东西,Jmeter自身会把它们以树的结构组装起来。下文以一个login获取token的API例子来进行记录:

TestPlan(测试计划):
Jmeter中你想要测试的内容即为TestPlan,可以把它理解成树的根节点。打开时默认会有一个空的TestPlan。你也可以把整理好的TestPlan保存下来成为.jmx文件,以便下次使用。
在TestPlan下你可以添加各种元件,如线程组,监听器,定时器,等等。

Thread Group(线程组):
在TestPlan下添加节点Thread Group,线程组元件主要控制这么几件事。

  1. 当测试用例出现error时,测试计划怎样执行
  2. 用多少个线程(user)去模拟这个请求
  3. 循环多少次

压力测试,其实我们是要知道server的承受能力,像平常码代码的时候,自己测试时自己点一点是看不出来好坏的,所以需要用多线程来模拟多个用户的并发访问。这里我们先简单的把线程数设为10,循环次数为2.

HTTP Request(HTTP 请求):
在Thread Group下添加HTTP Request,这个就不多谈了,就是模拟出一个完整的请求来发送给server处理。有一点需要注意的是,这里的"Server Name or IP"字段的值只能填写“192.168.1.1”或“xxx.com”这样的,不可以在前面添加“http://”否则Jmeter会无法识别。

HTTP Header Manager(HTTP 信息头管理器):
这个是对HTTP Request请求头的管理,你既可以把它添加到某个HTTP Request节点下,也可以把它作为HTTP Request的兄弟节点。如果HTTP Header Manager是作为HTTP Request的兄弟节点时,它会应用到同级的所有Http Request上。

到这里,可以模拟出一个完整的请求出来,但并不能看到这个请求的执行情况,还需要额外添加监听器。

Listener:
既可以在Thread Group下添加监听器,也可以在Http Request下添加监听器。这两者的区别在于是监听线程组的所有内容还是某个具体Http Request的所有内容。另外,Jmeter提供了很多种监听器,这里推荐添加view Results Tree(查看结果树)和Aggregate Report(聚合报告),这两种。其他的监听器可以根据需要情况添加。其中,view Results Tree可以帮助你查看request与response的具体内容,Aggregate Report可以查看测试的统计信息,如平均响应时间,error百分比等等。

到这里,你应该可以完成一个简单的API的测试了。

接下来我们来看一些复杂一点的功能
有时候我们需要模拟一个正常用户的行为。在使用APP期间,用户可能会这里点点,那里看看,记录或者更改一些内容,做一些查询等等。我们可以使用下面这个控件来记录用户行为中具体涉及到了哪些API。
HTTP(S) Test Script Recorder(HTTP代理服务器):

不同于fiddler,这里除去一些基本的配置(如端口),你还需要额外注意两个地方。
1.必须与Recording Controller(录制控制器)配合使用,否则会报错。

2.在你需要进行测试的移动端添加Jmeter的证书。证书在bin文件下,名为ApacheJMeterTemporaryRootCA.crt。证书会在一段时间后过期,如果过期重新添加证书即可。

上述步骤完成之后,你会在Recording Controller下找到一大堆Request的记录。这些记录中不仅包含你要测试的API,也包含了图片的获取,第三方服务等访问,推送的广告内容(如有)等等。你可以只留下你希望测试的部分。

如果你仔细观察这些请求会发现,用户最初的操作会有一个步骤来获取token,后续的请求都会携带上这个token。换句话说,上面截图里的API,除第一条外都在各自的Request Header里面有类似于这样:authorization: Bearer xxxxx.xxx.xxx 的一组值。token过期之前没有问题,你可以正常的进行测试,如果token过期了,你的Jmeter测试脚本就不能用了(除去login行为获取token的api外)。

前面HTTP Header Manager(HTTP 信息头管理器)的内容里我们提到过,如果HTTP Header Manager是作为HTTP Request的兄弟节点时,它会应用到同级的所有Http Request上。那么如果我们可以把login获取到的token放入这个Header里面就可以解决上面的问题了。
Regular Expression Extractor(正则表达式提取器):
利用这个控件,你可以获取response中符合你给定的正则表达式的值,并把它作为一个全新的变量记录下来。

简单介绍一下用到的字段的含义,更详细的内容可以自行搜索一下。
Name of created variable: 取出的变量的新名称.
Regular Expression: 提取内容的正则表达式,注意前面的"accessToken"指的是你要从哪里取值来判断是否符合正则表达式。
Template($i$ where i is capturing group number, starts at 1):这个是指你要取符合正则的一组值里面的第几个,我们直接取第一个就好。
Match No.(0 for Random):0 代表随机取值,1 代表全部取值。这个填1就好。
取到了我们需要的token,并把它赋值给scriptToken,接下来只要在Header Manager中添加上它就可以了。

![HttpHeaderUseRegularValue](uploads/5f8606c7ee82621a9acb17797f4eacd3/HttpHeaderUseRegularValue.PNG)

Jmeter中使用变量的统一格式就是这个 ${变量名}。

另外,还有一个比较常用的控件
CSV Data Set Config(CSV 数据文件设置):

具体字段就不介绍了,相信大家的英文水平。额外提一点,配置文件中是可以填写多组配置的,默认按行来分隔。你的测试脚本中用到了线程去重复访问,就会取多少行配置,方便进行不同的测试用例的测试。如果配置文件读到了末尾,你可以配置来决定是测试结束或是从头再读取配置文件。

Jmeter API Performance Test的更多相关文章

  1. 8 ways to improve ASP.NET Web API performance

    ASP.NET Web API is a great piece of technology. Writing Web API is so easy that many developers don’ ...

  2. 用JMeter进行Performance Test

    用JMeter可以对Http请求进行Performance Test,来分析哪些方法花费的时间多,哪些方法花费的时间少,有了这样的分析结果后,我们就可以集中力量来改进费时的方法. 官方文档请参考如下链 ...

  3. JMETER通过java代码通过代码/ JMETER API实现示例进行负载测试

    本教程试图解释Jmeter的基本设计,功能和用法,Jmeter是用于在应用程序上执行负载测试的优秀工具.通过使用jmeter GUI,我们可以根据我们的要求为请求创建测试样本并执行具有多个用户负载的样 ...

  4. Web Performance API

    Web Performance API 性能监测/性能优化 https://developer.mozilla.org/en-US/docs/Web/API/Performance https://d ...

  5. Testing Complex Logic with JMeter Beanshell

    BeanShell是最先进的JMeter内置组件之一.JMeter具有丰富的内置插件,可满足性能测试的许多需求.例如,在编写一些复杂的测试时,您可能需要一些额外的脚本.在这种情况下,值得使用Beans ...

  6. 利用performance属性查看网页性能

    一般我们可以通过浏览器的调试工具-网络面板,或者代理工具查看网页加载过程中的各个阶段的耗时.而利用window.performance属性则可以获得更为精确的原始数据,以毫秒为单位,精确到微秒. pe ...

  7. JMeter学习-015-JMeter 断言之-Bean Shell Assertion

    前面的博文中有对 JMeter 中的 响应断言 进行了讲解并实例演示,详情敬请参阅博文:JMeter学习-007-JMeter 断言实例之一 - 响应断言. 在 JMeter 中总计提供了如下几种 B ...

  8. Thinking Clearly about Performance

    http://queue.acm.org/detail.cfm?id=1854041 The July/August issue of acmqueue is out now acmqueue is ...

  9. web计时机制——performance对象

    前面的话 页面性能一直都是Web开发人员最关注的领域.但在实际应用中,度量页面性能的指标,是提高代码复杂程度和巧妙地使用javascript的Date对象.Web Timing API改变了这个局面, ...

随机推荐

  1. 【Java进阶】并发编程

    PS:整理自极客时间<Java并发编程> 1. 概述 三种性质 可见性:一个线程对共享变量的修改,另一个线程能立刻看到.缓存可导致可见性问题. 原子性:一个或多个CPU执行操作不被中断.线 ...

  2. 基于ko-easyui实现的PC前端模板功能完善

    上一篇博客我向大家介绍了基于ko-easyui实现的开发模板,博客地址:https://www.cnblogs.com/cqhaibin/p/9825465.html#4095185.但在还遗留三个问 ...

  3. Python-字符版gif图

    一.背景 上一篇文章我们讲了怎么做自己的炫酷二维码,需要的移驾Python-炫酷二维码,本片文章我们讲述下怎么把一张图片处理成字符版图片,就是说使用字符替代每个像素的颜色,形成一个由字符组成的图片,并 ...

  4. Win10+RTX2080深度学习环境搭建:tensorflow、mxnet、pytorch、caffe

    目录 准备工作 设置conda国内镜像源 conda 深度学习环境 tensorflow.mxnet.pytorch安装 tensorflow mxnet pytorch Caffe安装 配置文件修改 ...

  5. 企业级Harbor介绍及安装

    企业级Harbor介绍及安装 一.Harbor介绍 VMware公司最近开源了企业级Registry项目Harbor,其的目标是帮助用户迅速搭建一个企业级的Docker registry 服务.它以D ...

  6. Nginx的“远方表哥”—Tengine

    本文收录在Linux运维企业架构实战系列 今天想起当初研究nginx反向代理负载均衡时,nginx自身的upstream后端配置用着非常不舒服: 当时使用的淘宝基于nginx二次开发的Tengine, ...

  7. C# 数组比较--取得两个集合的交集,差集,并集的方法

    方法关键字: 交集:Intersect 差集:Except 并集:Union 使用代码: , , , , }; , , , , }; var 交集 = arr1.Intersect(arr2).ToL ...

  8. 用animation的steps属性制作帧动画

    昨天火急火燎地接到一个任务,说是要做一个掷骰子的游戏,关于掷骰子期间的过渡动画,我本来是想用css 3d制作一个立体的骰子,然后叫UI给6张平面图贴上去.再用translate3d来操作.然而UI考虑 ...

  9. SuperMap iObject入门开发系列七管线横断面分析

    本文是一位好友“托马斯”授权给我来发表的,介绍都是他的研究成果,在此,非常感谢. 管线横断面分析功能是管线系统常见的一个分析功能,地下管线横断面分析的原理,是根据需求,在管线区域画一条横截面线,使其与 ...

  10. E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?

    使用sudo apt-get install nginx 时提示错误: 问题描述: E: 无法获得锁 /: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占 ...