笔者最近了解 Apache组织开发了基于Java的压力测试工具Apache JMeter。若有兴趣可自行搜索它的相关信息。笔者记录了一些使用方法,若有错误或遗漏,欢迎联系改正。正则表达式
官方下载地址:
https://jmeter.apache.org/download_jmeter.cgi
(注意选择对应本身机器的版本)
安装完成以后在 apache-jmeter/bin文件下点击jmeter.bat打开。注意这里会打开一个界面+一个控制台,不要关闭控制台。apache
记录这篇内容时使用的是Jmeter5.1.1版本。api
你能够像拼积木同样的使用Jmeter,须要什么东西就添加什么东西,Jmeter自身会把它们以树的结构组装起来。下文以一个login获取token的API例子来进行记录:服务器
TestPlan(测试计划):
Jmeter中你想要测试的内容即为TestPlan,能够把它理解成树的根节点。打开时默认会有一个空的TestPlan。你也能够把整理好的TestPlan保存下来成为.jmx文件,以便下次使用。
在TestPlan下你能够添加各类元件,如线程组,监听器,定时器,等等。多线程
Thread Group(线程组):
在TestPlan下添加节点Thread Group,线程组元件主要控制这么几件事。并发
压力测试,其实咱们是要知道server的承受能力,像日常码代码的时候,本身测试时本身点一点是看不出来好坏的,因此须要用多线程来模拟多个用户的并发访问。这里咱们先简单的把线程数设为10,循环次数为2.dom
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 数据文件设置):
具体字段就不介绍了,相信你们的英文水平。额外提一点,配置文件中是能够填写多组配置的,默认按行来分隔。你的测试脚本中用到了线程去重复访问,就会取多少行配置,方便进行不一样的测试用例的测试。若是配置文件读到了末尾,你能够配置来决定是测试结束或是从头再读取配置文件。