性能测试——jmeter教程

一.下载及安装教程


1. http://jmeter.apache.org/download_jmeter.cgi 下载


2.解压这个jmeter包


3.cd到这个解压包的bin目录


4.sh jmeter 打开jmeter


二.第一个jmeter测试

1.添加线程组

        在测试计划右键弹出下拉菜单(添加-->Threads(Users)--->线程组)中选择线程组即可。


        线程组主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。

(1)线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。

(2)准备时长: 设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程。

(3)循环次数:每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。

        设置合理的线程数对于能否达到测试目标有决定性的影响。在本例中,要求得到网站首页在20 QPS 负载情况下的响应时间,如果如果线程数量设置的过小,则很可能无法达到设定的QPS要求。另外,设置合理的循环次数也很重要,除了上面介绍的固定循环次数与永远外;也可以灵活的选择设定测试运行时间。勾选“调度器”,进行调度器配置。


2.添加http请求

        线程组上右键菜单(添加--->Sampler--->HTTP请求)选择HTTP请求。


配置参数:

(1)名称:本属性用于标识一个取样器,建议使用一个有意义的名称。

(2)注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。

(3)服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。比如:mini-dev-finance.haimaiche.net

端口号:目标服务器的端口号,默认值为80 。

(4)协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http 。

(5)方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。

Content encoding :内容的编码方式,默认值为iso8859

(6)路径:目标URL路径(不包括服务器地址和端口)。比如:/v2/appHomePage/appShow.json

自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter 自动重定向到新的页面。

(7)Use keep Alive : 当该选项被选中时,jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信,默认选中。

(8)Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时,使用Use multipart/from-data方法发送,默认不选中。

(9)同请求一起发送参数 : 在请求中发送URL参数,对于带参数的URL ,jmeter提供了一个简单的对参数化的方法。用户可以将URL中所有参数设置在本表中,表中的每一行是一个参数值对(对应RUL中的 名称1=值1)。

(10)同请求一起发送文件:在请求中发送文件,通常,HTTP文件上传行为可以通过这种方式模拟。

(11)从HTML文件获取所有有内含的资源:当该选项被选中时,jmeter在发出HTTP请求并获得响应的HTML文件内容后,还对该HTML进行Parse 并获取HTML中包含的所有资源(图片、flash等),默认不选中,如果用户只希望获取页面中的特定资源,可以在下方的Embedded URLs must match 文本框中填入需要下载的特定资源表达式,这样,只有能匹配指定正则表达式的URL指向资源会被下载。

(12)用作监视器:此取样器被当成监视器,在Monitor Results Listener 中可以直接看到基于该取样器的图形化统计信息。默认为不选中。

(13)Save response as MD5 hash? :选中该项,在执行时仅记录服务端响应数据的MD5值,而不记录完整的响应数据。在需要进行数据量非常大的测试时,建议选中该项以减少取样器记录响应数据的开销。

3.设置QPS限制

在http请求上添加(添加--->定时器--->Constant Throughput Timer)

属性参数:

(1)Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,因此,对应测试需求中所要求的20 QPS ,这里的值应该是1200 。

(2)Calculate Throughput based on :有5个选项



4.添加监听器

        右键点击线程组,在弹的菜单(添加--->监听器--->聚合报告)中选择聚合报告。

       也可以生成其他监听器

监控结果需要关注的有:成功率、响应时间、标准差、CPU、mem内存、io等


5.聚合报告分析



6.响应结果出现乱码

当响应内容没有设定编码时,jmeter会按照jmeter.properties文件中设定的编码进行解码。默认的编码为ISO-8859-1,所以在解析中文时出错。

解决办法:

添加后置处理器--BeanShellPostProcessor

设置编码为UTF-8


7.jemter自带后置处理器,正则表达式提取,可用来提取接口响应的信息,给后续接口传参使用


假设我们要取登录接口的sessionId字段


先添加后置处理器--正则表达式


(1)名称:取一个有意义的名称

(2)Apply to:应用范围(一般就选择默认的Main sample

only),就算有重定向,一般也是提取最终那个请求的接口。

(3)要检查的响应字段:

主体:

接口响应主体内容,一般要提取普通http响应结果的数据,都勾选这个。

信息头:响应头的所有内容。

Request

Headers:请求头的所有内容。

url:是对sample的url进行匹配,也就是查看结果树里请求内容的第一行url,不包含data里的请求参数(即只能匹配protocol(协议)+host+path+querystring,如:https://www.baidu.com/index.php?tn=monline_3_dg)。

响应代码:http响应代码,如101,200,302,404,501等。

响应信息:http响应代码对应的响应信息,例如:OK,

Found(HTTP/1.1 200 Ok;HTTP/1.1 302 Found)。

(4)引用名称:其他地方引用时的变量名称比如sessionId,名称只能是一个,引用方法:${sessionId}


(5)

正则表达式:

数据提取器,一般简单的通用语法就是:左边界(.*?)右边界,(.*?)

是替换了想要提取的内容,里面的'?'为非贪婪匹配,(非贪婪模式就是说在遇到第一个右边界后就停止匹配,这样就可以精确拿到想要的内容)。建议均使用非贪婪匹配,除非特殊情况。"sessionId":"(.*?)","settedTradePwd":(.*?),"type":(.*?), 注意 (.*?)要不要加""取决于返回的这个字段的值有没有""


模板:

对应正则表达式提取器类型,样式为:$n$。若模板为:$0$,则为整个表达式匹配到的内容,就是包括小括号内跟小括号外的内容,即("sessionId":"d116c405a75e406db7e74eaee5e02d8d","settedTradePwd":0,"type":1,"userId":30289)。若模板为:$1$,则对应正则表达式中的第一个(.*?)所匹配的内容,即(d116c405a75e406db7e74eaee5e02d8d),若模板为:$2$,则对应正则表达式中的第二个(.*?)所匹配的内容,即(0),若模板为$1$$2$,则把2个(.*?)所匹配的内容拼接起来,即(d116c405a75e406db7e74eaee5e02d8d0)。

匹配数字:

正则表达式匹配数据的最终结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。当为 0 时,随机返回匹配的数据。当为 1 时,表示返回匹配结果数组的第一个元素。当为负数(-1,-2,-100都可以)时,表示返回全部元素,并且同时会返回一个元素总数的变量,在引用时:通过${sessionId_g1}的方式来取第1个匹配的内容,${sessionId_g2}来取第2个匹配的内容。


缺省值:

匹配失败时的默认值。通常用于后续的逻辑判断,建议使用一些特殊含义的,比如0,NULL,ERROR等。


正则测试,添加后置处理器Debug PostProcessor,


正则结果查看,添加查看结果树,在Debug

PostProcessor查看变量值,以下就是返回的变量值


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

推荐阅读更多精彩内容

  • 上一节中,我们了解了jmeter的一此主要元件,那么这些元件如何使用到性能测试中呢。这一节创建一个简单的测试计划来...
    邵琼阅读 800评论 0 0
  • JMeter介绍: 一个非常优秀的开源的性能测试工具。 从性能工具的原理划分: Jmeter工具和其他性能工具在原...
    邵琼阅读 436评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,587评论 18 139
  • 主要文体来自 CDNS:https://www.cnblogs.com/ceshisanren/p/5639895...
    Amano阅读 10,960评论 3 27
  • 昨天2月3号,是我很喜欢的一个日子,因为2,3和23都是质数,并且昨天还是周六,对我来说,是完美的一天了。 ...
    Imp3阅读 192评论 0 0