首页 > 其他分享 >第十二节 JMeter基础-中级地址信息【IF控制器】

第十二节 JMeter基础-中级地址信息【IF控制器】

时间:2024-07-24 21:06:33浏览次数:9  
标签:第十二 __ 控制器 matchNr address groovy JMeter id 表达式

声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改。

 

背景:提交订单前,我们需要核对一些信息,比如商品信息,收货地址,支付方式等。现在核对一下收货地址信息。

思路

1、前提条件:A用户登录。

2、先判断地址列表是否有收货地址

3、如果没有收货地址,则新增默认收货地址。

4、如果有收货地址,全部删除后再新增默认收货地址(先这样粗暴的简单处理)。

 

1.认识JMeter

(1)逻辑控制器【IF控制器

可以通过条件来控制是否运行其下面的测试元件(子元素)。只有结果为True时才会执行层级下的测试元件。

(2)选项【日志】

提供了关于测试执行情况的详细信息,‌帮助用户分析和优化测试策略,‌确保测试的有效性和准确性,是测试过程中不可或缺的一部分。

 

2.【HTTP请求默认值】

3.【登录】

4.【查看地址列表】

(1)查看地址列表

(2)获取全部地址

 

5.【IF控制器-删除】

(1)所有地址不为空

(2)删除所有地址

(3)查看地址列表

 

6.【IF控制器-新增】

(1)所有地址为空

(2)新增默认地址

 

(3)查看地址列表

 

7.【调试取样器】

 

8.【查看结果树】

 

9.【日志】

我是被【IF控制器】中的__groovy()方法给弄得快崩溃了,之前花了很多时间百度找原因,一直找不到是什么原因导致判断失败后面的操作都不执行。最后是想通过日志看看能不能找到原因(因为对JMeter工具不太熟悉,日志打印那块有很多模块也是一个一个的试),公司的日志也没有这么多模式。

 

10.【认识IF控制器】

(1)界面

For performance it is advised to check "Interpret Condition as Variable Expression" and use__jexl3 or __groovy evaluating to true or false or a variable that contains true or false为了提高性能,建议勾选“将条件解释为变量表达式”,并使用__jexl3或__groovy求值为真或假,或者使用包含真或假的变量。

Expression (must evaluate to true or false):表达式(必须求值为真或假)。在右边文本框中输入的条件值必须是 true 或 false,例如:${__jexl3("address_id_all_matchNr" != "0" or "1" and "address_id_all_matchNr" != "",)}。

Use status of last sample:上次样品的使用情况。使用执行该IF控制器前的最后一个取样器结果作为判断,如果最后一个取样器通过就返回true,如果失败就返回false。点击一下按钮即可,表达式输入框里自动添加:${JMeterThread.last_sample_ok}

Interpret Condition as Variable Expression:将条件解释为变量表达式,默认勾选,需要使用 ${__jexl3()}${__groovy()}表达式。例如:${__groovy("${address_id_all1}"=="")}。

Evaluate for all children:条件作用域所有子元素。

 

(2)区别

我把遇到的区别给总结一下(目前就2个),没遇到的就只能等以后再补充了,可以去官网看看(太简洁了):https://jmeter.apache.org/usermanual/functions.html#__groovy , https://jmeter.apache.org/usermanual/functions.html#__jexl3 。

字段上区别

${__groovy()}表达式里面的参数一定要有英文的双引号,例如${__groovy(${address_id_all_matchNr} == "0" or ${address_id_all1_matchNr} == "0",)},字段${address_id_all_matchNr}没有加上双引号,JMeter运行日志就报错

例如:${__groovy("${address_id_all_matchNr}" == "0" },字段${address_id_all_matchNr}加上双引号,JMeter运行日志就不会报错

${__jexl3()}表达式里面的参数可以没有英文的双引号,${__jexl3("${address_id_all_matchNr}" == "0" or "${address_id_all1_matchNr}" == "0",)},字段${address_id_all_matchNr}没有双引号,JMeter运行日志也不会报错

OR语法区别

${__groovy()}表达式里面有OR逻辑判断时,运行结果一定是failed,例如${__groovy(${address_id_all_matchNr} == "0" or ${address_id_all1_matchNr} == "0",)},字段${address_id_all_matchNr}没有加上双引号,JMeter运行日志就报错

${__jexl3()}表达式里面有OR逻辑判断时就不会报错。

其它还没遇到

百度的内容

Groovy和Jexl3都是可以在Java平台上运行的表达式语言,‌但它们在设计目标、‌功能和使用场景上存在一些区别。     

设计目标与功能:‌Groovy是一种动态编程语言,‌设计用于增强Java平台的开发体验,‌提供了丰富的特性如动态类型、‌闭包等,‌旨在提供一种更简洁、‌灵活的方式来编写代码。‌它支持与Java的无缝集成,‌允许开发者使用Groovy编写代码,‌同时也能调用Java库和类。‌相比之下,‌Jexl3(‌JEXL是Java Expression Language的扩展)‌更专注于提供一种轻量级的、‌易于嵌入的表达式语言,‌用于在运行时动态地解析和执行表达式。‌

使用场景:‌Groovy适合于需要快速原型设计、‌脚本编写或者需要利用其提供的丰富特性来简化Java开发的场景。‌它特别适合与Spring等框架一起使用,‌提供了一种更加敏捷的开发方式。‌而Jexl3则更适合于需要在Java应用程序中嵌入简单的表达式解析和执行功能的场景,‌比如在规则引擎、‌业务逻辑快速调整等场合。

语法与特性:‌Groovy的语法更加接近自然语言,‌提供了闭包、‌元编程等高级特性,‌使得代码更加简洁易读。‌而Jexl3的语法相对更加精简,‌专注于表达式的快速解析和执行,‌不包含Groovy那样的高级特性。‌

总的来说,‌Groovy和Jexl3都是为了在Java平台上提供表达式语言的解决方案,‌但Groovy作为一个完整的编程语言,‌提供了更多的特性和灵活性,‌适合于需要更复杂逻辑和快速开发的场景;‌而Jexl3则更加轻量级‌专注于表达式的解析和执行,‌适合于简单的逻辑调整和嵌入使用。‌

 

(3)函数助手

一个工具,感觉了解_jexl3()与__groovy()后用处不大。

页面输入表达式的值,然后点击【生成】自动拷贝函数字符串。然后输出当前JMeternal变量,JMeterTread.last_sample_ok就是IF控制器之前的HTTP请求结果。其它的信息就没有了。

但是,这里没有任何语法校验,没有提示报错或者是IF控制器的结果是True还是False,还没有日志好用。对于熟悉${__jexl3()}或${__groovy()}写法的人来说,这个助手好像没什么用。

最上面的【帮助】,能够跳转到JMeter官网关于函数的介绍页面。

 

标签:第十二,__,控制器,matchNr,address,groovy,JMeter,id,表达式
From: https://www.cnblogs.com/duguxiangyao/p/18321729

相关文章

  • Jmeter取样器--- JDBC request
    以mysql为例1、将访问mysql的jdbc的jar包放入jmeter\lib\ext目录下,如E:\JMeter\apache-jmeter-5.6.3\lib\ext,重新启动jmeter。驱动下载地址:MySQL::DownloadMySQLConnector/J(ArchivedVersions)2、添加配置元件“JDBCConnectionConfiguration”,如图所示3、JDBCConne......
  • MOTOROLAVME172PA-652SE 嵌入式控制器
    高性能控制:MOTOROLAVME172PA-652SE模块具有高性能的控制能力,可以用于实现复杂的工业自动化系统的控制和监测。多功能模块:该模块可能具备多种功能,如输入/输出控制、数据采集、信号处理等,可适应不同的应用需求。可编程性:MOTOROLAVME172PA-652SE模块通常支持编程和定制化,使......
  • Nodify学习 四:添加移除连接控制器,设置节点初始位置
    前置移除连接要删除连接,只需监听来自连接器本身或编辑器的断开连接事件,并删除具有连接器作为源或目标的连接。为了简单起见,我们将为 NodifyEditor 实现 DisconnectConnectorCommand。首先让我们将其添加到 EditorViewModel。 publicclassEditorViewModel{public......
  • UNS0881a-P,V1 3BHB006338R0001 可编程控制器PLC
    产品型号:UNS0881a-P,V13BHB006338R0001产品类别:可编程控制器PLC产品成色:全新、非全新质量保障:365天原产地;美国库存;有货品牌;ABBUNS0881a-P,V13BHB006338R0001控制板是一种电子设备,主要用于控制和管理各种电气设备。它通常由主控芯片、外设接口、电源模块、存储模......
  • kubernetes核心概念 Controller控制器之StatefulSet
    Kubernetes核心概念Controller之StatefulSet控制器一、StatefulSet控制器作用StatefulSet是用来管理有状态应用的控制器。StatefulSet用来管理某Pod集合的部署和扩缩,并为这些Pod提供持久存储和持久标识符。参考:https://kubernetes.io/zh/docs/concepts/workl......
  • Python 请求库无法成功完成 POST(Nanotec 电机控制器)
    我有一个运行RESTWeb服务的电机控制器,我想使用Python对其进行控制。我能够使用Python请求库成功执行GET请求。但是我无法执行POST请求。它给了我以下错误:requests.exceptions.ConnectionError:('Connectionaborted.',RemoteDisconnected('Remoteendclosed......
  • 为什么 .rumble() 没有使我的控制器按照指定的方式振动?
    如果控制器断开连接,我的Python脚本(在for循环中激活PlayStation4控制器的振动)应该终止。但是,当我将持续时间参数传递给rumble方法时,它不会按照指定的方式振动。此外,当for循环处于活动状态时,它会继续振动而不会中断。PyGame文档joystick_count=pygame.joyst......
  • 苍穹外卖学习笔记——第十二天
    数据统计(Excel报表)工作台需求分析和设计工作台是系统运营的数据看板,并提供快捷操作入口,可以有效提高商家的工作效率。产品原型工作台展示的数据今日数据订单管理菜品总览套餐总览订单信息名词解释营业额:已完成订单的总金额。有效订单:已完成订单的数量。订单完成......
  • 第十节 JMeter基础-初级购物车【接口关联-鉴权】
    声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改。 背景:商城购物车可以添加数据,也可以删除数据。思路:登录后添加购物车,加入成功后查看购物车列表。购物车列表,随机删除,或者指定删除(需要特殊指定,例如购物车ID)。全部删除:依次读取购物车列表并删除。 1......
  • Jmeter实现本地文件的读写操作-将响应结果写入到本地Excel中
    一、环境准备1、引入操作EXcel文件的包2、安装JMeter:确保已安装JMeter。Java环境:确保系统中已安装JDK,并配置了JAVA_HOME环境变量。二、脚本准备1.配置JMeter测试计划创建线程组添加线程组:右键点击“测试计划(TestPlan)”,选择“添加(Add)”->“线程(Threads(Use......