**Apache JMeter™ **
The Apache JMeter™ application is open source software, a 100% pure Java application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to other test functions.
** What can I do with it? **
Apache JMeter may be used to test performance both on static and dynamic resources (Webservices (SOAP/REST), Web dynamic languages - PHP, Java, ASP.NET, Files, etc. -, Java Objects, Data Bases and Queries, FTP Servers and more). It can be used to simulate a heavy load on a server, group of servers, network or object to test its strength or to analyze overall performance under different load types. You can use it to make a graphical analysis of performance or to test your server/script/object behavior under heavy concurrent load.
** What does it do? **
Apache JMeter features include:
- Ability to load and performance test many different server/protocol types:
- Web - HTTP, HTTPS
- SOAP / REST
- FTP
- Database via JDBC
- LDAP
- Message-oriented middleware (MOM) via JMS
- Mail - SMTP(S), POP3(S) and IMAP(S)
- Native commands or shell scripts
- TCP
- Complete portability and 100% Java purity.
- Full multithreading framework allows concurrent sampling by many threads and simultaneous sampling of different functions by separate thread groups.
- Careful GUI design allows faster Test Plan building and debugging.
- Caching and offline analysis/replaying of test results.
- Highly Extensible core:
- Pluggable Samplers allow unlimited testing capabilities.
- Several load statistics may be chosen with pluggable timers.
- Data analysis and visualization plugins allow great extensibility as well as personalization.
- Functions can be used to provide dynamic input to a test or provide data manipulation.
- Scriptable Samplers (BeanShell, BSF-compatible languages and JSR223-compatible languages)
** JMeter is not a brower **
JMeter is not a browser. As far as web-services and remote services are concerned, JMeter looks like a browser (or rather, multiple browsers); however JMeter does not perform all the actions supported by browsers. In particular, JMeter does not execute the Javascript found in HTML pages. Nor does it render the HTML pages as a browser does (it's possible to view the response as HTML etc., but the timings are not included in any samples, and only one sample in one thread is ever viewed at a time).
以上内容来自官方文档。
** 下面将介绍如何使用JMeter进行压力测试 **
前往官方下载ApacheJMeter.jar文件。启动JMeter,打开终端,执行命令java -jar ApacheJMeter.jar
(.jar文件路径),启动成功后,在左侧默认看到的是测试计划和工作台。
创建线程组
在JMeter中是通过线程数来模拟多用户,那么首先需要创建一个线程组。点击测试计划(可以改名),右键Add->Threads (Users)->Thread Group。
线程组界面进行说明:
1 设置线程组名称;
2 在取样器发生错误后要执行的操作(默认Continue);
3 Number of Threads(users): 模拟用户量,一个用户占一个线程,10个线程表示模拟10个用户;
4 Ramp-Up Period(in seconds): 设置线程需要多长时间全部启动。假设时长为5,那么需要1秒钟启动2个线程。也就是模拟每秒钟发送2次请求;
5 Loop Count: 每个线程发送请求的次数。如果线程数为10 ,循环次数为5 ,那么每个线程发送5次请求。总请求数为10*5=50 。如果勾选了Forever
,那么所有线程会一直发送请求,直到选择停止运行。
创建HTTP请求
点击上一步创建的线程组,右键->Add->Sampler->HTTP Request。
HTTP Request界面进行说明: 假如访问的url是 http://servicehouse.test.cn/motive/get_list?type=0
1 设置Http Request名称(可随意命名);
2 设置服务器域名(servicehouse.test.cn);
3 设置端口号(这里没有,不填);
4 实现(可不选);
5 HTTP请求协议(http);
6 HTTP请求方法(GET);
7 设置数据请求路径(/motive/get_list),路径文本框下面的选项,可以使用默认值,Use multipart/form-data for HTTP POST
是当请求中有附件的情况,一般情况下都不用选中;
8 设置参数(type=0);
9 添加参数;
10 删除参数。
参数设置完毕。
如果这样设置,只能访问同一个url,那么如何测试多个url呢?
** 多个url进行测试 **
当我们在做测试的时候基本上很少情况只针对具体的一个url进行测试,JMeter考虑到了这一点,于是乎,你可以将多个url写在一个文本文件中,然后JMeter随机地从文件中获取url,然后进行测试。
- 创建一个文本文件,比如textUrl.txt,在该文件中写下要进行测试的url,然后保存。
- 点击创建的HTTP Request,点击菜单栏Options,选择 Function Helper Dialog,在弹出的对话框中进行参数配置。
首先Choose a function中选择__StringFromFile
,其次填写创建的文本文件路径,然后点击Generate
,最后将Copy and paste function string
中的内容复制。然后将复制的内容复制到创建的HTTP Request文件Path中。
当执行到这一步,就能实现多个url测试了~~
然而,这样设置还是不能满足需求,很多时候回遇到将第一个请求的返回结果作为其它数据请求的参数,这可怎么办?
** 将第一次请求返回的结果作为第二个请求的参数 **
在app开发中,很多时候都会出现先发一个请求获取返回结果,然后其它所有的数据访问都需要第一次的返回结果作为参数。下面将介绍在JMeter中如何把它关联起来。
- 创建线程组,并创建第一个HTTP Request
- 创建后置处理器,点击
第一个HTTP Request
,右键Add->Post Processors->Regular Expression Extractor
对后置处理器的参数配置进行说明:
- Apply to 和 Field to check不做修改,直接使用默认值;
- 引用名称是下个请求将要引用到的变量名,这里写
data
,因为服务器返回的结果是data,我们将data对应的值作为其它请求的参数; - 正则表达式是提取你想要内容的正则表达式,小括号()表示提取,这里写
.*"data":"(.+?)".*
; - 模板是使用提取到的第几个值。因为可能有多个值匹配,所以要使用模板。从 1 开始匹配,依次类推。这里只有一个,所以填写
$1$
即可; - 匹配数字表示如何取值。0 代表随机取值,1 代表全部取值。这里只有一个,填 1 即可;
- 缺省值表示参数没有取到值的话,可以设置默认值。通常不填。
第一个HTTP Request
请求返回的结果,我们将data的值作为其它请求的参数
{
"success":true,
"data":"5bf8e39390c26d87a9cc0a",
"msg":"申请成功",
"type":"用户模块",
"code":20001
}
- 创建第二个
HTTP Request
,在这次的参数配置中需要注意的是,会用到第一个HTTP Request
返回的data
的值,所以参数值要和前面的引用名称
保持一致,但是要这样写${data}
运行,查看结果~~~
查看运行结果
查看结果的方式有多种,以查看结果树
为例吧。点击线程组名,右键->Add->Listener->View Results Tree。
说明:查看结果时候可以点击线程组添加结果,也可以直接点击Http Request添加结果,如果这个线程组里面创建了多个HTTP请求,那么在线程组下创建的结果能看到所有结果,如果针对某一个HTTP请求创建的结果只能看到该HTTP的响应结果。
聚合报告:
说明:
#Samples: 测试中总共发的请求数
Average: 平均响应时间
Median: 50%的请求的响应时间的最大值 (90% Line 99% Line同理)
Min: 响应时间最小值
Max: 响应时间最大值
Error %: 错误的请求数/总的请求数
Throughput: 吞吐量,默认情况下,表示每秒完成的请求数
KB/Sec: 每秒从服务器端接收到的数据量
大概就介绍这么多了