Apache JMeter教程

要负载测试您的Web应用程序吗? 然后,您应该了解Apache JMeter !

该JMeter教程介绍了基本概念以及如何创建测试计划以及如何执行它以对应用程序进行基准测试。

这是我在Disy的Tech-Blog上的文章的交叉张贴 -谢谢您让我在公司时间写文章! 同时还要感谢我的同事Boris Terzic和Karsten Schnitter指出了有问题和遗漏的位。 尽管如此,所有错误当然都是我的。

认识JMeter

使用JMeter,您可以创建和执行测试计划 ,这些计划被组织为树。

基本要素

计划执行的入口点是线程组 ,其中每个线程代表一个用户。 控制器是测试的关键。 它们是线程组或其他控制器的子级,有两个变体,定义发生了什么以及如何发生:

  • 取样关心的是发生什么 ,他们发送请求(HTTP,FTP,JDBC,你有什么),并等待响应。 记录每个单独的交换(即请求,响应,响应时间等),并将其称为样本
  • 逻辑控制器确定采样器是如何执行的,它们提供像分支和循环常见的控制结构。
一个非常基本的JMeter测试计划

一个非常基本的JMeter测试计划

虽然可以运行仅包含这些要素的基准,但除最琐碎的测试计划外,其他任何要素都需要其他基准。

进阶元素

像线程组一样, 测试片段是测试计划的子代,并且包含构成测试一部分的子树。 与线程组不同,它们不直接执行。 相反,它们包含在模块控制器中 。 这种结构可以重用。

配置存储控制器要引用的变量,管理cookie,在测试执行期间充当缓存等。 处理器后处理器连接到采样器,并在采样器之前或之后执行。 他们可以修改样本将要使用的变量或解析响应以存储一些信息。 您可以使用断言来验证正在运行的测试的属性,例如,响应的主体不为空。

人类在浏览网站时会暂停,您可以使用计时器进行模拟。 计划可以在有或没有计时器的情况下执行。

最后,使用侦听器收集和可视化样本。

更高级的JMeter测试计划

更高级的JMeter测试计划

您可以在大多数节点的上下文菜单中的添加下找到这些项目。 它们是构建测试计划的基础。

他们的交互非常直观,但是我仍然建议您仔细阅读作用域规则 。 如果您使用计时器,一定要这样做,因为这里存在几种直观的解释,只有一种是正确的。 ;-)

制定测试计划

我发现通过记录与站点的交互来开始创建测试计划,然后编辑和构造记录的请求非常有用。

记录

JMeter可以充当代理,然后将所有请求记录为采样器。 设置很简单:

  1. 将记录器添加到工作台 :您将在“ 非测试元素”下找到HTTP(S)测试脚本记录器 。
  2. 选择在哪里收集采样器 :可以选择测试计划的大多数子级作为目标控制器 (例如线程组,片段,控制器)。

现在,您只需要编辑浏览器的代理设置即可将其指向JMeter,并在记录器上单击“开始 ”后,所有请求都将转换为采样器。

熟悉了自己之后,请尝试这些功能。

极限记录

您应该通过指定要包括的 URL模式要排除的URL模式来限制将要记录的内容。 如果定义了至少一个包含模式,则仅记录与这些正则表达式匹配的请求。 如果一个请求至少与一个排除模式匹配,则不会记录该请求。

您可能想要添加建议的排除项并对其进行改进以仅记录相关请求。 (有关如何使JMeter获取嵌入式资源的信息,请参见下面的“配置”。)

重用请求

基准测试的应用程序可能不会在固定的URL下运行,例如,当另一个开发人员在其计算机上运行它时。 因此,使请求可重用很重要。

为此,记录仪创建的采样器不得包含硬编码的连接详细信息。 这可以通过将配置节点HTTP Request Defaults添加到将包含记录的采样器的节点并输入与本地配置匹配的值来实现。 然后,JMeter将这些字段留空。

记录暂停

为了记录实际的暂停,JMeter可以使用您在与网站进行交互时所做的暂停时间自动创建计时器。 将一个计时器添加到记录器,但不要对延迟进行硬编码,请输入$ {T}。 该变量将替换为自上次响应以来经过的挂钟时间。

(第一个记录的请求的值可能很长。请务必检查一下!)

小组采样器

将采样器分组为逻辑组件可帮助您掌握最新信息。 在“ 分组”下,我通常选择“ 将每个组放入新的事务控制器中” ; 请参阅下面的组为什么。

根据测试站点的结构,您认为属于一起的请求可能会分为不同的组。 同样,独立的请求可能会以相同的结果结束。 两者都可以在编辑时固定。 但是将请求分为不同的组,我发现快速重新启动记录器更为实用。 然后,JMeter会将新请求添加到新组中。

编辑中

以我的经验,手动编辑记录的采样器通常是必要的,或者至少是非常有益的。

在编辑测试计划时,通常会运行它。 请注意,所有单个节点都可以从其上下文菜单或按钮栏中激活和停用。 添加一些侦听器以查看JMeter正在测量的内容–从查看结果树开始,然后在table中查看结果 。

凭据变化

如果您的应用程序允许用户登录,则您可能希望测试计划执行相同的操作。 并使用不同的用户帐户。 您可以通过告诉JMeter用用户名,密码和其他所需的CSV文件中的数据填充登录请求来实现此目的。

首先,更改记录的登录请求,以使用$ {username}和$ {password}之类的变量,而不是硬编码的值。

然后将CSV数据集配置添加到包含登录请求的节点。 在配置中,根据文件结构设置变量名 ,例如用户名,密码。

使用不同的凭证登录

使用不同的凭证登录

动态请求

请求可能必须包含来自先前响应的某些信息,并且不能与硬编码值一起使用。 为了识别这些情况,可能需要重新启动应用程序,使用JMeter执行采样器,并观察是否所有请求都按预期得到了答复。 还要查看应用程序的日志,以查看它是否显示问题迹象。

如何创建动态响应本身就是一个主题,但这可以帮助您入门:

  • 后处理器XPath提取器可用于将响应的一部分存储在变量中。
  • 使用$ {var_name},变量几乎可以在任何地方使用。
  • 如果需要对值进行进一步处理才能使其可用,请考虑使用BeanShell PostProcessor ,它将使您能够在Rhino中执行Java或JavaScript代码。

BeanShell脚本可以访问几个参数。 变量存储在Map <String,String> vars中,还可以使用名为log的log4j-Logger。 可以通过选项 〜> 日志查看器或右上角的黄色三角形激活日志来检查输出。

使用后处理器从响应中提取变量

使用后处理器从响应中提取变量

团体

我认为隔离在不同情况下可以重复的部分是一种很好的做法。 主要示例是登录和注销,应将它们放在自己的组中。

这里我不是指线程组,而只是“一堆控制器”。 这可以通过将所有控制器移动到简单控制器或事务控制器中来实现。 这些不会更改执行,而是通过收集属于一起的控制器来提供有用的抽象。 给它起一个好名字,这说明一切!

我总是为此使用事务控制器,以便可以获取所包含的采样器执行所需的总时间。 为此,您需要激活事务控制器中的生成父样本复选框。

在我确认一个小组完全按照我的要求做之后,我通常将其移动到一个正确命名的测试片段中,这样我就可以轻松地从测试计划的不同部分使用它,而无需复制粘贴它。

构成

正确的测试计划的最后一步是组成您记录,编辑和结构化的不同部分。 如果将各个组封装在测试片段中,请回想起使用模块控制器来引用它们。

请记住,线程组中的每个线程代表一个用户,因此从创建一些线程组开始。 如果您的应用程序需要登录,则这应该是要执行的第一个实际操作。

然后,您可能想要添加一些逻辑控制器,使您可以排列记录的片段,以便它们对真实的用户行为进行建模。 可能包括一些随机元素,例如随机顺序控制器 。 如果这样做,请确保样本大小足够大,不会被一些异常值所歪曲。

配置中

阅读这篇超短篇文章,了解如何使JMeter的行为更像真实的浏览器 。

为了让JMeter自动并行地检索嵌入式资源,您必须在“ 来自HTML文件的嵌入式资源”下更改每个HTTP请求的设置。 这将执行您在记录期间排除的所有请求。

似乎没有必要先排除请求,然后将JMeter配置为自动执行它们。 区别在于,JMeter通过这种方式将使用缓存来避免不必要的请求,并使用池并行而不是连续地执行所需的请求。 这可以模拟浏览器的行为方式并带来更实际的测量结果。

由wplynn在CC-BY-ND 2.0下发布

由wplynn在CC-BY-ND 2.0下发布

标杆管理

只要您正在编辑测试计划,就可以按照自己喜欢的任何方式执行测试。 但是,如果您想真正开始进行基准测试,则需要考虑一些其他细节。

阅读以下两个最佳实践列表,以了解该做什么和不该做什么:

  • 最佳实践-JMeter文档 (至少17.7)
  • JMeter最佳实践– BlazeMeter

此处未提及,但绝对必要的是增加JMeter可用的堆空间。 一种简单的实现方法是在jmeter.sh的开头添加JVM_ARGS =”-Xms2g -Xmx2g”(或任何有意义的堆大小)。 确保监视日志以发现OutOfMemoryExceptions。

下一步

官方文档详尽无遗。 您可能要检查的重要入门主题是:

  • 测试计划的要素
  • 组件参考
  • 帮帮我! 我的老板要我对我们的应用程序进行负载测试!

如何编写和执行基准测试很大程度上取决于您要实现的目标。 比较同一应用程序的不同变体(例如,以不同的垃圾收集设置运行)与试图获取绝对数(例如,对于SLA)非常不同,并且比其容易得多。

本教程只是为了帮助您入门。 如果业务决策将基于基准结果,请务必阅读本主题。

  • Stack Exchange上的资源列表 :软件质量保证和测试
  • JMeter负载测试博客和 BlazeMeter上的 资源
  • 贝莫·艾琳(Jacko Erinle)的JMeter Cookbook
  • Gil Tene 如何不测量延迟

翻译自: https://www.javacodegeeks.com/2015/10/apache-jmeter-tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浏览器在线PDF预览取消下载按钮

业务场景:需要在线PDF下载的功能,刚开始用的是第三方的PDF.JS,按照网上的方法操作,排查,发现没有作用,经过和后端小伙伴沟通,原来这个地址是浏览器PDF预览。 目录 浏览器PDF取消办法: 在需要URL地址后边加上代码 PDF.JS取消下载的办法:</

Android深度探索(卷1)HAL与驱动开发 读书笔记(第四章)

第四章 源代码的下载和编译 本章主要介绍使用Git下载两套源代码。一套是Android 源代码&#xff0c;另一套是Linux 内核源代码。主要介绍如何下载和编译Android源代码和Linux内核源代码。 4.1下载Android源代码的环境 第一步&#xff1a;创建一个存放下载脚本文件repo的目录 #…

【Java从入门到天黑|04】JavaSE入门之数组

目录 数组概述 数组的四个基本特点: 数组声明创建 1、声明数组 2、创建数组

stage3d 骨骼优化

用过Away3D的朋友估计都会发现&#xff0c;&#xff0c;在Away3D里面使用超过一定骨骼数量的角色&#xff0c;当场景里面角色的数量稍微多一点&#xff0c;整个场景就会很卡。 对于这个现象&#xff0c;我之前得出的结论是。Stage3D的VC缓存器数量的限制&#xff0c;造成了对需…

morphia_Morphia和MongoDB:不断发展的文档结构

morphia在我先前关于Morphia的帖子中 &#xff0c;我介绍了一些典型用法&#xff0c;并提到了一些已知问题的警告和解决方法。 我展示了使用Morphia的工作有多么容易&#xff0c;以及它与Java世界的交互方式有多么干净。 为了跟进该帖子的后续内容&#xff0c;我将讨论如何处理…

PC端网页vue项目,页面滚动点击悬浮按钮最快的方法

业务场景,可视化大屏右下角添加一个悬浮按钮,点击按钮页面滚动到顶部。 经过实验,使用锚点是最简单的办法。 方法一:锚点 给顶部的合适位置添加一个 name="top"的锚点,maodianTop用于控制样式,可以不设置。 <a class="maodianTop" name="…

Echats给柱状图及提示文字添加百分号(%)的解决办法

业务需求&#xff1a;给柱状图添加百分号。 目录 柱状图上添加%效果图 悬浮标签添加%效果图&#xff1a; 刚开始从后台取的数据带%&#xff0c;我这边取这个值的时候显示undifined&#xff0c; 后来就让这哥们把这类的数据从数据库把%去掉。这样我这边就取到了数据&#xff0…

前端使用linux命令更新项目生产包与测试包命令

业务需求&#xff1a;把vue开发的项目打成dist.zip文件&#xff0c;丢到服务器去&#xff0c;通过域名进行访问。 首先登录云管平台的账号和密码&#xff0c;找到对应的服务器&#xff0c;然后连接到堡垒机。 在命令行进入到域名下的地址及目录。 切换到测试文件夹 点击左上角…

servle 3.0 新特性之一 对上传表单的支持

1. 上传 * 上传对表单的要求&#xff1a; > method"post" > enctype"multipart/form-data"&#xff0c;它的默认值是&#xff1a;application/x-www-form-urlencoded > <input type"file" name"必须给"/> * 上传Servle…

manifest.mf._MANIFEST.MF和feature.xml版本控制规则

manifest.mf.我永远都忘记了OSIF插件和功能的 MANIFEST.MF和feature.xml中的依赖项声明的规则是什么。 谷歌搜索经常导致沮丧而不是答案。 因此&#xff0c;因为今天我实际上找到了这些规则的简要列表&#xff0c;所以我想在这里重新发布它们&#xff0c;并进行一些较小的修改以…

CSDN学习神器——CSDN浏览器助手测评体验

导读&#xff1a;大家好&#xff0c;我叫孙叫兽&#xff0c;本期内容给大家分享一下CSDN浏览器助手这款插件&#xff0c;看看最新版的插件已经比较完善了&#xff0c;还有一些可以优化的地方。下面简单进行体验一把最新版&#xff01; 体验时间&#xff1a;2021年5月31日。 目录…

CVE-2016-0143 漏洞分析(2016.4)

CVE-2016-0143漏洞分析 0x00 背景 4月20日&#xff0c;Nils Sommer在exploitdb上爆出了一枚新的Windows内核漏洞PoC。该漏洞影响所有版本的Windows操作系统&#xff0c;攻击者利用成功后可获得权限提升&#xff0c;微软在4月补丁日修复了该漏洞。 0x01 漏洞分析 Nils Sommer并没…

HB-X打不开的解决办法

导读&#xff1a;今早点击HB-X这款编译器的时候&#xff0c;点击快捷键和图标按钮一点反应都没有。死活打不开。 点击的时候一点提示都没有&#xff0c;重启电脑打开也是如此。 解决办法&#xff1a; 关机重启&#xff0c;一定要关机再重启。 其它情况请参考这个帖子&#xff…

Spark 101:它是什么,它做什么以及为什么起作用

最近&#xff0c;许多大数据的讨论都使用了新名称。 有人将流行的新来者Apache Spark ™视为Hadoop的更易用&#xff0c;功能更强大的替代品&#xff0c; Hadoop是大数据的首选原始技术。 其他人认为Spark是Hadoop和其他技术的有力补充&#xff0c;它具有自己的优点&#xff0c…

【iCore3 双核心板_ uC/OS-III】例程五:软件定时器

实验指导书及代码包下载&#xff1a; http://pan.baidu.com/s/1eSHenjs iCore3 购买链接&#xff1a; https://item.taobao.com/item.htm?id524229438677 转载于:https://www.cnblogs.com/xiaomagee/p/5453762.html

前端 vue 在可视化大屏领域的工作实践

导读:最近入职了一家互联网公司,主要是做物联网及互联网解决方案方向,我上来就接手了这个项目,是一个可视化管理地图,主要用于某国企物业的安全预警的职能,说来也比较倒霉,刚来这公司,公司做这个项目的前端和后端都跑路了,然后让我一个月给他整改完,说是重构吧,还不…

JavaScript GetAbsoultURl

var img document.createElement(A);img.src "/img/weixin.jpg"; //设置相对路径给Image, 此时会发送出请求url img.src; //此时相对路径已经变成绝对路径img.src null; //取消请求console.log(url);转载于:https://www.cnblogs.com/shidengyun/p/5453901.html…

【Java从入门到天黑|05】JavaSE入门之面向对象(上)

面向过程&面向对象 语言的进化发展跟生物的进化发展其实是一回事,都是”物以类聚”。相近的感光细胞聚到一起变成了我 们的眼睛,相近的嗅觉细胞聚到一起变成了我们的鼻子。 语句多了,我们将完成同样功能的相近的语句,聚到了一块儿,便于我们使用。于是,方法出现了! …

java自建ocr完整示例_Java 7:完整的invokedynamic示例

java自建ocr完整示例我当前的Java 7系列中的另一个博客条目。 这次它处理的是invokedynamic&#xff0c;这是JVM上用于方法调用的新字节码指令。 invokedynamic指令允许呼叫站点与呼叫接收者之间的动态链接。 这意味着您可以将正在执行方法调用的类链接到在运行时正在接收调用的…

【Java从入门到天黑|05】JavaSE入门之面向对象(下)

修饰符 1、static修饰符 1、static变量 在类中,使用static修饰的成员变量,就是静态变量,反之为非静态变量。 静态变量和非静态变量的区别 静态变量属于类的,"可以"使用类名来访问,非静态变量是属于对象的,"必须"使用对象来访问. 1 public class Student{…