Jmeter性能测试

bin目录文件

  • Jmeter.bat:windows下的启动文件
  • Jmeter.log:日志文件
  • Jmeter.sh:Linux的启动文件
  • Jmeter.properties:系统配置文件
  • Jmeter-server.bat:windows分布式测试要用到的服务器配置
  • Jmeter-server:Linux分布式测试要用到的服务器配置

工具组成部分

资源生成器:用于生成测试过程中服务器、负载机的资源代码
用户运行器:通常是一个脚本运行引擎,根据脚本要求模拟指定的用户行为
报表生成器:根据测试中实时的数据生成报表,提供可视化的数据显示方式
负载发生器:用于产生负载,通常以多线程或者多进程的方式模拟用户行为

测试计划

用于描述一次性能测试,包含与本次性能测试所有有关的功能,也就是说本次性能测试的所有内容是基于一个计划的

Threads(Users)线程 用户

  1. setup thread group
    特殊的线程组,执行预测试操作,即测试前,执行该定期线程组,类似init
  2. teardown thread group
    特殊的线程组,执行测试后操作,即测试结束后,执行该定期线程组,类似end
  3. thread group(线程组)
    可以看做一个虚拟用户组,线程组中每一个线程都是一个虚拟用户,线程组中包含的线程数量在测试执行过程中是不会发生改变的,类似action

Test Fragment(测试片段)
特殊的线程组,在测试计划中与线程组(Threads)处于一个层级,但是不被执行,除非它是一个模块控制器或者是被控制器所引用时才会被执行

Config Element(配置元件)
提供对静态数据配置的支持,如CSV Date Set Config可以将本地数据文件形成数据池(Date Pool)

Timer(定时器)
用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段

QPS:Query Per Second 每秒查询率,是一台查询服务器每秒能够处理的查询次数,在因特网上,作为域名系统服务器的性能经常用每秒查询率来衡量

Per Processors(前置处理器)
用于在实际的请求发出之前对即将发出的请求进行特殊处理。例如,HTTP URL重写修复符可以实现URL重写,当URL中有sessionID一类的session信息时,可以通过该处理器填充发出请求的实际的sessionID

Post Processors(后置处理器)
用于对Sampler发出请求后得到的服务器响应进行处理,一般用来提取响应中的特定数据

Assertions(断言)
用于检查测试中得到的相应数据等是否符合预期,一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致

Listener(监听器)
用来对测试结果数据进行处理和可视化展示的一系列元件。注意:不是用来监听系统资源的元件

Sample(取样器)
向服务器发送请求,记录响应信息,记录响应时间的最小单元

逻辑控制器
两类元件
一、用于控制test plan中sampler节点发送请求的逻辑顺序的控制器,常用的有if、switch Controller、Runtime Controller等
二、用来组织可控制sampler节点的,如事务控制器、吞吐量控制器
sample必须位于逻辑控制器下

Jmeter元件作用域和执行顺序

元件作用域
8类可执行元件(测试计划和线程组不属于可执行元件),其中,sample(取样器)是典型的不与其他元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其他元件(配置元件,定时器,断言,监听器)需要与sample等元件进行交互
在Jmeter中,元件的作用域是靠测试计划的树型结构中元件的父子关系来确定的,作用域的原则是:

  • 取样器(sample)元件不和其他元件相互作用,因此不存在作用域的问题
  • 逻辑控制器(Logic Controller)元件只对其子节点的取样器和逻辑控制器作用
  • 除Sample(取样器)和Logic Controller(逻辑控制器)元件外,其他6类元件,如果是某个取样器的子节点,则该元件对其父子节点起作用,如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)

元件执行顺序

  1. 配置元件(config elements)
  2. 前置处理程序(Per-processors)
  3. 定时器(Timers)
  4. 取样器(samples)
  5. 后置处理程序(Post-processors)
  6. 断言(Assertions)
  7. 监听器(Listeners)

注意:
1.前置处理器、后置处理器和断言等元件功能只对取样器作用,因此,如果在它们的作用域内没有任何取样器,则不会被执行
2.如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行

小练习

测试计划----添加----Threads-----线程组
线程组----添加----Sample----Http请求
HTTP请求----添加----定时器----Constant Throughput Timer

Constant Throughpout Timer---->Target throughput:目标吞吐量,注意这里是每分钟发送的请求数,实际填的数值为:60 *QPS,比如要测负载达到30QPS,那就是30 *60

Http请求----添加----监听器----查看结果树/聚合报告

聚合报告参数解析:
Label:每个Jmeter的element(例如Http Request)都有一个Name属性,这里显示的是Name属性的值
#Samples(样本):表示这次测试一共发送了多少请求,如果模拟10个用户,每个用户迭代十次,那么这里就是100
Average:平均响应时间——默认情况下是单个Request的平均响应时间,当使用了Transaction Controller时,也可以以Transaction为单位显示平均响应时间
Median:中位数,50%用户的响应时间小于该值,注意它与average平均响应时间的区别
90%Line:90%的请求耗时都在这个时间之下
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现的错误的数量/请求的总数
Throughput:吞吐量——默认情况下表示每秒完成的请求数,当使用了Transaction Controller(事务控制器)时,也可以表示类似Load Runner中的Transaction per Second数
KB/sec:每秒从服务器端接受的数据量,相当于LoadRunner中的Throughput/Sec
时间单位都是毫秒

Jmeter断言(检查点)

断言是在请求的返回层面上增加一层判断机制,因为请求成功了并不代表结果一定正确,因此需要检测机制提高测试准确性

1. 响应断言

微信截图_20190514144637.png

模式匹配规则:
包括:返回结果包括你返回的内容
匹配:根据指定内容进行匹配
Equals:返回结果与你指定的结果一致
Substring:返回结果是指定结果的字串
否:不进行匹配

2. Size Assertion
输入指定的字节,通过选择判断符来进行比较

微信截图_20190514152150.png

3. Duration Assertion(断言持续时间)
如果响应时间大于设置的持续时间,则断言失败,反之成功

参数化

  1. 前置处理器----用户参数


    微信截图_20190514153555.png

    微信截图_20190514153619.png
  2. CSV数据配置
    1.线程组设置循环次数,线程组下插入的HTTP请求负责插入数据
    2.创建一个文本文档,标准的CSV格式文件,每一行数据对应文档一条记录,不用字段之间使用英文 , 分隔
    3.创建一个CSV元件,声明数据源以及编码集以及解析格式
     Filename:文件路径
     File encoding:编码集
     Variable Names:变量名
     Delimiter:分隔符
    4.要将CSV中解析的数据设置进JSON格式的数据报文,语法${变量名}

  3. 随机参数化
    选项----函数助手对话框----_Random----设置最小值最大值,拷贝生成的变量表达式----粘贴到sample当中的参数值当中

Jmeter集合点

在需要集合的元件前-----添加定时器------Synchronizing Timer

参数说明
Number of Simulated Users to Group by------集合点的集合数
Timeout in milliseconds------到达设置的集合数之后等待的时间(单位:毫秒)

Jmeter关联

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