浅谈后置处理器组件提取器相关的Apply to

浅谈后置处理器组件提取器相关的Apply to

在Apache JMeter中,“提取器”(通常指的是正则表达式提取器、JSON路径提取器或CSS/JQuery提取器等)是用来从服务器响应中提取信息的重要组件。这些信息可以是cookies、session IDs、特定的文本或者任何你需要在后续请求中复用的数据。"Apply to"是配置这些提取器时的关键设置,它们决定了JMeter如何处理和解析响应数据。

Apply to

“Apply to” 设置指定了JMeter应该在哪些响应上应用这个提取器。这个选项对于有多个采样器(Sampler)和需要根据具体情况选择在哪里提取数据的场景尤为重要。常见的选项包括:
● Main sample and sub-samples:同时应用于主采样器和所有子采样器的响应。当你需要从多个层次的响应中提取数据时,可以选择这个选项。
● Main sample only:默认选项,仅应用于主采样器的响应数据。基本情况下,我们只要选择“main sample only”,因为一般情况下,当我们发起一个请求时,实际包含的也只是一个请求。但有些情况下,发起一个请求时,会触发多个服务器请求,这时候就有main sample和sub-sample之分,比如发起重定向请求,此时会把重定向后的请求视为main-sample
● Sub-samples only:如果采样器发送了多个请求,如重定向,这个选项会告诉JMeter仅在子请求的响应上应用提取器。
● JMeter Variable:允许你指定一个JMeter变量名称,JMeter将从该变量中而不是直接从响应中提取数据。这对于从之前已经存储在变量中的数据中进一步提取信息非常有用。

实例说明

首先我们使用Spingboot框架编写测试脚本,改测试脚本接口按重定向内容,便于后续设置不同的参数进行测试,脚本如下:

@GetMapping("/getinfo")
public RedirectView redirectAndRequest(RedirectAttributes attributes) {
      // 重定向到目标URL
      RedirectView redirectView = new RedirectView();
      redirectView.setUrl("http://127.0.0.1:8091/request");
      return redirectView;
}

@GetMapping("/request")
@ResponseBody
public String handleRequest() {
  ModelAndView modelAndView = new ModelAndView("redirect:/api/redirect");
  // 发起请求到目标URL
  RestTemplate restTemplate = new RestTemplate();
  return restTemplate.getForObject("http://127.0.0.1:8091/welcome", String.class);
}

@GetMapping(value = "/welcome")
public String welcome(){
        return "{\"total\":2,\"data\":[{\"id\":123,\"name\":\"John Doe\",\"email\":\"johndoe@example.com\",\"phone\":\"123-456-7890\",\"address\":{\"street\":\"123 Main St\",\"city\":\"New York\",\"state\":\"NY\",\"zip\":\"10001\"},\"interests\":[\"sports\",\"music\",\"travel\"]},{\"id\":456,\"name\":\"Jane Smith\",\"email\":\"janesmith@example.com\",\"phone\":\"987-654-3210\",\"address\":{\"street\":\"456 Elm St\",\"city\":\"Los Angeles\",\"state\":\"CA\",\"zip\":\"90001\"},\"interests\":[\"reading\",\"cooking\",\"hiking\"]}]}";
    }

我们编写如下测试脚本
在这里插入图片描述
线程组:保持默认
用户定义的变量:名称设置为test,对应的值设置为Content-Length: test
HTTP请求:协议设置为http,服务器名称或IP为127.0.0.1,端口为8091,方法为GET,路径为/getinfo,内容编码为utf-8,其他保持默认
此时我们进行脚本运行,查看结果树,可以看到如下结果,我们这里可以理解为HTTP请求是Main Sample,而HTTP请求-0和HTTP请求-1为Sub Sample
在这里插入图片描述
点击HTTP请求记录响应数据中的Response headers数据内容如下:

HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 433
Date: Thu, 11 Jul 2024 08:58:51 GMT
Keep-Alive: timeout=60
Connection: keep-alive

点击HTTP请求-0记录响应数据中的Response headers数据内容如下:

HTTP/1.1 302
Location: http://127.0.0.1:8091/request
Content-Language: zh-CN
Content-Length: 0
Date: Thu, 11 Jul 2024 08:58:51 GMT
Keep-Alive: timeout=60
Connection: keep-alive

点击HTTP请求-1记录响应数据中的Response headers数据内容如下:

HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 433
Date: Thu, 11 Jul 2024 08:58:51 GMT
Keep-Alive: timeout=60
Connection: keep-alive

情况1:勾选Main Sample and sub-samples

我们将正则表达式提取器设置如下参数:
● Apply to:选择Main Sample and sub-samples
● 要检查的响应字段:选择信息头
● 引用名称:设置为var
● 正则表达式:设置为Content-Length: (.*),因为我们通过提取消息头中的Content-Length:后面的内容来模拟不同的选择方式获取的不同数据。
● 模板:设置为默认,即为空。
● 匹配数字(0代表随机):设置为-1
● 缺失值:设置为NotFound
运行脚本,查看结果树中的调试取样器中响应数据的Response Body内容,可以看到如下结果:

test=Content-Length: test
var=NotFound
var_1=
var_1_g=1
var_1_g0=Content-Length: 433
var_1_g1=433
var_2=
var_2_g=1
var_2_g0=Content-Length: 0
var_2_g1=0
var_3=
var_3_g=1
var_3_g0=Content-Length: 433
var_3_g1=433
var_matchNr=3

上述内容可以知道获取的数据为结果树中HTTP请求、HTTP请求-0以及HTTP请求-1对应消息头获取的数据。

情况2:勾选Main Sample only

我们将正则表达式提取器设置如下参数:
● Apply to:选择Main Sample only
● 其他参数保持跟情况1一致。
运行脚本,查看结果树中的调试取样器中响应数据的Response Body内容,可以看到如下结果:

test=Content-Length: test
var=NotFound
var_1=
var_1_g=1
var_1_g0=Content-Length: 433
var_1_g1=433
var_matchNr=1

根据上文中提到HTTP请求是Main Sample,而HTTP请求-0和HTTP请求-1为Sub Sample,所以当选择Main Sample only时,只提取了HTTP请求中响应数据的Response Headers的内容

情况3:勾选Sub-Samples only

我们将正则表达式提取器设置如下参数:
● Apply to:选择Sub-Samples only
● 其他参数保持跟情况1一致。
运行脚本,查看结果树中的调试取样器中响应数据的Response Body内容,可以看到如下结果:

test=Content-Length: test
var=NotFound
var_1=
var_1_g=1
var_1_g0=Content-Length: 0
var_1_g1=0
var_2=
var_2_g=1
var_2_g0=Content-Length: 433
var_2_g1=433
var_matchNr=2

根据上文中提到HTTP请求是Main Sample,而HTTP请求-0和HTTP请求-1为Sub Sample,所以当选择Main Sample only时,只提取了HTTP请求-0和HTTP请求-1中响应数据的Response Headers的内容

情况4:勾选JMeter Variable Names to Use

我们将正则表达式提取器设置如下参数:
● Apply to:选择JMeter Variable Names to Use,并且后面的输入框输入为test
● 其他参数保持跟情况1一致。
运行脚本,查看结果树中的调试取样器中响应数据的Response Body内容,可以看到如下结果:

test=Content-Length: test
var=NotFound
var_1=
var_1_g=1
var_1_g0=Content-Length: test
var_1_g1=test
var_matchNr=1

根据上文中指定一个JMeter变量名称,我们这里的变量名称为我们在用户定义的变量中增加的变量,即为test,对应的内容为Content-Length: test,因此我们得到对应的数据即为var_1_g0=Content-Length: test。

总结

正确理解和配置"Apply to" 对于构建高效、准确的性能测试脚本至关重要,能够帮助你精确控制数据的提取过程,确保测试流程的顺畅执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/792940.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nuxt框架中内置组件详解及使用指南(五)

title: Nuxt框架中内置组件详解及使用指南(五) date: 2024/7/10 updated: 2024/7/10 author: cmdragon excerpt: 摘要:本文详细介绍了Nuxt框架中和组件的使用方法与配置,包括安装、基本用法、属性详解、示例代码以及高级功能如…

纹波电流与ESR:解析电容器重要参数与应用挑战

电解电容纹波电流与ESR(Equivalent Series Resistance)是电容器的重要参数,用来描述电容器对交流信号的响应能力和能量损耗。电解电容纹波电流是指电容器在工作时承受的交流信号电流,而ESR则是电容器内部等效电阻,影响…

tensorflow1.基础案例2

前言 在TensorFlow 1.x中实现线性回归通常指的是使用静态图的方式,而在TensorFlow 1.x中使用Eager API实现线性回归是在TensorFlow 1.x的晚期版本中引入的,以提供类似于TensorFlow 2.x的编程体验。以下是两种方式的区别、各自的优点以及对比的作用&…

Linux下fcitx框架输入法输入中文标点时为半角(英文)标点符号的解决

目录 引入解决1.打开fcitx设置2.打开全局配置3. 随便找个可以输入地方敲下快捷键 总结 本文由Jzwalliser原创,发布在CSDN平台上,遵循CC 4.0 BY-SA协议。 因此,若需转载/引用本文,请注明作者并附原文链接,且禁止删除/修…

轻松搭建系统,让每个故事都精彩绽放!

"轻松搭建系统,让每个故事都精彩绽放!" 这句话传递了一个核心理念,即通过简化、高效的系统搭建过程,让每一个创意故事都能以最佳状态呈现给观众,实现其独特魅力和价值的最大化。 1、模块化设计:系…

CV06_Canny边缘检测算法和python实现

1.1简介 Canny边缘检测算法是计算机视觉和图像处理领域中一种广泛应用的边缘检测技术,由约翰F坎尼(John F. Canny)于1986年提出。它是基于多级处理的边缘检测方法,旨在实现以下三个优化目标: 好的检测:尽…

机器学习第四十七周周报 CF-LT

文章目录 week47 CF-LT摘要Abstract1. 题目2. Abstract3. 网络结构3.1 CEEMDAN(完全自适应噪声集合经验模态分解)3.2 CF-LT模型结构3.3 SHAP 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程 5. 结论6.代码复现小结参考文献 week47 CF-LT 摘要 本周…

以太网连接、本地连接、宽带连接和无线WLAN连接有什么不同?

电脑上的以太网连接、本地连接、宽带连接和无线WLAN连接在功能和实现方式上存在一定的区别。以下是对这四种连接方式的详细解析: 一、以太网连接与本地连接 1. 定义与关系 以太网连接:以太网是一种广泛应用的局域网(LAN)技术&a…

【YOLOv8】 用YOLOv8实现数字式工业仪表智能读数(二)

上一篇圆形表盘指针式仪表的项目受到很多人的关注,咱们一鼓作气,把数字式工业仪表的智能读数也研究一下。本篇主要讲如何用YOLOV8实现数字式工业仪表的自动读数,并将读数结果进行输出,若需要完整数据集和源代码可以私信。 目录 &…

排序(二)——快速排序(QuickSort)

欢迎来到繁星的CSDN,本期内容包括快速排序(QuickSort)的递归版本和非递归版本以及优化。 一、快速排序的来历 快速排序又称Hoare排序,由霍尔 (Sir Charles Antony Richard Hoare) ,一位英国计算机科学家发明。霍尔本人是在发现冒泡排序不够快…

MQTT协议网关解决方案及实施简述-天拓四方

MQTT协议网关是一个中间件,负责接收来自不同MQTT客户端的消息,并将这些消息转发到MQTT服务器;同时,也能接收来自MQTT服务器的消息,并将其转发给相应的MQTT客户端。MQTT协议网关的主要功能包括协议转换、消息过滤、安全…

ImportError: DLL load failed while importing cv2解决方案

系统是 server 2012 r2 datacenter 背景:在window10系统上采用PyInstaller打包python310版本程序后,在server 2012 r2 datacenter运行报错ImportError: DLL load failed while importing cv2,最后解决方案参考了一篇文章下评论修改成功。 原…

Qt http网络编程

学习目标:Qt HTTP网络编程 学习内容 1、Http就是超文本传输协议(Hypertext Transfer Protocol)的缩写,它定义了浏览器和网页服务器之间的通信规范。是一个简单的请求一响应协议,它通常运行在 TCP 之上。 作用:规定 WWW 服务器与浏览器之间信息传递规范…

软件测试常见面试题汇总(2024版)

一、常见的面试题汇总 1、你做了几年的测试、自动化测试,说一下 selenium 的原理是什么? 我做了五年的测试,1年的自动化测试; selenium 它是用 http 协议来连接 webdriver ,客户端可以使用 Java 或者 Python 各种编…

软件测试想转职有适合的岗位吗?

软件测试被有些人看做技术含量低,但是软件测试实际上是万金油行业,如果你不是在很大的公司做的软件测试,相比你做的工作是很杂的,比如软件测试找bug,你的主业,帮着产品经理整理需求,帮着项目经理…

微软开源项目GraphRAG——基于知识图谱的RAG简介

前言 在大型语言模型(LLM)的前沿研究中,一个核心挑战与机遇并存的领域是扩展它们的能力,以解决超出其训练数据范畴的问题。这不仅要求模型在面对全新数据时仍能保持卓越表现,还意味着开辟了全新的数据分析可能性&…

【C++】C++ 汽车租赁管理系统(源码+论文)【500+行代码】【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

CAN总线实战项目:使用STM32和PCAN-View实现数据采集与监控系统(附完整代码)

摘要: 本文深入浅出地介绍CAN(Controller Area Network,控制器局域网络)总线协议,涵盖其基础概念、报文帧格式、仲裁机制、错误处理等关键知识。同时,文章结合STM32平台,从硬件设计、软件开发到实战案例&am…

【益起童行】为“来自星星的孩子”点亮希望之光

在未来的日子里, 我期望每一个孩子都能得到优质的干预治疗,让他们在未来能够过上正常、快乐的生活。 我也期望每一个家庭都能战胜困境,迎来美好。 作为社会的一份子,我愿意为这繁华人世贡献出自己微不足道但却真挚的力量&#xff…

24暑假计划

暑假计划: 1.从明天起开始将C语言的部分补充完整,这部分的预计在7月24日前完成 2.由于之前的文章内容冗余,接下来进行C语言数据结构的重新编写和后面内容的补充预计8月10号前完成 3.后续开始C的初级学习