如何对 Apache JMeter 测试脚本进行 Debug?

如何进行 JMeter 测试脚本的 Debug

JMeter 提供了多种工具来进行性能测试脚本的 Debug。例如,Debug 相关的用例其实就是获取你脚本中指定变量的值,它可以在任何时候获取 JMeter 脚本中的 JMeter 变量定义的内容,因此你识别哪些存储在变量中的、可能导致以外错误的非期望值。

  你可以使用如下两个 JMeter 组件来对性能测试脚本进行 Debug:

  ·Debug Sampler

  · Debug Post-Processor

  Debug Post-Processor 和 Debug Sampler 的比较

  Debug Sampler 组件和 Debug Post-Porcessor 组件都可以在 View Result Tree(查看结果树)组件中查看到变量的值。

  当你在命令行运行 JMeter 脚本时,Debug 功能是无法使用的。Debug 功能仅支持在 GUI(图形界面) 模式下使用。

  Debug Sampler 组件和 Debug Post-Porcessor 组件一个最大的区别是 Debug Post-Porcessor 可以用来获取上一级 Sampler 中的属性值。在 View Result Tree 中,Post-Processor 的结果嵌套在上一级 Sampler 下面。

  另外,Debug Post-Porcessor 组件还包含了一个额外的属性,名为 “Sampler properties”,默认值为 true。

  如何使用 JMeter 的 Debug Sampler?

  我们将使用 deckOfCards 的 API 来演示 JMeter 的 Debug 功能,需要注意的是这些公共 API 仅供学习使用,请不要频繁调用。

  步骤一:创建一个 Test Plan

  首先,我们创建一个使用 JMeter 内置的 Functional Testing Test [01] 模板来创建一个  JMeter Test Plan,Team 可以使用这个 JMeter 模板来实现 API 功能测试

  这个模板包含了一个 Test Plan,一个 Thread Group 和一个 View Result Tree 组件,如下图所示:

接着保存并重命名测试计划的名称为 “Debugging in JMeter”,并添加两个变量,变量名和值如下表所示:

 

最后将线程组的名称修改为 “Deck of Cards”。

 

步骤二:添加一个 Debug Sampler

  现在可以选中线程组点击左键添加一个 JMeter ”Debug Sampler“ 组件,并将名称修改为 ”Before Everything Debug Sampler“。

  这个 Debug Sampler 默认仅用来显示 JMeter 变量,可以通过更改 JMeter 和 System 属性的标志值来显示它们。

如何查看 Debug Sampler 的结果?

  接着保存测试计划并执行。就可以在 View Result Tree 组件中当中选中并查看 JMeter Debug Smapler 的结果了,JMeter 变量值会在 Response Data 中显示。

你可以查看在 Test Plan 中定义的 protocol 和 host 变量的值也被打印出来。

  调用 HTTP 请求之后 Debug JMeter 变量

  接着我们继续来 Debug JMeter 脚本。我们将使用 deckofcards.com 的 API。它是一个免费的且仅供学习使用的网站。

  我们将会创建一个 GET 请求并在这个请求后面添加一个 Debug Sampler 组件。通过脚本中变量的值来代表脚本的新的”状态“

  可以通过调用 deckofcards 的 API 来创建一个新的 deck of cards,URL和响应值在 deckofcards.com 网站上查看,如下所示。

 

接下来的几个步骤将使用 JMeter 来调用 API。

  1、添加一个 HTTP Request,在 JMeter 中,一个 HTTP Request Sampler 可以通过右击线程组并且选择 ”Add => Sampler => HTTP Request“ 来添加。

  添加的 HTTP Request 默认是 GET 方式;需要将这个 Request 修改为 Shuffle。

  2、接下来提供两个变量 protocol?和?{protocol}* 和 *protocol?和?{host} 填写在 HTTP Request 中的 Protocol 和 Server name or IP 当中。请求的路径为:

  /api/deck/new/shuffle/

  3、现在,我们可以在 ”Send Parameters“ 表中添加 deck_count 变量,并将其值设置为 1。整个 Test Plan 如下截图所示:

需要注意的是发起 POST 请求设置的内容与上面完全一致。

  当前 API 会返回一个 JSON 格式的数据,我们可以使用 JSON Extractor 组件 ”Post-      Processor“ 来提取响应结构中的值并保存在 JMeter 变量中,根据提供的 API 文档,我们可以使用 JSON Path 表达式提取我们所需要的值:

  $.deck_id

 4、要查看变量的状态,我们需要在 Shuffle 请求后添加一个 Debug Sampler 组件,并命名为 “After Shuffle Debug Sampler”。

5、如果现在执行脚本,新创建的变量 “deckId” 的值也将显示在响应中。

 

这样我们可以查看到所有 user-defind 定义的变量的值,可以帮助我们去判断或者识别脚本中的问题。

  如何打印出 JMeter 属性值和 System 属性值

  JMeter 中有很多默认设置的属性。在大多数情况下没有必要去改变它们,但是在某些特殊的情况下你需要去改变它们的值。

  对于系统属性值也是一样,这些属性有时仍有可能导致性能脚本失败。比如默认的 SSL 设置不适合测试。

  更改 JMeter 属性的最简单方法是通过更改 JMeter Debug Sampler 中的相关设置来打印这些值。这样我们可以将当前 JMeter 属性和 System 属性的值与期望的值进行比较,并修复问题。修改后的 JMeter Debug Sampler 的设置示例如下所示:

 为了调试JMeter脚本,我们将执行脚本。由于我更改了第二个 Debug Sampler 的设置,这些 JMeter 属性值 和 System 属性值会在响应中显示。

如何使用 JMeter 的 Debug PostProcessor?

  PostProcessor 在 JMeter 中总是后执行的。比如在 HTTP 请求完成之后才会执行。Debug PostProcessor 组件就是用于具体查看与其嵌套的父采样器相关的属性。

  在接下来的例子中,你将会学习如何使用 Debug PostProcessor 来检查脚本中的值,以便进行脚本调试。

 

使用 Debug PostProcessor 的准备工作

  在当前例子中将使用调用 deckofcards 的 HTTP GET 请求方式并且路径为 draw 的接口。

  deckofcards 是一组免费的公共 API,为了避免过载。将在下一次调用之前添加一个定时器。draw  输入和输出如下所示。

添加了 draw 接口后的测试计划如下所示:

 

我们可以使用 JSON 提取器提取 remaining 的值,并使用 Debug PostProcessor 打印出来。因此,首先添加 JSON 提取器,以提取名为 remaining 的变量,并为其提供以下 JSON 路径表达式:

  $.remaining

  具体如下图所示:

如何在 HTTP Request 中添加 Debug Post-Processor 组件

  Post-processors 需要添加在 sampler 中。在本例中我们将在 Draw 这个 HTTP Sampler 中添加一个 Debug Post Processor。

  可以右击 Draw HTTP Request 选择 “Add -> Post Processors -> Debug PostProcessor” 来添加一个 Debug Post Processor。

  如果我们在完成上述步骤后运行脚本,我们将看到 Sampler 属性和 JMeter 变量在响应中输出。输出还将显示用于方法调用的路径。这个路径很重要,因为这里的错误可能会导致脚本失败。 Draw API 调用存储在用户定义的变量中的值。如果变量的值不正确,则会导致脚本失败。

  执行脚本,输出结果如下:

 

使用 JSR223 Sampler 进行 Debug

  添加一个 JSR223 Sampler 也可以对脚本记性 Debug,JSR223 Sampler 的首要作用是执行你提供的代码,但是你可以通过代码来获取脚本运行时的变量,JSR223 Sampler 支持使用多种 JVM 语言,包括 Java 和 Groovy。

  我已经在当前线程组中添加了一个 JSR223 Sampler,该 Sampler 默认的语言是 Groovy,在本例中也将使用 Groovy。

  我们可以简单地使用以下代码行将用户定义的变量 deckId 和变量 remaining 变量打印到 JMeter 控制台:

log.info("DeckId:" + vars.get("deckId"))
  log.info("Remaining: " + vars.get("remaining"))

JSR223 Sampler 内容如下图所示:

通过执行脚本,我们可以在日志中看到这些变量值。

  JMeter 日志中打印的结果的屏幕截图如下所示。您可以看到 JMeter 测试脚本中定义的变量的内容,以便进行调试。这个结果的截图还可以帮助确定脚本中的错误。

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值