如何在JMeter中使用CSS/jQuery提取器


解析和提取值最方便的方法之一JMeter响应采样器是使用CSS/jQuery Extractor。CSS/jQuery提取器是一个后处理器,它通过常用的语法来提取请求的节点并将解析后的值存储到给定的变量中,从而提供了灵活性。通过使用指定的CSS或jQuery定位器从响应或JMeter变量中提取所有匹配的值,该提取器可以应用于请求,这些值可能会在随后的请求中使用。

使用CSS/jQuery提取器

让我们拿着blazedemo.comweb应用程序(我们通常的演示)来展示CSS/jQuery提取器的运行。这个网络应用程序显示了一个简单的旅行社,它根据指定的出发和目的地城市获取航班数据。让我们假设我们想要基于城市的组合动态搜索不同的航班。

“那个”寻找航班按钮向“/reserve.php”端点发送一个请求从端口“还有”toPort参数。

The ‘Find Flights’ button sends a request to ‘/reserve.php’ endpoint with ‘fromPort’ and ‘toPort’ parameters.

为了对出发和目的地的不同组合进行动态调用,我们应该从所选元素中提取城市名称,然后向reserve.php以城市名称的组合作为参数。

现在让我们构建我们的JMeter测试场景:

1.首先,我们需要添加一个HTTP Request Sampler到主页:

右键单击线程组->添加->采样器->请求

2.由于我们需要使用默认的超文本传输协议并在超文本传输协议请求中获取请求类型,因此只需指定服务器名称(blazedemo.com)和指向主页的端点路径(/index.php)。

3.要查看主页响应,让我们也添加View Results Tree listener

右键单击线程组->添加->监听器->查看结果树 

Thread Group会是这样的:

css/jquery extractor on jmeter thread group

4.现在运行脚本。您将在主页回复中找到所有可用的出发和到达城市:

css/jquery extractor on jmeter, Now run the script. You will find all the available departure and arrival cities in the home page response: 

5.下一步是将CSS/jQuery提取器添加到JMeter脚本中。

右键单击主页请求->添加->后处理器-> CSS/jQuery提取器 

jmeter, Add -> Post Processor -> CSS/JQuery Extractor 

Image title


以下是该提取器的参数列表:

  • 名称-将在线程组树中显示的名称。
    • 应用于-如果您的采样器具有不同的子采样,此参数可能会很有用。
    • 仅主样本-仅将提取器应用于主样本。
    • 仅子样本-仅将提取器应用于子样本。
    • 主样本和子样本-将提取器应用于两者。
    • JMeter变量-将提取器应用于指定的JMeter变量。
  • CSS/jQuery提取器实现——有两种实现可以使用。虽然它们之间没有显著差异,但是一些语法元素可能会有所不同(有关更多详细信息,请参见:JSoup(默认)和Jodd-Lagarto)。
  • 引用名称——将用作值容器的结果JMeter变量的名称。
  • CSS/jQuery表达式——用于提取JMeter变量匹配值的定位器。
  • 属性——可用于从匹配选择器的节点中提取值的超文本标记语言属性的名称。如果为空,将返回此元素及其子元素的组合文本。
  • 匹配号-基于此值,CSS/jQuery选择器可能匹配:
    • 在0值的情况下,从所有找到的结果中随机选取一个值。
    • 在指定的正n个数的情况下的第n个元素。
    • 在负数的情况下,可以在ForEach控制器中使用的数组变量。
  • 默认值-如果找不到定位器,可以使用的默认值。

6.由于脚本的主要目标是查找随机航班,我们需要一个返回所有出发城市的CSS定位器,然后是所有目的地的第二个提取器。

对于出发城市提取,我们可以使用CSS定位器:选择[名称=从端口]>选项 

For departure cities extraction we can use the CSS locator: select[ data-cke-saved-name=fromPort] name=fromPort] > option 

同样,我们可以获得目的地城市:选择[name=toPort]>选项 

In the same way we can get destination cities: select[ data-cke-saved-name=toPort] name=toPort] > option

选择所需参数后,通过向JMeter脚本添加两个CSS提取器来检索JMeter中的值。出于调试目的,您可以将“未找到”值作为“默认值”参数。

如果定位器有问题,您可以根据城市变量中的默认值快速找到它们。

对于出发城市:

jmeter, css/jquery extractor, departure cities

对于目的地城市:

jmeter, css jquery extractor, destination cities 

您可以找到关于CSS语法的详细解释here。jQuery的选择器引擎使用了大多数与CSS相同的语法some exceptions。对于选择任意定位器,可以使用“0”值的“匹配号”字段,该字段从所有找到的结果中返回一个随机值。

还值得一提的是,有一个非常方便的浏览器插件列表,可以在浏览器中测试CSS定位器。对于火狐,你可以使用Firebug插件,而对于ChromeXPath Helper是最方便的工具。

7.现在让我们添加Debug Sampler要验证变量值:

右键单击线程组->添加->采样器->调试采样器 

Right button click on the Thread Group -> Add -> Sampler -> Debug Sampler

8.之后,我们可以运行脚本并检查找到的值:

jmeter, css jquery extractor, run the script

让我们使用上面得到的值来发送下一个请求。

9.我们现在想从主页模拟“查找航班”按钮的执行,它用指定的参数(出发和目的地城市)传输请求。此按钮向发送呼叫/reserve.php 带有两个参数的端点路径:fromPort和toPort。

jmeter, sends a call to /reserve.php endpoint path with two parameters: fromPort and toPort. 

10.在“查看结果树”侦听器中,您将在脚本的每次后续执行中找到不同的已定义参数值。

jmeter, In the “View Results Tree” listener you will find different values for defined parameters in each subsequent execution of the script.

 

In the “View Results Tree” listener you will find different values for defined parameters in each subsequent execution of the script. 

就这样!现在,您已经知道如何使用CSS/jQuery提取器从JMeter响应采样器中解析和提取值。