笔者最近了解 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. Twitter分布式自增ID算法snowflake原理解析

    以JAVA为例 Twitter分布式自增ID算法snowflake,生成的是Long类型的id,一个Long类型占8个字节,每个字节占8比特,也就是说一个Long类型占64个比特(0和1). 那么一个 ...

  2. Django基础三(form和template)

    上一篇博文学习了Django的View和urls,接下来是对django form 和 template的学习. 1 django form django form为我们提供了便捷的方式来创建一些HT ...

  3. python yield用法 (tornado, coroutine)

    yield关键字用来定义生成器(Generator),其具体功能是可以当return使用,从函数里返回一个值,不同之处是用yield返回之后,可以让函数从上回yield返回的地点继续执行.也就是说,y ...

  4. 基于tcp实现远程执行命令

    命令执行服务器: # Author : Kelvin # Date : 2019/1/30 20:10 from socket import * import subprocess ip_conf = ...

  5. [翻译 EF Core in Action 2.0] 查询数据库

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

  6. JS 各种宽高

    1.window的各种宽高   outerWidth.innerWidth.outerHeight.innerHeight outerHeight 获取浏览器窗口外部的高度(单位:像素).表示整个浏览 ...

  7. 安全研究 | Jenkins 任意文件读取漏洞分析

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云鼎实验室 发表于云+社区专栏 一.漏洞背景 漏洞编号:CVE-2018-1999002 漏洞等级:高危 Jenkins 7 月 18 ...

  8. ArcGIS JS API多线程克里金插值

        最近做关于雨量插值的项目,本来使用后台的GP工具做的,但是处理时间比较长需要十几秒钟左右,所以研究怎么通过前台来计算.     参考下克里金例子,思路是生成要计算区域的100乘以100网格,然 ...

  9. Sentry快速开始并集成钉钉群机器人

    Sentry(直译为:哨兵)是一个开源错误跟踪服务,帮助开发人员实时监控和修复崩溃 Sentry本质上是一种帮助您实时监控和修复崩溃的服务 1.  安装客户端SDK 这里我们安装Java平台的SDK, ...

  10. vmware P2V迁移域内windows服务器脱域问题

    windows 域服务器采用vmware converter进行物理机转换为虚拟机,需要在完成后进行退域重新加域操作. 否则,有可能会出现服务器在30天后脱域情况.出现脱域情况,可以通过退域加域的方式 ...