JMeter安装及性能测试详解

JMeter安装及性能测试详解

JMeter介绍

(参考:http://www.importnew.com/13876.html

JMeter使用了不同技术和协议,是一款可以进行配置和执行负载测试、性能测试和压力测试的工具。负载测试、性能测试和压力测试概念:

负载测试: 这类测试使系统或者应用程序在预先设计好的极端场景下测试运行。这类测试用来评估系统或者程序在极端条件下的行为。

性能测试: 这种测试被用来检测系统的性能表现,包括特定情况下,系统的响应能力和稳定性。

压力测试: 这类测试通过载入更多的外部资源,并使系统组件超越其所设定的能力范围,试图使系统挂掉

在这里插入图片描述

优点:

  • 开源免费,基于Java编写,可集成到其他系统可拓展各个功能插件
  • 支持接口测试,压力测试(分布式测试)等多种测试类型,支持录制回放,入门简单
  • 相较于自己编写框架或其他开源工具,有较为完善的UI界面,便于接口调试
  • 多平台支持,可在Linux,Windows,Mac上运行
  • 提供多种报表数据图形展示

JMeter的目录文件介绍

  • bin: 核心可执行文件,包含配置
  • jmeter.bat: windows启动文件
  • jmeter-server.bat:windows下启动负载生成器(肉鸡)服务文件
  • jmeter: mac或者Liunx启动文件
  • jmeter-server:mac或者Liunx下启动负载生成器服务文件
  • jmeter.properties: 核心配置文件
    • 设置默认语言:language=zh_CN
    • 配置远程肉鸡IP和端口(服务器):remote_hosts=123.123.123.132:1099,234.234.234.234:1099
    • 肉鸡上配置:server_port=1099
    • 输出报告的配置,480行左右
  • extras:插件拓展的包
  • Lib:核心的依赖包
  • Ext:核心包,协议包
  • Junit:单元测试包

JMeter下载及环境配置

准备工作
安装JMeter前需要安装配置好Java,参考之前文章Java系统环境变量配置

下载后无需安装解压即可使用。

在这里插入图片描述

如果有idea工具或eclipse,可以双击ApacheJMeter.jar关联启动,也可以点击jemeter.bat进行启动

在这里插入图片描述

启动如下图所示:

在这里插入图片描述

JMeter组件

组件介绍

  • 测试计划(Test Plan): 使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器
  • 线程组(Thread Group):代表一定数量的并发用户,它可以用来模拟并发用户发送请求
  • 采样器(sampler):定义实际的请求内容,被线程组包含,我们主要用HTTP请求
  • 监听器(Listener) :包含查看结果树及聚合报告等图形化显示结果
  • 逻辑控制器(Logic Controller):逻辑判断功能,如if、for等语句控制
  • 断言(Assertions) :包含响应断言断言、xml断言等
  • 配置元件(Config Element):主要包括参数化配置、JDBC配置等
  • 前置处理器(Pre Processors)和后置处理器(Post Processors)
  • 定时器(Timer):用于操作之间设置等待时间

测试计划

打开JMeter即显示测试计划,测试计划用来描述一个测试(性能测试或者接口测试),包含与本次性能测试所有相关的功能,即该性能测试的所有内容是于基于一个计划的。

  1. 用户定义的变量
    一般添加一些系统常用的配置;如果测试过程中需要切换环境、配置,一般不建议在测试计划上添加变量,因为不方便启用和禁用,一般是直接添加用户自定义变量组件
  2. 独立运行每个线程组
    用于控制测试计划中的多个线程组的执行顺序,如果勾选了,可以保证按照顺序依次执行;不然则会交替执行
  3. Run tearDown Thread Groups after shutdown of main threads
    开启之后,当线程组遇到错误停止时,会执行tearDown线程组;不然不会执行
  4. 函数测试模式(Functional Testing)
    如果选中了此选项,监听组件如“查看结果树”配置了保存到一个文件中,那么jmeter会将每次的请求结果保存到文件中。一般不建议勾选

线程组

常见概念:

  • 进程: 正在运行的程序 = 程序启动,进程创建,程序退出,进程释放

  • 线程: 进程中的执行线索 = 游戏中,能动的角色 或者 迅雷每一部电影下载,底层都对应一个线程实现

  • 线程组: 对线程按照性质归类分组 = 比如: 植物大战僵尸,划分三组能量组、攻击组、破坏组

  • 层级关系: 进程 > 线程组 > 线程 (一个进程包含多个线程组,一个线程组包含多个线程)

  • 并发执行: 程序中的多个线程同时执行 = 多部电影下载 = 线程结束顺序与启动顺序不一定一致

  • 顺序执行: 程序中的多个线程按照先后顺序依次执行 = 电影先下载完毕,然后再播放 = 线程结束顺序与启动顺序一致

线程组设置:
线程组相当于有多个用户,同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值。
测试计划右键添加->threads->线程组(控制总体并发)

  • 线程数

    虚拟用户数,一个虚拟用户占用一个线程

  • 准备时长

    全部线程启动的时长,比如100个线程,20秒,则表示20秒内100个线程都要启动完成,每秒启动5个线程

  • 循环次数

    每个线程发送的次数,假如值为5,100个线程,则会发送500次请求,可以勾选永远循环

采样器

  1. 采样器定义实际的请求内容,被线程组包含,我们主要讲HTTP请求及JDBC Request
  2. 线程组->添加-> Sampler(采样器) -> Http

采样器参数配置:

  • 名称:采样器名称
  • 注释:对这个采样器的描述
  • web服务器:默认协议是http、默认端口是80
  • 服务器名称或IP :请求的目标服务器名称或IP地址
  • 路径:服务器资源的路径

监听器

监听器包含查看结果树及聚合报告等图形化显示结果,我们主要讲查看结果树及聚合报告
线程组->添加->监听器(Listener)-> 查看结果树

断言

断言用于检查测试中得到的响应(response)数据等是否符合预期,断言用以保证接口(性能)测试过程中的数据交互是否与预期一致
a、响应断言

  • 线程组 -> 添加 -> 断言 -> 响应断言

  • apply to(应用范围):

    Main sample only: 仅当前父取样器 进行断言

  • 要测试的响应字段

    响应文本:即响应的数据,比如字符串、json等文本

    响应代码:http的响应状态码,比如200,302,404这些

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

    Response Header: 响应头

  • 模式匹配规则:

    • 包括:包含在里面就成功,支持正则匹配
    • 匹配:响应内容完全匹配,支持正则匹配
    • equals:完全匹配,不支持正则匹配
    • substring:包括子串就成功,不支持正则匹配

b、Json断言

线程组 -> 添加 -> 断言 -> json断言

1 {"avatar_large": "https://cdn.v2ex.com/navatar/6cdd/60ea/184_large.png?m=1587133817", "name": "apple"}

Assert json path exists:$.name

1 [{"avatar_large": "https://cdn.v2ex.com/navatar/6cdd/60ea/184_large.png?m=1587133817", "name": "apple"},
2 {"avatar_large": "https://cdn.v2ex.com/navatar/6cdd/60ea/184_large.png?m=1587133817", "name": "python"}]

Assert json path exists:$.avatar_large[0].name

{"avatar_large": [{"url":https://cdn.v2ex.com/navatar/6cdd/60ea/184_large.png?m=1587133817", "name": "apple"},{"url": "https://cdn.v2ex.com/navatar/6cdd/60ea/184_large.png?m=1587133817", "name": "python"}]}

Assert json path exists:$.avatar_large[0].name

  • additonally assert value:勾选后可以在下方文本框中添加断言之
  • match as regular expression:勾选后,文本框支持正则表达式

参数化:

Jmeter提供的参数化方式:

  • 测试计划用户定义变量参数化

  • 用户自定义变量参数化

  • 用户变量

  • CSV文件数据参数化(文本文件)

  • 函数助手

函数助手

通过函数助手生成,csv文件数据调用参数,直接使用即可,只能是多个线程执行才能循环拿数据,
并且是线程组共享数据。

JMeter性能测试

1. JMeter 为性能测试提供了一下特色:

JMeter 可以对测试静态资源(例如 js、html 等)以及动态资源(例如 php、jsp、ajax 等等)进行性能测试
JMeter 可以挖掘出系统最大能处理的并发用户数
JMeter 提供了一系列各种形式的性能分析报告

2.使用 JMeter 一般用于以下两种类型的性能测试**

负载测试:通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。
压力测试:测试系统能承受的最大负载能力。目的在于发挖掘出目标服务系统可以处理的最大负载

3.基本过程

在这里插入图片描述

下面我们看下使用 jmeter 进行性能测试的基本过程
3.1新增线程组
创建测试线程组,并设置线程数量及线程初始化启动方式。
3.2新增 JMeter 元组
创建各种默认元组及测试元组,填入目标测试静态资源请求和动态资源请求参数及数据。
3.3新增监听器
创建各种形式的结果搜集元组,以便在运行过程及运行结束后搜集监控指标数据。
3.4运行&查看结果
调试运行,分析指标数据,挖掘性能瓶颈、评估系统性能状态;

4.实验测试

下面我们以打开百度演示上述过程。
新增线程组
在 JMeter 的 bin 目录下双击 jmeter.bat或ApacheJMeter.jar 启动 JMeter,如下图:

在这里插入图片描述

在左边操作栏中选择“测试计划”,右击新增一个线程组,如图所示:

在这里插入图片描述

初始化线程组相关信息

在这里插入图片描述

新增 JMeter 元组
添加默认配置元素,添加如下默认配置,如图

在这里插入图片描述

各默认组件配置如图所示。HTTP Cache Manager

在这里插入图片描述
在这里插入图片描述

Http请求默认值

在这里插入图片描述

添加HTTP取样器

在线程组上右击新增HTTP请求,如图:


在这里插入图片描述

Http请求设置如图:

在这里插入图片描述

新增监听器
在这里我们添加如下监听器,如图所示

在这里插入图片描述

运行&查看结果
如果启动运行 jmeter,可以单击添加的监听器查看运行过程中的监控指标数据,也可以等运行结束后,再查看。

在这里插入图片描述

结果说明
下面我们就监听器所采集的结果图进行简要的说明:图形结果

在这里插入图片描述
在这里插入图片描述

查看结果树:

在这里插入图片描述

用表格查看结果:

在这里插入图片描述

聚合报告查看如下图所示:

在这里插入图片描述

Reference

https://blog.csdn.net/yang_yang_heng/article/details/109321530

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

推荐阅读更多精彩内容