测试工具--JMeter

**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:

  1. 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
  1. Complete portability and 100% Java purity.
  2. Full multithreading framework allows concurrent sampling by many threads and simultaneous sampling of different functions by separate thread groups.
  3. Careful GUI design allows faster Test Plan building and debugging.
  4. Caching and offline analysis/replaying of test results.
  5. 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文件路径),启动成功后,在左侧默认看到的是测试计划和工作台。

启动界面.png

创建线程组

在JMeter中是通过线程数来模拟多用户,那么首先需要创建一个线程组。点击测试计划(可以改名),右键Add->Threads (Users)->Thread Group。

创建线程组.png
线程组界面.png

线程组界面进行说明:
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请求.png
HTTP参数配置.png

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,然后进行测试。

  1. 创建一个文本文件,比如textUrl.txt,在该文件中写下要进行测试的url,然后保存。
  2. 点击创建的HTTP Request,点击菜单栏Options,选择 Function Helper Dialog,在弹出的对话框中进行参数配置。
多个url配置1.png
多个url配置2.png

首先Choose a function中选择__StringFromFile,其次填写创建的文本文件路径,然后点击Generate,最后将Copy and paste function string中的内容复制。然后将复制的内容复制到创建的HTTP Request文件Path中。

多个url配置3.png

当执行到这一步,就能实现多个url测试了~~

然而,这样设置还是不能满足需求,很多时候回遇到将第一个请求的返回结果作为其它数据请求的参数,这可怎么办?

** 将第一次请求返回的结果作为第二个请求的参数 **

在app开发中,很多时候都会出现先发一个请求获取返回结果,然后其它所有的数据访问都需要第一次的返回结果作为参数。下面将介绍在JMeter中如何把它关联起来。

  1. 创建线程组,并创建第一个HTTP Request
  2. 创建后置处理器,点击第一个HTTP Request,右键Add->Post Processors->Regular Expression Extractor
后置处理器.png
后置处理器参数.png

对后置处理器的参数配置进行说明:

  1. Apply to 和 Field to check不做修改,直接使用默认值;
  2. 引用名称是下个请求将要引用到的变量名,这里写data,因为服务器返回的结果是data,我们将data对应的值作为其它请求的参数;
  3. 正则表达式是提取你想要内容的正则表达式,小括号()表示提取,这里写.*"data":"(.+?)".*;
  4. 模板是使用提取到的第几个值。因为可能有多个值匹配,所以要使用模板。从 1 开始匹配,依次类推。这里只有一个,所以填写$1$即可;
  5. 匹配数字表示如何取值。0 代表随机取值,1 代表全部取值。这里只有一个,填 1 即可;
  6. 缺省值表示参数没有取到值的话,可以设置默认值。通常不填。

第一个HTTP Request请求返回的结果,我们将data的值作为其它请求的参数

{
   "success":true,
   "data":"5bf8e39390c26d87a9cc0a",
   "msg":"申请成功",
   "type":"用户模块",
   "code":20001
}
  1. 创建第二个HTTP Request,在这次的参数配置中需要注意的是,会用到第一个HTTP Request返回的data的值,所以参数值要和前面的引用名称保持一致,但是要这样写${data}
参数取第一次返回结果中的数据.png

运行,查看结果~~~

查看运行结果

查看结果的方式有多种,以查看结果树为例吧。点击线程组名,右键->Add->Listener->View Results Tree。

说明:查看结果时候可以点击线程组添加结果,也可以直接点击Http Request添加结果,如果这个线程组里面创建了多个HTTP请求,那么在线程组下创建的结果能看到所有结果,如果针对某一个HTTP请求创建的结果只能看到该HTTP的响应结果。

View Results Tree.png
Graph Results.png
View Results in Table.png

聚合报告:


Aggregate Report.png

说明:
#Samples: 测试中总共发的请求数
Average: 平均响应时间
Median: 50%的请求的响应时间的最大值 (90% Line 99% Line同理)
Min: 响应时间最小值
Max: 响应时间最大值
Error %: 错误的请求数/总的请求数
Throughput: 吞吐量,默认情况下,表示每秒完成的请求数
KB/Sec: 每秒从服务器端接收到的数据量

大概就介绍这么多了😊

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容