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

news2024/9/27 15:27:06

浅谈后置处理器组件提取器相关的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" 对于构建高效、准确的性能测试脚本至关重要,能够帮助你精确控制数据的提取过程,确保测试流程的顺畅执行。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

作业一:ER图 作业:二QQ项目思路 作业三:实现QQ的登录与注册界面

一、ER图 二、QQ项目思路:客户端功能,服务器端功能的实现 1.登录注册: 将基本信息如手机号码,验证码,还有已有的账号及账号相关信息等存入数据库中,登录方式为账号密码登录,还有忘记密码用邮箱…

023-GeoGebra中级篇-几何对象之圆锥曲线

圆锥曲线是解析几何中的重要部分,它们包括椭圆、双曲线、抛物线和圆。通过使用预先定义的变量(如数值、点和向量),我们可以动态地构建这些曲线的方程,并观察它们如何随变量的变化而变化。本文将介绍如何通过定义变量来…

TikTok 入局小游戏,小游戏出海赛道大热,开发者如何抢滩海外市场?

国内小游戏市场的竞争日益激烈,开发成本上涨、买量的投入成本飙升,对小团队和个人开发者的资金要求量高。除此以外,单款游戏从软著、备案、到认证所需要的时间和费用都大幅提升,也对小游戏市场造成重大影响。重压之下,…

旅游景区度假村展示型网站如何建设渠道品牌

景区、度假村、境外旅游几乎每天的人流量都非常高,还包括本地附近游等,对景区及度假村等固定高流量场所,品牌和客户赋能都是需要完善的,尤其是信息展示方面,旅游客户了解前往及查看信息等。 通过雨科平台建设景区度假…

[图解]分析模式-01-概述1

1 00:00:01,380 --> 00:00:01,770 好 2 00:00:02,340 --> 00:00:06,440 非常感谢大家能够来上我们 3 00:00:06,450 --> 00:00:07,960 分析模式高阶的课程 4 00:00:09,310 --> 00:00:13,440 这个内容之前在分析设计高阶 5 00:00:13,450 --> 00:00:17,840 也就…

客户反馈的智能分析:Kompas.ai如何转化用户声音为行动

客户反馈是企业改进产品和服务、提升客户满意度的重要资源。在数字化时代,如何有效收集和分析客户反馈,将其转化为实际行动,成为企业面临的挑战。Kompas.ai,一款智能客户反馈分析工具,正帮助品牌实现这一目标。 客户反…

nginx 正常访问,刷新404

问题描述: 部署完成前端服务,浏览器正常访问没有问题,但是F5刷新的时候,会提示404,丢失了资源。 解决办法: 在nginx配置中增加如下代码: try_files $uri $uri/ /index.html;

【Linux】进程间通信——命名管道和共享内存

目录 命名管道(named pipe) 命令行中使用 代码中使用 共享内存(shared memory) shmget ipcs命令 shmctl shmat/shmdt 简单通信 命名管道(named pipe) 之前我们说了匿名管道,但是匿名管道…

9717 取数对弈

首先,我们需要初始化两个数组,一个用于存储输入的数列a[],另一个用于动态规划过程中存储中间结果的二维数组dp[][]。dp[i][j]表示从数列的第i个数到第j个数时,当前玩家(甲方先手)能够获得的最大得分。 接下…

2023 N1CTF-n1canary

文章目录 参考n1canary模板类和模板函数make_unique和unique_ptrstd::unique_ptr示例: std::make_unique示例: 结合使用示例 operator->getrandom逆向源码思路exp 参考 https://nese.team/posts/n1ctf2023/ n1canary 模板类和模板函数 template &…

从汇编层看64位程序运行——栈帧(Stack Frame)入门

在《从汇编层看64位程序运行——程序中的栈(Stack)结构及其产生的历史原因》一文中,我们讲解了X86体系架构下,程序的栈结构的特点。本文将介绍另外一个非常重要的结构——栈帧。 A stack frame, often just called a ‘frame,’ is a section of the sta…

大众汽车入职SHL在线测评、英语口语、招聘笔试如何通过、考点分析|备考建议

大众汽车入职在线测验真题考点分析,通过技巧? 大众汽车集团(中国)在招聘过程中,认知能力测试是评估候选人是否适合某个职位的重要环节。候选人会收到带有线上测评链接的邮件,测评包括胜任力潜力测试(Compe…

MySQL数字相关数据处理函数

目录 1. 随机数生成 rand ( ) 2. 四舍五入 round() 3. 舍去 truncate ( ) 4. 向上/下取整 5. 空处理 ifnull( x , y ) 1. 随机数生成 rand ( ) rand ( ) 生成 0 到 1 的随机数; rand ( x ) 生成 0 到 1 的随机数…

Unity之Text组件换行\n没有实现+动态中英互换

前因:文本中的换行 \n没有换行而是打印出来了,解决方式 因为unity会默认把\n替换成\\n 面板中使用富文本这个选项啊 没有用 m_text.text m_text.text.Replace("\\n", "\n"); ###动态中英文互译 using System.Collections; using…

Redis分布式锁-Redisson可重入锁原理的个人见解。

记录Redisson可重入锁的个人见解。 文章目录 前言一、什么叫做锁的重入?二、Redisson可重入锁原理 前言 ⁣⁣⁣⁣ ⁣⁣⁣⁣ 之前在写项目的时候,注意到Redisson可重入锁的一个问题,随即在网上搜索其对应的资料,下面就记录一下个…

nfs共享存储配置

目录 一.存储和NFS共享 1.存储的类型分为三种 2.三种存储架构的应用场景 二.NFS共享存储服务 1.NFS简介 2.NFS存储 3.NFS原理 4.软件介绍 三.搭建NFS服务器 1.搭建 2.使用权限: 读写权限 属主,属组权限 客户端创建文件指向同一属主和属组 …

昇思25天学习打卡营第23天|基于MindSpore通过GPT实现情感分类

1. 学习内容复盘 %%capture captured_output # 实验环境已经预装了mindspore2.2.14,如需更换mindspore版本,可更改下面mindspore的版本号 !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.14 I…

Python骨架肌体运动学数学模型

🎯要点 🎯运动学矢量计算 | 🎯跳远的运动学计算 | 🎯关节肢体运动最小加加速度模型 | 🎯膝关节和踝关节角度二维运动学计算 | 🎯上下肢体关节连接运动链数学模型 | 🎯刚体连接点速度加速度计算…

Qt图形与图片(Qt位置相关函数、Qt基础图形的绘制、双缓冲机制、显示SVG格式图片)

此篇文章介绍几种主要位置函数及其之间的区别,以及各种与位置相关函数的使用场合;然后,通过一个简单绘图工具实例,介绍利用QPainter和QPainterPath两种方法绘制各种基础图形;最后,通过几个实例介绍如何利用…

【JVM】对象的生命周期一 | 对象的创建与存储

Java | 对象的生命周期1-对象的创建与存储 文章目录 前言对象的创建过程内存空间的分配方式方式1 | 指针碰撞方式2 | 空闲列表 线程安全问题 | 避免空间冲突的方式方式1 | 同步处理(加锁)方式2 | 本地线程分配缓存 对象的内存布局Part1 | 对象头Mark Word类型指针 P…