JMeter详细介绍和相关概念
JMeter是一款开源的、强大的、用于进行性能测试和功能测试的Java应用程序。
本篇承接上一篇 JMeter快速入门示例 , 对该篇中出现的相关概念进行详细介绍。
JMeter测试计划
-
测试计划名称和注释:整个测试脚本保存的名称,以及对该测试计划的注释。这些自定义内容最好能表达脚本的意义。
-
用户定义的变量:在测试计划上可以添加用户定义的变量,这些变量相当于是全局变量,一般添加一些系统常用的配置。但请注意,如果测试过程中想切换环境或配置,一般不建议在测试计划上添加变量,因为不方便启用和禁用。此时,可以直接添加用户自定义变量组件。
-
线程组设置:
- 独立运行每个线程组:用于控制测试计划中的多个线程组的执行顺序。如果不勾选,则默认各线程组并行、随机执行。勾选后,可以保证线程组按顺序执行。
- Run tearDown Thread Groups after shutdown of main threads:当线程组停止运行时仍继续运行tearDown线程组。该选项结合线程组的执行配置使用,但一般很少用到。
-
函数测试模式:如果选中了此选项,同时监听组件(如“查看结果树”)配置了保存到一个文件中,那么JMeter会将每次的请求结果保存到文件中。但此操作比较消耗资源,因此一般不建议勾选。
-
类路径设置:可以添加文件或jar包。此功能最常用于调用外部jar包。当脚本需要调用外部的java文件或jar包时,可以把jar包路径添加到这里,然后在beanshell中直接import进来,并调用jar包中的方法
线程组
-
:线程组可以看作是一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。这些虚拟用户将并发地执行测试计划中的请求,从而模拟真实世界的用户行为,对目标服务器进行压力测试。
-
分类:
- 普通线程组:最常见的线程组类型。可以指定线程数、循环次数、延迟等参数,以控制虚拟用户的并发数和请求执行方式。
- setUp线程组:一种特殊类型的线程组,通常用于执行预测试操作,如数据准备、登录等。与普通线程组不同,setUp线程组会在其他线程组之前执行。这对于需要在测试开始前进行一些初始化操作的情况非常有用。
- tearDown线程组:另一种特殊类型的线程组,通常用于执行测试后的清理操作,如关闭数据库连接、清理测试数据等。与setUp线程组类似,tearDown线程组会在所有其他线程组执行完毕后执行。
-
关键参数:
- 线程数:模拟用户数,多个线程用于模仿对服务器的并发访问。
- Ramp-Up时间:设置启动所有线程需要的时间,即线程从启动到运行再到释放的总时间。在负载测试时,建议将Ramp-Up时间设置大一些,以便让性能曲线平缓,从而更容易找到瓶颈点。
- 循环次数:设置线程组中的每个线程循环次数。可以理解为线程的迭代次数或重复发起请求的次数。
-
错误处理:在取样器发生错误后,JMeter提供了多种操作选项,包括继续执行接下来的请求、启动下一个线程循环、停止当前线程循环、停止所有线程、停止测试计划以及立即停止测试计划等
取样器
JMeter中的取样器(Sampler)是执行性能测试的关键组件之一,用于模拟用户请求并收集相应的请求和响应数据。
常用取样器
- HTTP请求取样器 :用于模拟HTTP请求,测试Web应用程序的性能。它支持HTTPS协议,可以设置请求头、参数化、Cookie管理等。
- Debug Sampler:用于在测试过程中输出调试信息,如请求的参数、响应的状态码、响应的内容等。这对于调试测试计划或查看请求和响应的详细信息非常有用。但需要注意的是,Debug Sampler会记录大量的详细信息,可能会导致测试结果文件变得很大,因此不建议在生产环境中使用。
- 其他取样器:JMeter还提供了其他类型的取样器,如FTP请求取样器、JDBC请求取样器等,用于模拟不同类型的请求。
使用注意事项
- 配置元件:在使用取样器时,通常需要配置一些元件,如HTTP Cookie管理器、CSV数据文件设置等,以模拟真实用户的请求环境。
- 监听器:可以使用监听器查看取样结果,如查看结果树、聚合报告等,以便对测试结果进行分析和评估。
- 作用域:取样器不存在作用域问题,但其他配置元件、定时器、断言等会作用于范围内的取样器。
- 执行顺序:取样器是按照树上顺序从上到下执行的,因此需要注意取样器的排列顺序
断言
JMeter中的断言是用于验证服务器响应是否正确的测试元素,它会检查服务器响应中的部分或全部内容,并在响应不符合预期时标记该请求为失败。以下是对JMeter断言的详细介绍:
一、断言的作用
断言在测试过程中起着至关重要的作用,它相当于检查点,用于判断系统返回的响应结果是否正确,从而帮助测试人员判断测试是否通过。通过使用断言,可以确保应用程序的响应满足预期,提高测试的准确性和效率。
二、断言的类型
JMeter提供了多种类型的断言,以适应不同的测试场景和需求。以下是一些常用的断言类型:
-
响应断言:
- 用于验证服务器返回的响应内容是否符合预期。
- 可以对响应文本、响应代码、响应信息、响应头、请求头、请求数据等字段进行断言。
- 支持多种模式匹配规则,如包括、匹配、相等、字符串等。
-
JSON断言:
- 专门用于验证响应结果为JSON格式的请求。
- 可以使用JSON Path表达式来指定要断言的字段和值。
- 支持对字段值进行正则匹配或精确匹配。
-
大小断言:
- 用于验证服务器响应的大小是否在指定范围内。
- 可以对完整响应、响应头、响应的消息体、响应代码、响应信息等字段进行大小断言。
- 支持等于、大于、小于、不等于等比较类型。
-
持续时间断言:
- 用于验证服务器响应是否在指定时间内返回。
- 可以设置响应时间范围,任何超过该范围的响应都将被标记为失败。
-
BeanShell断言:
- 提供了一种自定义断言脚本的方式。
- 可以使用BeanShell脚本语言编写自己的判断逻辑。
- 适用于需要复杂逻辑判断的断言场景。
-
其他断言:
- JMeter还支持其他类型的断言,如XPath断言、比较断言等。
- 这些断言类型适用于特定的测试场景和需求。
三、断言的配置
在JMeter中配置断言通常需要在测试计划中选择需要添加断言的Sampler,然后右键单击该Sampler并选择“Add”->“Assertions”->相应的断言类型。在断言配置窗口中,可以设置要检查的字段、匹配规则、预期值等参数。
四、断言的使用注意事项
- 选择合适的断言类型:根据测试需求和响应格式选择合适的断言类型。
- 设置合理的匹配规则和预期值:确保匹配规则和预期值能够准确反映预期的响应内容。
- 注意断言的作用范围:根据需要设置断言的作用范围,如作用于父节点取样器及对应子节点取样器等。
- 避免过度使用断言:过多的断言会增加测试计划的复杂性和执行时间,因此应合理控制断言的数量和复杂度。
监听器
JMeter监听器是JMeter测试计划中的重要组件,用于收集和显示测试结果。以下是对JMeter监听器的详细介绍:
一、监听器的作用
- 实时收集数据:监听器可以实时收集JMeter测试执行过程中的数据,包括请求和响应的各种信息。
- 显示测试结果:监听器以不同的方式展示收集到的测试结果,如树状结构、表格、图形等,便于测试人员直观了解测试情况。
- 分析测试结果:通过监听器,测试人员可以对测试结果进行分析和评估,如查看响应时间、吞吐量、错误率等指标,以评估系统的性能表现。
- 生成测试报告:监听器可以生成测试报告,汇总测试结果和性能指标,方便团队成员共享和讨论测试结果。
二、监听器的类型
JMeter提供了多种类型的监听器,以适应不同的测试需求和场景。以下是一些常用的监听器类型:
- 查看结果树:以树状结构组织显示所有取样器的响应。通过查看结果树,可以查看任意取样器的响应信息,并提供多种不同的视图查看响应结果。但请注意,生成查看结果树需要消耗大量的系统资源(如CPU、内存等),因此在负载测试期间不得使用。
- 聚合报告:为测试中的每个不同名称的请求创建一个表记录。对于每个请求,它统计了响应信息并提供请求计数、最小值、最大值、平均值、错误率、近似吞吐量(请求/秒)和每秒千字节吞吐量等关键性能指标。
- 后端监听器:可以将事务或采样器在某个时间范围内执行的结果发送给外部系统(如Graphite、InfluxDB等),以便进行进一步的分析和可视化。
- 汇总报告:与聚合报告类似,但提供了更详细的测试结果汇总信息。
- 汇总图:以图形的方式展示测试结果汇总信息,便于测试人员直观了解测试趋势和性能瓶颈。
- 断言结果:用于查看断言的成功和失败数,帮助测试人员定位问题所在。
- 响应时间图:以图形的方式展示各事务和采样器的响应时间,便于测试人员分析系统响应时间的变化情况。
三、监听器的配置和使用
在JMeter中配置监听器通常需要在测试计划中选择需要添加监听器的Sampler或线程组,然后右键单击并选择“Add”->“Listener”->相应的监听器类型。在监听器配置窗口中,可以设置相关参数,如文件名、输出格式、匹配规则等。
使用监听器时,需要注意以下几点:
- 选择合适的监听器类型:根据测试需求和场景选择合适的监听器类型。
- 合理配置参数:根据测试需求合理配置监听器的参数,以确保收集到准确、有用的测试数据。
- 注意资源消耗:部分监听器(如查看结果树)会消耗大量的系统资源,因此在负载测试期间应谨慎使用。
- 定期查看和分析测试结果:通过定期查看和分析监听器生成的测试结果,可以及时发现和解决问题,提高测试效率和准确性。
相关文章:
JMeter详细介绍和相关概念
JMeter是一款开源的、强大的、用于进行性能测试和功能测试的Java应用程序。 本篇承接上一篇 JMeter快速入门示例 , 对该篇中出现的相关概念进行详细介绍。 JMeter测试计划 测试计划名称和注释:整个测试脚本保存的名称,以及对该测试计划的注…...
如何使用Git
简介 一.git简介 Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理.通过Git仓库来存储和管理这些文件,Git仓库分两种: 本地仓库:开发人员自己电脑上的Git仓库远程仓库:远程服务器上的Git仓库 commit:提交,将本地文件和版本信息保存到本地仓库 p…...
Redis 哨兵 问题
前言 相关系列 《Redis & 目录》(持续更新)《Redis & 哨兵 & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis & 哨兵 & 总结》(学习总结/最新最准/持续更新)《Redis & 哨兵…...
安卓基础001
前言 也是好久没有更新博客了,最近实习也是需要学习一些知识哈哈哈哈哈哈为了更好的发展嘛,咱们从客户端开始,过程可能有点像写前端,不喜勿喷,希望在学习的过程中也可以给大家带来一些简单得帮助吧....... tips:这里跳过安卓studio安装,大家可自行寻找教程 写的不详细,只是为了…...
shodan2:绕过shodan高级会员限制+metasploit批量验证漏洞
shodan2 shodanmetasploit批量验证漏洞 shodan的这个指令语法是特别多的,那么我不可能说一个个全部讲完,因为有的参数可能你一辈子都用不上,主要就是把一些红队最常用的参数给你讲完,今天我们看看怎么去查一个cve-2019-0708的一…...
【JAVA毕业设计】基于Vue和SpringBoot的母婴商城系统
本文项目编号 T 030 ,文末自助获取源码 \color{red}{T030,文末自助获取源码} T030,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...
探索Python安全字符串处理的奥秘:MarkupSafe库揭秘
文章目录 探索Python安全字符串处理的奥秘:MarkupSafe库揭秘第一部分:背景介绍第二部分:MarkupSafe是什么?第三部分:如何安装MarkupSafe?第四部分:MarkupSafe的简单使用方法1. 使用escape函数2.…...
Xcode真机运行正常,打包报错
1.问题: 老项目Xcode真机运行没问题,但但打包的时候却报了以下错误: some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/4ff29661-3588-11ef-9513-e2437461156c/Library/Caches/com.apple.xbs/Sources/r…...
Android Audio基础——音频混音线程介绍(十)
MixerThread 是 Android 音频输出的核心部分,主要负责将多个音频流混合成一个输出流,通常用于处理多个音频源(如音乐播放器、语音通话、系统提示音等)的混音操作,混音后的音频数据会被发送到音频硬件(如扬声器或耳机)进行最终输出。大多数 Android 的音频都需要经过 Mix…...
【Excel】函数各类公式总结
在 Excel 中,有许多常用的公式和函数用于各种类型的计算,包括基本的数学运算、统计运算、逻辑判断、查找与引用、文本处理,以及复数计算。下面列出了一些常用的 Excel 函数: 1、数学与三角函数 SUM求和函数,计算一组…...
【入门篇】2.9 系统滴答定时器 SysTick
目录 一,SysTick 系统滴答定时器 二,SysTick寄存器 2.1 SysTick 控制和状态寄存器(CTRL) 2.2 SysTick 重装载数值寄存器(LOAD) 2.3. SysTick 当前值寄存器(VAL) 2.4 SysTick 校准值寄存器(CALIB) 三,使用SysTick定时器 四,用法示例 一,SysTick 系统滴答定时…...
BiRefNet:颠覆图像分割,AI黑科技再升级
BiRefNet:颠覆图像分割,AI黑科技再升级 BiRefNet 是一款超强的图像分割 AI 模型,精准度惊人✨,适用于医疗、农业、工业等多个领域🌍,让图像处理变得简单高效!快来体验这款黑科技吧!…...
编写一个简单的Iinput_dev框架
往期内容 本专栏往期内容: input子系统的框架和重要数据结构详解-CSDN博客input device和input handler的注册以及匹配过程解析-CSDN博客input device和input handler的注册以及匹配过程解析-CSDN博客 I2C子系统专栏: 专栏地址:IIC子系统_憧憬…...
ctfshow的sql注入解题思路171-211
ctfshow-SQL注入 web171:爆库名->爆表名->爆字段名->爆字段值 -1 union select 1,database() ,3 -- //返回数据库名 -1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema库名 -- //获取数据库里的表名 -…...
深入理解C语言中的静态库与动态库 —— 原理与实践
引言 在 C 语言编程中,库是预编译的代码集合,用于实现特定功能,以供其他程序使用。库可以分为静态库和动态库两种主要类型。静态库在编译阶段被链接到目标程序中,而动态库则是在运行时被加载。本文旨在深入探讨这两种库的工作原理…...
本地缓存库分析(一):golang-lru
文章目录 本地缓存概览golang-lru标准lrulru的操作PutGet 2q:冷热分离lruPutGet expirable_lru:支持过期时间的lruPutGet过期 总结 本地缓存概览 在业务中,一般会将极高频访问的数据缓存到本地。以减少网络IO的开销,下游服务的压…...
qt配置https请求
qt应用版本 windows 32位 先说下心理路程,你能遇到的我都遇到了,你能想到的我都想到了,怎么解决看这一篇就够了,从上午12点到晚上12点几乎没离开电脑(除了吃饭),对于openssl这种用的时候无感&am…...
C语言进阶——文件操作
一、文件的基本知识 1.1什么是文件 在程序设计中,一般谈的文件有两种:程序文件、数据文件。 程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执…...
MYSQL-查看用户权限语法(二十一)
13.7.5.21 SHOW GRANTS 语句 SHOW GRANTS [FOR user]此语句以GRANT语句的形式显示分配给MySQL用户帐户的权限,必须执行GRANT语句才能复制权限分配。 注意 要显示MySQL帐户的非特权信息,请使用SHOW CREATE USER语句。 参见第 13.7.5.12 节“ SHOW CREA…...
在MySQL中存储IP地址的最佳实践
文章目录 一、IP地址的格式二、存储IP地址的数据类型选择1. VARCHAR优点缺点 2. INT 或 BIGINT优点缺点示例 3. VARBINARY优点缺点示例 三、最佳实践建议1. 选择合适的数据类型2. 索引优化3. 数据验证4. 安全性考虑 四、Java支持五、结论 在现代网络应用中,IP地址是…...
Vite打包配置
Vite打包配置 1.项目启动自动打开网页 {"scripts": {"dev": "vite --open"} }2.base配置打包公共路径 配置base选项的作用主要是指定项目在开发或生产环境中的公共基础路径。这个配置项对于确保资源能够正确加载尤为关键,尤其是在…...
node集成redis (教学)
文章目录 前言一、安装redis二、可视化界面测试连接1.vscode安装插件 三、node代码编写1.先安装两个库(redis和ioredis)2.测试连接 (前提是你的redis服务器要启动起来) 总结 前言 在Node.js中集成ioredis是一个常见的做法&#x…...
江协科技STM32学习- P22 实验-ADC单通道/ADC多通道
🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝…...
RL学习笔记-马尔可夫过程
参考资料:蘑菇书、周博磊老师课程 在强化学习中,智能体与环境交互是通过马尔可夫决策过程来表示的,因此马尔可夫决策过程是强化学习的基本框架。 马尔可夫性质 指一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件…...
LeetCode Hot 100:动态规划
LeetCode Hot 100:动态规划 70. 爬楼梯 class Solution { public:int climbStairs(int n) {if (n 0)return 0;vector<int> dp(n 1);// 初始化dp[0] 1;// 状态转移for (int i 1; i < n; i) {dp[i] dp[i - 1];if (i > 2)dp[i] dp[i - 2];}return …...
使用Python制作雪景图片教程
如果你想用Python写一个程序来输出有关“深夜雪”的诗意文本或描述,可以通过简单的字符串输出来实现。以下是一个示例代码,展示如何用Python来描绘深夜雪的场景。 # 定义深夜雪的描述 description """ 夜幕降临,天空洒下银色…...
S-Function
目录 S-Function介绍 生成S-Function的三种常用手段 使用手写S-函数合并定制代码 使用S-Function Builder块合并定制代码 使用代码继承工具合并定制代码 S-Function介绍 我们可以使用S-Function扩展Simulink对仿真和代码生成的支持。例如,可以使用它们…...
如何具备阅读JAVA JDK虚拟机源码能力
源码位置https://github.com/openjdk/jdk 核心实现源码[部分截图] /* * Copyright (c) 1995, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistr…...
Python | Leetcode Python题解之第514题自由之路
题目: 题解: Test "godding" target "d"i 0left i lc 0 right i rc 0while Test[left] ! target:left - 1lc 1if left -1:left len(Test) - 1while Test[right] ! target:right 1rc 1if right len(Test):right 0prin…...
Docker 镜像下载问题及解决办法
Docker 镜像下载问题及解决办法 我在杂乱的、破旧的村庄寂寞地走过漫长的雨季,将我年少的眼光从晦暗的日子里打捞出来的是一棵棵开花的树,它们以一串串卓然不俗的花擦明了我的眼睛,也洗净了我的灵魂。 引言 在使用 Docker 时,用户…...
武汉新一轮疫情/360优化大师官方免费下载
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。1.项目背景分布式时滞表现出独特的空间性质,可模拟在特定时间段内通过一定数量的并行通道/路径分布的信号…...
a最先基智网站建设/2022网站快速收录技术
1.使用原因 近期公司在开发新的项目用到了elasticsearch ,因为项目框架用的spring Cloud所以依赖全用的是starter,从网上找的信息比较旧,并没有整合elasticsearch 5.x的内容。但是spring Boot升级到2.0以后就可以使用了。在这里把过程放出来&…...
成都网站设计网站/百度seo推广方案
创建与释放//backlog需要查询平台说明,在linux2.2以后 backlog就变成了已完成连接但未accept的队列的最大值(原来是处于syn状态的,现在换成sysctl 控制的参数tcp_max_syn_backlog)struct evconnlistener *evconnlistener_new(struct event_base *base, …...
客户关系管理的定义/网站seo思路
http://blog.csdn.net/libing403/article/details/73158972我们要讨论3个问题:fseek()和ftell()函数的工作原理、如何使用二进制流、如何让程序可移植。fseek()与ftell()的工作原理头文件:#include定义函数:intfseek(FILE * stream, long off…...
企业网站建设费如何列支/网络推广怎么找客户
这是悦乐书的第306次更新,第325篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第173题(顺位题号是733)。图像由二维整数数组表示,每个整数表示图像的像素值(从0到65535)。给定表示泛洪填充的…...
wordpress的标签有什么用/seo整站优化多少钱
一、前言 时间子系统中的tick device layer主要涉及kernel/time/tick-*相关的文件,本文的主要内容就是从high level层次(不纠缠在具体的每行代码)描述tick device layer的运作逻辑。 如果说每个.c文件是一个模块的话,我们可以首…...