使用 JMeter(或者 BlazeMeter)创建的性能测试脚本也可以算作软件。这也就是为什么性能测试脚本也会出现错误导致 Bugs。
本文中将尝试使用不同的方式来对 JMeter 脚本进行 Debug,包括 Debug 各种 sampler、post-processor 以及 JSR223 sampler。可以根据下面的目录来阅读整篇或者只阅读感兴趣的部分:
- 如何进行 JMeter 测试脚本的 Debug?
- 如何使用 JMeter 的 Debug Sampler?
- 如何使用 JMeter 的 Debug PostProcessor?
- 使用 JSR223 Sampler 进行 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”,并添加两个变量,变量名和值如下表所示:
JMeter Test Plan 中的变量名 | JMeter Test Plan 中的变量值 |
protocol | https |
host | deckofcardsapi.com |
最后将线程组的名称修改为 “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
- 添加一个 HTTP Request,在 JMeter 中,一个 HTTP Request Sampler 可以通过右击线程组并且选择 ”Add => Sampler => HTTP Request“ 来添加。
添加的 HTTP Request 默认是 GET 方式;需要将这个 Request 修改为 Shuffle。 - 接下来提供两个变量 protocol∗和∗{protocol}* 和 *protocol∗和∗{host} 填写在 HTTP Request 中的 Protocol 和 Server name or IP 当中。请求的路径为:
/api/deck/new/shuffle/ - 现在,我们可以在 ”Send Parameters“ 表中添加 deck_count 变量,并将其值设置为 1。整个 Test Plan 如下截图所示:
需要注意的是发起 POST 请求设置的内容与上面完全一致。
当前 API 会返回一个 JSON 格式的数据,我们可以使用 JSON Extractor 组件 ”Post- Processor“ 来提取响应结构中的值并保存在 JMeter 变量中,根据提供的 API 文档,我们可以使用 JSON Path 表达式提取我们所需要的值:
$.deck_id
- 要查看变量的状态,我们需要在 Shuffle 请求后添加一个 Debug Sampler 组件,并命名为 “After Shuffle Debug Sampler”。