当前位置: 首页 > news >正文

性能测试之接口关联和函数使用

性能测试之接口关联和函数使用

  • 接口关联和函数使用
    • 1、接口关联
      • 1.1 什么叫做接口的关联
      • 1.2 jmeter处理接口关联:后置处理器
        • 1.2.1 json提取器
        • 1.2.2 正则提取器
    • 2、Jmeter函数
      • 2.1 jmeter常用的函数
      • 2.2 jmeter属性相关的函数

接口关联和函数使用

1、接口关联

1.1 什么叫做接口的关联

  • 前端接口响应中,有后面接口请求所需要的参数值,那么这两个接口就存在关联
    例如:token:用户鉴权(令牌),如果登录之后才能操作的接口,必须要接口鉴权,每个接口都需要带上这个token,这个token都是从登录接口返回的结果中获取的

  • 中jmeter中,中前面接口请求中,添加一个后置处理器,把响应的内容提取出来,用一个变量进行接受,后面的接口需要的时候,直接引用这个变量就可以了
    例如,后置处理器:每个接口发送完成请求后,会收到响应信息,处理这些响应信息所做的事情

  • 调试取样器:一般用来做debug调试,查看中间变量的值,分析问题可以使用

1.2 jmeter处理接口关联:后置处理器

在jmeter中,后置处理器有:json提取器、正则提取器、边界提取器

1.2.1 json提取器

json表达式可以使用相对路径、绝对路径进表示

  • 相对路径:$..末梢节点名称【递归写法】,推荐使用,例如:$..token
  • 绝对路径:$.根节点.二级节点名称,如果由数组或列表,使用[0]进行取值
# 注意:
如果响应提取的数据不在响应体中,就不能用json提取器只能提取响应体内容,不能从其他地方提取
1.2.2 正则提取器

使用正则表达式写法【左边界(正则)右边界】

  • 以小括号为标识,小括号里面的内容,就是正则表达式
  • 正则表达式匹配的内容,就是要提取的数据
  • 要准确的写出左边界和有边界
  • 正则式要写正确,推荐使用外能匹配表达式(.*?)
  • 正则表达式,可以使用查看结果树里的,RegExp tester进行调试
  • 正则提取器中的模板,写法 数字 数字 数字
  • 如果正则表达式有多个括号(),那么这个模板就是取第几个括号的值
  • 提取多个,就写多个分组(.*?)
  • 匹配数字,跟json提取器一样,0随机,正数表示对应的值,负数表示所有
# 常用元字符
`.` 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束# 常用的限定符
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n, m} 重复n到m次

(.*?)几乎能匹配所有的东西

2、Jmeter函数

函数就是方法,jmeter是java开发的,所有jmeter的函数其实就是java方法。

  • jmeter函数,以双下划线开头+函数名称
  • 函数调用,${__函数名(,)} 双下划线开否,函数名严格区分大小写,所以,建议中使用函数时,我们使用jmeter自带的函数助手,直接复制,这样可以避免错误
  • 如果函数由参数,就带小括号,没有参数,就不用小括号;多个参数之间用英文都好分割,多个参数时候,逗号不能少
  • 函数的参数是可以引用变量的,参数可以是函数引用,就是函数的嵌套
变量是不可以调用函数的# jmeter的函数有两种* 自带的函数,如果digest函数
* 扩展函数,如安装一些插件才会有,md5函数,需要装jpgc的插件后才有

2.1 jmeter常用的函数

基础函数
1) ${__Random(,,)}${__RandomString}:随机函数

  • 函数可以引用变量
  • 函数可以调用函数

2)${__time(,)}:获取当前的时间戳函数,默认是时间戳,可以定义格式,年月日、时分秒、年月日-时分秒

3)${__CSVRead(,)}读取csv文件的函数,可不用,直接使用CSV配置元件来替代

4)${__digest(,,,,)}进行加密算法的函数,只能做简单的加密,支持MD2、MD5、SHA-1、SHA-224等算法

5)BeanShell函数与BeanShell元件

  • 功能测试换行,如果想用jmeter写脚本,可以使用BeanShell函数或元件
  • 性能测试中,不需要

6) ${__counter(,)}:计数函数,用于计数,比如:发送了多少次请求

  • 简单的累加,最大20亿数字
  • 第一个参数,即True和false,默认false,不区分大小写
    True:每个虚拟用户有自己的计数器,每个虚拟用户的计算器保持独立
    False:全局计数器,所有用户共享一个计数器,例如:3个线程分别是1-2-3,默认是false
  • 第二个参数:生成的数字可以保存再一个变量里,供后续调用,如num,调用${num}
使用场景
* 统计发送请求的数量
* counter函数生成的数字做变量名的下标,实现循环依次调用多个变量,每个用户名不一样counter函数有个弊端,只会无限增1,不能限定范围,越界里就取不到数据了,可以使用计数器解决越界问题

7)${__V(,)}:V函数,是一个拼接函数

  • 第一个参数:可以是变量,也可以是函数,相互进行拼接,能实现变量里调用函数和调用变量

${__V(user${num},)}:拼接变量和变量
${__V(user${__counrer(,)},)}:拼接变量和函数

8)计数器:不是函数,是一个配置元件—对比counter函数功能
计算器是一个配置元件,可以控制生成一个数字从哪里开始,到哪里结束并间隔多少,限定一个区间,不会像counter函数一样,越界就取不到值里

总结__counter函数与计数器的区别* __counter函数比较简单,只能从1开始递增,不能设置起始值和最大值,一般只会用来计算没如果用于做下标,可能会越界* 计数器可以设置起始值和最大值,还能设置数字格式和递增步长,更为灵活,长度可以限定,不会越界如果统计个数的话,用__counter函数会更好
如果用来作为数字下标,计算器会更好
两个使用都需要借助V函数来拼接

2.2 jmeter属性相关的函数

用户定义的变量,是可以跨线程组使用的。用户参数,不能直接跨线程组使用* 在jmeter中,除了用户定义的变量,其他任何元件中定义的变量名称都是用户参数类型,都不能跨线程组使用* 所以需要使用属性进行跨线程组的变量调用

Jmeter属性中,分为静态属性、动态属性

  • 静态属性:写在properties文件中的属性
  • 动态属性:运行过程中动态设置的属性,关闭Jmeter工具,会自动消失,这个属性是存在内存里的,
    【添加一个jmeter属性:在测试计划–非测试元件–属性显示,查看jmeter属性】

属性相关的操作

  • 设置动态属性的函数:${setProperty(,,)}
  • 获取属性函数:${property(,,)}或者${__P(,)}

属性的使用场景

  • 不能跨线程组船体的参数变量,如用户参数,可以设置为属性
  • 属性是工具的属性,所有在哪里都可以用
  • 在另外一个线程组中调用这个属性,实现变量的跨线程组使用

9)${setProperty(,,)}设置动态属性函数

  • 在函数里设置属性的名字和属性值,属性值可以设定固定值没有诶可以调用变量获取动态数据
  • 调用${setProperty(,,)}函数,才会添加属性成功,如:在调试取样器或后置调试处处理程序里调用这个设置属性函数,执行就可以了
  • 运行jmeter脚本,会执行这个函数的调用
  • 一旦设置了属性,要关掉jmeter工具,才会释放,没关闭工具,属性一直都可用—存在内存中

10)${property(,,)}${__P(,)} 获取属性函数

  • 直接调用jmeter属性的值,因为属性是多个线程组共享的,这样可以实现用户参数跨线程组使用

  • jmeter工具执行顺序
    如果同一个线程组多个取样器,是从上到下依次执行的
    如果多个线程组之间,并行执行,没有严格先后顺序

  • 如果设置两个线程组,一个设置属性,一个获取属性,执行过程中,会出现如下现象:
    因为jmeter中,默认的时候,多个线程组是并行运行的,有可能出现先后的执行差异
    所以获取属性第一次可能没有值,但是不影响性能测试的结果。因为性能测试中执行的总次数远远大于1次
    在功能测试中,如果希望每一次都可以取到值,可以设置固定定时器,延迟启动

相关文章:

  • Android14 app被冻结导致进程间通信失败
  • NumPy 数组排序
  • 【Zephyr 系列 28】MCU 闪存文件系统详解:LittleFS + NVS + 块设备设计实战
  • Mybatis踩坑之一天
  • Kafka 原理与核心机制全解析
  • 【unitrix】 4.1 类型级加一操作(Add1.rs)
  • Vmware WorkStation 17.5 安装 Ubuntu 24.04-LTS Server 版本
  • Qt项目,记事本
  • windows桌面连接ubuntu, 设置VNC
  • BERT 模型准备与转换详细操作流程
  • 科学计算库 Numpy
  • 软件工程核心知识全景图:从需求到部署的系统化构建指南
  • 【AI智能体】Spring AI MCP 服务常用开发模式实战详解
  • 命令行中SSH本地端口转发和反向远程端口转发
  • 计算机网络课程设计--基于TCP协议的文件传输系统
  • linux VFS简介
  • 笔式胰岛素简单拆解
  • SAP金属行业解决方案:无锡哲讯科技助力企业数字化转型与高效运营
  • P99延迟:系统性能优化的关键指标
  • 408考研逐题详解:2010年第3题——后序线索二叉树
  • 手机网站可以做英文版本吗/免费做网站的网站
  • 大庆百度做网站多少钱/seo学堂
  • 怎么做网站代销/制作公司网站
  • 公司网站建设公司排名/营销渠道策划方案
  • 公司网站建站流程/关键词歌词表达的意思
  • 网站开发建设企业/品牌营销策划有限公司