声明:本文所记录的仅本次操作学习到的知识点,其中商城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控制器】的更多相关文章

  1. JMeter基础之一 一个简单的性能测试

    JMeter基础之一 一个简单的性能测试 上一节中,我们了解了jmeter的一此主要元件,那么这些元件如何使用到性能测试中呢.这一节创建一个简单的测试计划来使用这些元件.该计划对应的测试需求. 1)测 ...

  2. JMeter基础之--元件的作用域与执行顺序

    前面有介绍过jmeter的元件类别,对于新手来说,jmeter的元件是还是不少的,如果我们按照每一个元件的每一个参数的含义去学习,无疑会降低学习性能测试的热情,就算我们熟悉了所有元件以及元件上的参数了 ...

  3. Jmeter基础之---jmeter基础概念

    Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...

  4. 转 JMeter基础之--元件的作用域与执行顺序

    前面有介绍过jmeter的元件类别,对于新手来说,jmeter的元件是还是不少的,如果我们按照每一个元件的每一个参数的含义去学习,无疑会降低学习性能测试的热情,就算我们熟悉了所有元件以及元件上的参数了 ...

  5. 『动善时』JMeter基础 — 61、使用JMeter监控服务器

    目录 1.监控插件安装 2.启动监控服务 3.使用JMeter监控服务器 (1)测试计划内包含的元件 (2)HTTP请求界面内容 (3)配置jp@gc-PerfMon Metrics Collecto ...

  6. 「Python实用秘技08」一行代码解析地址信息

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第8期 ...

  7. JS根据经纬度获取地址信息

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  8. python基础——获取对象信息

    python基础——获取对象信息 当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type( ...

  9. 获取本地IP地址信息

    2012-06-05    /// <summary>         /// 获取本地IP地址信息         /// </summary>         void G ...

  10. <address>标签,为网页加入地址信息

    一般网页中会有一些网站的联系地址信息需要在网页中展示出来,这些联系地址信息如公司的地址就可以<address>标签.也可以定义一个地址(比如电子邮件地址).签名或者文档的作者身份. 语法: ...

随机推荐

  1. 面试官:说说Netty对象池的实现原理?

    Netty 作为一个高性能的网络通讯框架,它内置了很多恰夺天工的设计,目的都是为了将网络通讯的性能做到极致,其中「对象池技术」也是实现这一目标的重要技术. 1.什么是对象池技术? 对象池技术是一种重用 ...

  2. python数据分析练习--分析成都的房价

    目的:使用python的numpy.pandas.matplotlib库来分析成都二手房的房价信息. 原始数据来源:贝壳找房网站上的数据https://cd.ke.com/ershoufang 环境: ...

  3. abc356

    D1.5h没做出,E0.5h做出来啦? E 有两个做法,第一个是枚举分子来计算分母对答案的贡献,另一种是枚举分母来求分子对答案的贡献. 枚举分子来计算分母对答案的贡献需要用到数论分块,所以我们讲枚举分 ...

  4. (一)requests-实战小练习

    1.需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情数据 (此处以抓取科幻电影分类的信息为例) import requests import json ur ...

  5. Spring扩展———自定义bean组件注解

    引言 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制. Java 语言中的类.方法.变量.参数和包等都可以被标注.和 Javadoc 不同,Java ...

  6. Linux中的环境变量PS1,打造你的专属终端

    文章目录 介绍 PS1的格式 设置字体样式 举例 小建议 进阶 介绍 好看的终端是怎么做的呢?通过PS1这个环境变量! PS1的格式 PS1='[\u@\h \w]\$ ' 样式: 解释: [是普通字 ...

  7. hynitron ts 驱动分析

    # hynitron ts 驱动分析 背景 在公司项目中搞LCD移植的时候,在TP功能上,有时候频繁操作屏幕时会导致i2c总线返回-2错误. 问题描述: 1.安卓桌面起来以后,点击屏幕有响应. 2.此 ...

  8. FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist

    ​<FFmpeg开发实战:从零基础到短视频上线>一书的"10.2  FFmpeg推流和拉流"提到直播行业存在RTSP和RTMP两种常见的流媒体协议.除此以外,还有比较两 ...

  9. python基础-内置函数

    # callable() # 函数用于检查一个对象是否是可调用的.如果返回 True,object 仍然可能调用失败:但如果返回 False,调用对象 object 绝对不会成功. # 对于函数.方法 ...

  10. 《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建

    第四章 基于CanMV的C开发环境搭建 1)实验平台:正点原子DNK210开发板 2) 章节摘自[正点原子]DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail ...