Jmeter API Performance Test
笔者最近了解 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,线程组元件主要控制这么几件事。
- 当测试用例出现error时,测试计划怎样执行
- 用多少个线程(user)去模拟这个请求
- 循环多少次
压力测试,其实我们是要知道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中添加上它就可以了。

Jmeter中使用变量的统一格式就是这个 ${变量名}。
另外,还有一个比较常用的控件
CSV Data Set Config(CSV 数据文件设置):

具体字段就不介绍了,相信大家的英文水平。额外提一点,配置文件中是可以填写多组配置的,默认按行来分隔。你的测试脚本中用到了线程去重复访问,就会取多少行配置,方便进行不同的测试用例的测试。如果配置文件读到了末尾,你可以配置来决定是测试结束或是从头再读取配置文件。
Jmeter API Performance Test的更多相关文章
- 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’ ...
- 用JMeter进行Performance Test
用JMeter可以对Http请求进行Performance Test,来分析哪些方法花费的时间多,哪些方法花费的时间少,有了这样的分析结果后,我们就可以集中力量来改进费时的方法. 官方文档请参考如下链 ...
- JMETER通过java代码通过代码/ JMETER API实现示例进行负载测试
本教程试图解释Jmeter的基本设计,功能和用法,Jmeter是用于在应用程序上执行负载测试的优秀工具.通过使用jmeter GUI,我们可以根据我们的要求为请求创建测试样本并执行具有多个用户负载的样 ...
- Web Performance API
Web Performance API 性能监测/性能优化 https://developer.mozilla.org/en-US/docs/Web/API/Performance https://d ...
- Testing Complex Logic with JMeter Beanshell
BeanShell是最先进的JMeter内置组件之一.JMeter具有丰富的内置插件,可满足性能测试的许多需求.例如,在编写一些复杂的测试时,您可能需要一些额外的脚本.在这种情况下,值得使用Beans ...
- 利用performance属性查看网页性能
一般我们可以通过浏览器的调试工具-网络面板,或者代理工具查看网页加载过程中的各个阶段的耗时.而利用window.performance属性则可以获得更为精确的原始数据,以毫秒为单位,精确到微秒. pe ...
- JMeter学习-015-JMeter 断言之-Bean Shell Assertion
前面的博文中有对 JMeter 中的 响应断言 进行了讲解并实例演示,详情敬请参阅博文:JMeter学习-007-JMeter 断言实例之一 - 响应断言. 在 JMeter 中总计提供了如下几种 B ...
- Thinking Clearly about Performance
http://queue.acm.org/detail.cfm?id=1854041 The July/August issue of acmqueue is out now acmqueue is ...
- web计时机制——performance对象
前面的话 页面性能一直都是Web开发人员最关注的领域.但在实际应用中,度量页面性能的指标,是提高代码复杂程度和巧妙地使用javascript的Date对象.Web Timing API改变了这个局面, ...
随机推荐
- CentOS7 docker试水
CentOS 7.0,无外网直接访问权限,有一台代理服务器. 首先安装docker-ce,参考http://blog.51cto.com/aaronsa/2056882 除非特殊说明,以下操作都用ro ...
- ISCC 2018 Writeup
题解部分:Misc(除misc500).Web(除Only Admin.Only admin can see flag.有种你来绕.试试看).Reverse.Pwn.Mobile Misc( Auth ...
- python使用sqlmap API检测SQL注入
0x00前言: 大家都知道sqlmap是非常强大的sql注入工具,最近发现他有个sqlmap API,上网查了一下.发现这是 sqlmap的微端.(可以叫做sqlmap在线检测sql注入= =) 0x ...
- 如何看MySql执行计划explain(或desc)
简介 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.EXPLAIN 命令用法十分简单, 在 S ...
- LeetCode算法题-Subdomain Visit Count(Java实现)
这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...
- PCA与LDA介绍
PCA(主成分分析) PCA是一种无监督降维方式,它将数据投影到一组互相正交的loading vectors(principal axes)之上,并保证投影后的点在新的坐标轴上的方差最大 记数据集\( ...
- 处女作《Web全栈开发进阶之路》出版了!
书中源码下载地址:https://github.com/qinggee/WebAdvanced 01. 当初决定写博客的原因非常的纯洁:只要每个月写上 4 篇以上博客,月底的绩效奖金就多 500 块. ...
- SpringCloud-服务注册与发现(注册中心)
SpringCloud-服务注册与发现(注册中心) 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:作者使用IDEA + Gradle 注:需要有一定的java&& ...
- 第12章 X.509证书库的Fluent API - IdentityModel 中文文档(v1.0.0)
存储X.509证书的常见位置是Windows X.509证书存储区.商店的原始API有点神秘(在.NET Framework和.NET Core之间也略有变化). X509类是一个简化的API从所述存 ...
- JDK和Tomcat安装和配置过程
Jdk: 第一步:在下载JDK 第二步:安装 更改安装路径 *JDK配置: JAVA_HOME 环境变量 D:\jdk1.7.0 CLASSPATH 环境变量 .,%JAVA_HOME%\lib ...