You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Extractor(Json/CSS/XPath)及JMeter JSON提取器中获取匹配元素总数

如何在各类提取器中统计匹配元素数量(含JMeter JSON提取器实操)

嘿,刚好之前帮同行处理过类似的需求,我来给你拆解清楚怎么操作,不管是通用的XPath/CSS提取器,还是你重点问的JMeter JSON提取器,都给你说透。

一、XPath/CSS选择器提取器的元素数量统计

不管是用XPath还是CSS选择器抓元素,要统计匹配总数其实很直观:

  • XPath提取器:直接用count()函数就行。比如你要统计所有<book>标签的数量,就写count(//book),执行后返回的就是匹配到的元素总数,大部分支持XPath的工具(比如爬虫框架、测试工具)都认这个语法。
  • CSS选择器提取器:如果工具支持执行JS逻辑(比如某些浏览器插件、爬虫工具),可以用document.querySelectorAll('.book-item').length来获取匹配元素的长度;要是工具本身有提取器配置项,很多会直接提供“返回匹配数量”的勾选框,勾上就能拿到总数,不用自己写代码。

二、JMeter JSON提取器统计BookName元素数量

这个是你最关心的,我给你一步步说实操步骤,亲测有效:

  1. 先给你的HTTP请求加个JSON提取器:右键目标请求 → 「后置处理器」→ 「JSON提取器」。
  2. 在提取器的设置面板里填这些内容:
    • 引用名称:随便起个好记的,比如bookNameList,这是存储所有BookName值的变量前缀。
    • JSON Path表达式:写$..BookName,这个表达式会遍历JSON的所有层级,把所有叫BookName的元素都捞出来。
    • 匹配数字:填-1,意思是提取所有匹配到的元素,而不是只取第一个或者指定位置的。
  3. 这时候JMeter会自动生成几个变量:
    • bookNameList_1bookNameList_2...分别对应每个匹配到的BookName值;
    • 核心变量bookNameList_matchNr,这个就是你要的总匹配数量!后续在请求、断言或者BeanShell脚本里直接用${bookNameList_matchNr}就能调用这个数值。

举个实际的例子,假设你的接口返回的JSON是这样的:

{
  "library": {
    "shelves": [
      {"books": [{"BookName": "Java编程思想"}, {"BookName": "Python核心编程"}]},
      {"books": [{"BookName": "深入理解计算机系统"}]}
    ]
  }
}

$..BookName作为JSON Path,匹配数字填-1,那么bookNameList_matchNr的值就是3,刚好是所有BookName的数量。

另外给你个小技巧:如果你只需要数量,不想存所有BookName的值,可以直接用JSON Path的length()函数,把表达式写成$..BookName.length(),匹配数字设为1,这时候引用名称对应的变量(比如${bookTotal})直接就是数量,一步到位,更高效。

内容的提问来源于stack exchange,提问作者Mahsum Akbas

火山引擎 最新活动