JMeter 的事务控制器是一个非常方便的工具,用于组织测试的不同部分并确定这些部分将如何出现在报告中。正如 Apache JMeter 的文档中所述:“事务控制器生成一个额外的样本,用于测量执行嵌套测试元素所花费的总时间。”
但这意味着什么?这个“额外样本”对您的 BlazeMeter 报告有什么影响?
如果您还不是非常熟悉这些功能,那么仅仅因为它是一个抽象的概念,可能会让人有点困惑。为了揭开这个话题的神秘面纱,我们将通过展示结果的各种示例来详细了解此功能,以准确了解它在不同场景中的行为。
这里讨论的所有内容都将围绕这个“生成父样本”的小复选框:
Creating a Basic JMeter Script
为了演示事务控制器及其父示例如何工作,让我们首先创建一个非常基本的 JMeter 脚本。 我们需要这个脚本包含在这个实验中的是:
A single Thread Group
A single Transaction Controller
Two HTTP Request samplers
A View Results Tree listener
将两个 HTTP 请求采样器放在事务控制器中,给每个采样器一个唯一的名称(我的是“标签 1”和“标签 2”),如下所示:
接下来,将每个采样器配置为只需点击 blazedemo.com:
事务控制器将为我们提供其中所有内容(我们的两个采样器)的执行时间,合并为一个“事务”。
让我们看看我们如何调整这个事务控制器来从测试报告中获得我们想要的。
Scenario 1: No Parent Sample
对于我们的第一个实验,我们将设置我们的事务控制器,以便通过确保“生成父样本”框未选中(禁用)来生成任何父样本:
保存测试计划,然后在执行测试时观察查看结果树侦听器。 注意我们的两个采样器是如何显示的:
我们看到了两个采样器,但有三个标签。 第三个标签是我们的“父样本”,即事务控制器本身。
不可避免的下一个问题当然是:我们不是禁用了生成父样本吗? 我们确实这样做了,因此父样本显示为附加的正常采样器,而不是实际的父样本。 别担心——当你看到第二个场景时,这会更有意义!
接下来,让我们在 BlazeMeter 中运行此测试,然后查看请求统计报告以了解标签的显示方式:
就像查看结果树一样,我们有三个标签,第三个代表事务控制器本身。
这是什么意思?
让我们回到 JMeter 文档的描述:“事务控制器生成一个额外的样本,用于测量执行嵌套测试元素所花费的总时间。”
换句话说,测试为两者生成了指标(平均响应、平均命中数/秒等):
事务控制器的各个内容(“标签 1”和“标签 2”)。
两个标签的组合;换句话说,从头到尾的完整“交易”,显示为第三项。
这很方便,因为它告诉我们事务控制器内所有内容的指标(包装起来就像是一个采样器),以及每个所述内容的指标。
结论:如果我们不启用父样本,则会报告整个交易和交易内容(子项)的指标。
Scenario 2: Generate Parent Sample
如果我们勾上:
脚本在其他方面保持不变; 我们只检查框,仅此而已。 再次保存测试计划,运行测试,并观察查看结果树监听器:
看看它是如何改变的? 我们现在只看到一个标签,我们可以点击它展开如下:
启用“生成父样本”选项现在只给我们一个标签而不是三个,它本身有两个子标签——我们的两个采样器。
父采样器现在显示为包含子采样器的父采样器,而不是单独显示为普通采样器。 因此,如果我们通过选中该框“生成父样本”,则意味着父样本将作为父样本出现在报告中,而不是作为第三个单独的项目。
将复选框视为“将父级视为报告中的实际父级”。 现在让我们看看请求统计报告是如何变化的:
一个标签——就是这样!
生成父样本意味着,出于报告目的,JMeter 将仅报告组合事务的指标; 它不会报告有关内容的详细信息。
结论:生成父样本将确保仅针对事务控制器的组合内容报告指标,而不针对其中的单个内容报告指标。
Advantages and Disadvantages of Generating a Parent Sample
您是否要生成父样本取决于您要为报告包含或排除的内容。考虑时请记住以下几点:
如果您的脚本有许多事务控制器,每个事务控制器中都有许多采样器,则生成父样本可以帮助整理报告。
生成父样本会使故障排除/调试变得不必要地困难。考虑到,在测试报告中,如果一个采样器失败,则整个事务控制器都将失败,因为所有内容都报告为一个标签。该报告不会指出哪个特定项目失败。因此,禁用父样本有助于识别故障点。
如果生成父采样器,测试报告会将事务控制器的内容视为“嵌入式资源”。 (这不仅适用于 BlazeMeter,而且适用于 JMeter 本身。)这是可以理解的误导。例如,如果您的测试遇到错误,您可能会发现由于事务控制器内的采样器失败而实际上发生的嵌入式资源的错误显示。这再次阻碍了故障排除,因此在查看任何此类错误时禁用生成父样本。
不生成父样本可能会扭曲某些指标的报告。
事务控制器生成一个额外的样本,用于测量执行嵌套测试元素所花费的总时间。
注意:选中“在生成的样本中包括定时器和前后处理器的持续时间”复选框时,时间包括控制器范围内的所有处理,而不仅仅是样本。
有两种操作模式:
(1) 在嵌套样本之后添加额外样本
(2) 附加样本被添加为嵌套样本的父级
生成的采样时间包括嵌套采样器的所有时间,不包括默认(自版本 2.11 起)计时器和前/后处理器的处理时间,除非选中复选框“在生成的示例中包含计时器和前后处理器的持续时间”。根据时钟分辨率,它可能比单个采样器加定时器的总和稍长。时钟可能会在控制器记录开始时间之后但在第一个样本开始之前滴答作响。最后同样如此。
生成的样本只有在它的所有子样本都成功时才被认为是成功的。
在父模式下,单个样本仍然可以在树视图侦听器中看到,但不再作为单独的条目出现在其他侦听器中。此外,子样本不会出现在 CSV 日志文件中,但可以保存到 XML 文件中。
在父模式下,可以将断言(等)添加到事务控制器。但是,默认情况下,它们将应用于单个样本和整个交易样本。要限制断言的范围,请使用简单控制器来包含示例,并将断言添加到简单控制器。父模式控制器当前不正确支持任一类型的嵌套事务控制器。