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,一经查实,立即删除!

相关文章

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

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

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

业务需求&#xff1a;把vue开发的项目打成dist.zip文件&#xff0c;丢到服务器去&#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…

【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 在可视化大屏领域的工作实践

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

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

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

前端工程师直线学习路径

想自学前端?却不知道学习路径。报个班吧,又怕被坑。一张学习前端路径是带你少走N条弯路。最近两年,前端技术和三大框架地位趋于稳定,推荐这个前端开发学习路径。 新手自学前端的五大阶段。 第一阶段 想成为一名前端开发人员,第一步就是网页布局和效果实现。这时候你需要学…

VS code常用插件推荐(总结整理篇)

简介 vscode是微软开发的的一款代码编辑器,就如官网上说的一样,vscode重新定义(redefined)了代码编辑器。当前市面上常用的轻型代码编辑器主要是:sublime,notepad++,editplus,atom这几种。比起notepad++、editplus,vscode集成了许多IDE才具有的功能,比起它们更像一个…

Python全栈开发之3、数据类型set补充、深浅拷贝与函数

转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5466082.html 一、基本数据类型补充 set是一个无序而且不重复的集合&#xff0c;有些类似于数学中的集合&#xff0c;也可以求交集&#xff0c;求并集等&#xff0c;下面从代码里来看一下set的用法,如果对这些用法不太熟悉的话…

拿着5家offer的Java,对面试官做了什么?

大家好&#xff0c;我是孙叫兽。本期分享内容从Java初级开始说起&#xff0c;来讲一下要想拿到offer&#xff0c;你必须要做哪些充足准备&#xff01; 先从初级Java开始&#xff0c;当你还是一个初级Java的时候&#xff0c;要想拿到offer&#xff0c;首先要关注自己的简历&…

进程与线程的一个简单解释

进程&#xff08;process&#xff09;和线程&#xff08;thread&#xff09;是操作系统的基本概念&#xff0c;但是它们比较抽象&#xff0c;不容易掌握。 最近&#xff0c;我读到一篇材料&#xff0c;发现有一个很好的类比&#xff0c;可以把它们解释地清晰易懂。 1. 计算机的…

前端面试官常问javaScript编程题,隔壁王大爷看了都会了

目录 1.数组排序。 2.数组元素的去重&#xff1b; 3.用递归的方法求数组的求和&#xff1b; 4.防抖节流的思路。 5.深拷贝、浅拷贝&#xff1b; 6.做一个10秒的倒计时&#xff1b; 7.setTimeout()和setInterval()的使用以及区别 导读&#xff1a;一些常见的前端面试官会让…

(五)Struts2 标签

所有的学习我们必须先搭建好Struts2的环境&#xff08;1、导入对应的jar包&#xff0c;2、web.xml&#xff0c;3、struts.xml&#xff09; 第一节&#xff1a;Struts2 标签简介 Struts2 自己封装了一套标签&#xff0c;比JSTL 强大&#xff0c;而且与Struts2 中的其他功能无缝结…

HarmonyOS常见问题解答

学习资源主要分享 一、解答学习者的担心:手机/生态设备数量 、应用数量

推荐几十本投资书籍、互联网书籍及热门查看流量的工具

工欲善其事必先利其器,今天孙叫兽给大家分享一下互联网运营的书籍、投资的书籍及一些查看抖音、微信公众号等后台数据的工具,个人感觉还是很实用的,内容有点多,不知道的可以根据图中的文字进行搜索。 互联网运行推荐阅书籍 投资理财的书籍 这里仅仅提供书籍的名称,根据书名…

Java Swing模型视图适配器介体

通常&#xff0c;我基于Spring Framework构建Java应用程序。 但是&#xff0c;最近有人要求我使用与语言无关的MVC框架PureMVC为客户端实现Java桌面应用程序&#xff0c;因此以下是我在Java Swing中为PureMVC进行员工管理展示的演示实现。 如果您想继续&#xff0c;可以在GitHu…

程序员跳槽指南

找工作是件非常重要的事情,它直接影响你1~2年,间接影响你3~5年的人生。⼀个潜在的机会会让你少奋斗很多年,而一次冲动的离职,会让你和千万财富错失交臂。 忘掉那些随地乱扔的小广告,还有从几十个样本做出来的所谓调查报告,换工作不是⼀场说走就走的旅行,而是⼀个深思熟虑…

netbeans 源文件_具有NetBeans,WebLogic 12c,JPA和MySQL数据源的Arquillian

netbeans 源文件您可能已关注我的文章&#xff0c;该文章介绍了如何使用嵌入式GlassFish测试更复杂的场景&#xff08; 第I部分/第II部分 &#xff09;。 在我要做的事情上&#xff0c;下一步是使此设置与最新的WebLogic 12c一起使用。 入门 按照我的前两个帖子的入门部分中的…