如何在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元素数量
这个是你最关心的,我给你一步步说实操步骤,亲测有效:
- 先给你的HTTP请求加个JSON提取器:右键目标请求 → 「后置处理器」→ 「JSON提取器」。
- 在提取器的设置面板里填这些内容:
- 引用名称:随便起个好记的,比如
bookNameList,这是存储所有BookName值的变量前缀。 - JSON Path表达式:写
$..BookName,这个表达式会遍历JSON的所有层级,把所有叫BookName的元素都捞出来。 - 匹配数字:填
-1,意思是提取所有匹配到的元素,而不是只取第一个或者指定位置的。
- 引用名称:随便起个好记的,比如
- 这时候JMeter会自动生成几个变量:
bookNameList_1、bookNameList_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




