第十二节 JMeter基础-中级地址信息【IF控制器】
声明:本文所记录的仅本次操作学习到的知识点,其中商城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官网关于函数的介绍页面。



第十二节 JMeter基础-中级地址信息【IF控制器】的更多相关文章
- JMeter基础之一 一个简单的性能测试
JMeter基础之一 一个简单的性能测试 上一节中,我们了解了jmeter的一此主要元件,那么这些元件如何使用到性能测试中呢.这一节创建一个简单的测试计划来使用这些元件.该计划对应的测试需求. 1)测 ...
- JMeter基础之--元件的作用域与执行顺序
前面有介绍过jmeter的元件类别,对于新手来说,jmeter的元件是还是不少的,如果我们按照每一个元件的每一个参数的含义去学习,无疑会降低学习性能测试的热情,就算我们熟悉了所有元件以及元件上的参数了 ...
- Jmeter基础之---jmeter基础概念
Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...
- 转 JMeter基础之--元件的作用域与执行顺序
前面有介绍过jmeter的元件类别,对于新手来说,jmeter的元件是还是不少的,如果我们按照每一个元件的每一个参数的含义去学习,无疑会降低学习性能测试的热情,就算我们熟悉了所有元件以及元件上的参数了 ...
- 『动善时』JMeter基础 — 61、使用JMeter监控服务器
目录 1.监控插件安装 2.启动监控服务 3.使用JMeter监控服务器 (1)测试计划内包含的元件 (2)HTTP请求界面内容 (3)配置jp@gc-PerfMon Metrics Collecto ...
- 「Python实用秘技08」一行代码解析地址信息
本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第8期 ...
- JS根据经纬度获取地址信息
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- python基础——获取对象信息
python基础——获取对象信息 当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type( ...
- 获取本地IP地址信息
2012-06-05 /// <summary> /// 获取本地IP地址信息 /// </summary> void G ...
- <address>标签,为网页加入地址信息
一般网页中会有一些网站的联系地址信息需要在网页中展示出来,这些联系地址信息如公司的地址就可以<address>标签.也可以定义一个地址(比如电子邮件地址).签名或者文档的作者身份. 语法: ...
随机推荐
- linux中磁盘清理方法(简单好用)
文章目录1.命令2.df参数说明3.find参数说明4.清理日志文件1.命令先来看解决办法 df -h --显示当前磁盘使用情况cd / --cd到要清理文件的路径下面find . -type f - ...
- JavaScript语法形式3 外链式
定义 script 标签,在 script 标签中,通过src属性导入外部js文件,并且加载执行外部js文件中国的程序代码内容 因为代码执行顺序问题,一般定义 script 标签 在 body标签 ...
- 算法金 | 只需十四步:从零开始掌握Python机器学习(附资源)
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 1. 引言 1.1 教程目的与读者定位 "启程"往往是最具挑战性的 ...
- P9174
problem & blog 子任务 \(1\) 和子任务 \(2\) 都比较好做.所以我们这里不讲. 状态将是数字 \(n\) (每个颜色的频率的排序数组)的所有分区,因为当我们旋转每种颜色 ...
- H5弹窗底层滑动
H5弹窗底层滑动 背景 产品提出H5 弹出窗滑动时,底层页面也会跟随滑动,需要调整禁止底层滑动,增加用户体验. 问题产生原因 ios 滑动时有回弹效果 顶层元素滑动默认行为 解决办法 阻止元素的默认( ...
- 将强化学习重新引入 RLHF
我们很高兴在 TRL 中介绍 RLOO (REINFORCE Leave One-Out) 训练器.作为一种替代 PPO 的方法,RLOO 是一种新的在线 RLHF 训练算法,旨在使其更易于访问和实施 ...
- Asp.net Core Flurl.Http 结合IHttpClientFactory管理HttpClient生命周期
Asp.net Core, 在我用过的多种Http REST 客户端: RestSharp WebApiClient Refit Flurl 中,Flurl可以说是最符合我口味的,用起来那可真的顺滑无 ...
- k8s中的亲和性、污点与容忍(调度到不同的宿主机)
本文章并未经过严格实践,如有错误,辛苦指出. 背景 服务需要多副本,来保证高可靠.多活. 那么问题来了,假如这些副本都在同一个宿主机上,或者同一个交换机下-宿主机.交换机其中一项坏掉了,那多副本还有什 ...
- 【golang】json数据中复杂key的处理
例1 type Transport struct { Time string Id int } func main() { //将struct的切片包装成json格式 var st []Transpo ...
- 在WPF中使用着色器
概念类比 范畴 CPU GPU 二进制文件 .exe .cso / .ps 二进制指令 机器码 CSO(shader指令) 助记符 汇编 SL 高级语言 C# HLSL 高级语言文件 .cs .hls ...
