jmeter做压测时,生成唯一标识的四种方法

jmeter做压测时,生成唯一标识

背景

​ 有些项目的字段值,有唯一性校验,不能输入重复,但是做压测的时候,又需要生成大量的数据,所以需要做成参数化,并且不能重复。

方法一:利用jmeter内置组件,计数器

选中线程组层级,右键,选择添加->配置元件->计数器。

在这里插入图片描述

计数器配置如下图:

在这里插入图片描述

参数介绍:

①Starting value:给定计数器的起始值、初始值,第一次迭代时,会把该值赋给计数器;

②递增:每次迭代后,给计数器增加的值;

③数字格式:可选格式,比如000,000000;

④引用名称:用于在脚本中引用该变量,如${num};

⑤与每用户独立的跟踪计数器:全局的计数器。如果不勾选,即全局的,比如用户#1 获取值为1,用户#2获取值还是为1,比如,并发数设置为2,循环次数设置为2,分布式压测启动2个压力机,那么会有四组2个请求的计数器是一样的。如果仅勾选这个,即每个线程组独立使用计数器,比如比如,并发数设置为2,循环次数设置为2,分布式压测启动2个压力机,那么会有两组4个请求的计数器是一样的

⑥在每个线程组迭代上重置计数器:可选,仅勾选与每用户独立的跟踪计数器时可用;如果勾选,则每次线程组迭代,都会重置计数器的值,当线程组是在一个循环控制器内时比较有用。比如,并发数设置为2,循环次数设置为2,分布式压测启动2个压力机,那么会有一组8个请求的计数器是一样的。

上面这种方法,执行分布式压测的时候,就不能实现唯一标识的生成了,总是会有重复的,因为每台机器都用自己的全局变量。

方法二:利用bean sampler写生成随机UUID的方法

在这里插入图片描述

import java.util.UUID;

UUID uuid1 = UUID.randomUUID();
vars.put("id",(uuid1.toString().replaceAll("-","")))

如果需要使用该变量,则使用

在这里插入图片描述

以上这种方法,很少概率会生成重复的uuid,作为压测的入参。

方法三:利用bean sampler写生成当前时间戳的方法

在这里插入图片描述

vars.put("timestamp","${__time(,)}");

以上这种方法,几乎不会生成重复的uuid,作为压测的入参。

方法四:利用DB或者redis等中间件创建一个字段

第一步:下载mysql驱动,参考文章:https://www.cnblogs.com/fanf/p/15745037.html

第二步:创建数据库配置原件

在这里插入图片描述

第三步:输入本地数据库连接信息,必填参数如下

在这里插入图片描述

第四步:创建数据库请求

在这里插入图片描述

第五步:数据库请求参数如下

在这里插入图片描述

第六步:使用变量,一定要在上面步骤设置的变量名后面加个下划线,代表的是第一行记录,从1开始

在这里插入图片描述

第七步:执行完脚本的http请求后,立马更新刚才的cur_range字段

在这里插入图片描述

可以看一下user表的数据结构

在这里插入图片描述

但是这种方式有一个小问题,第一次跑脚本的时候,因为是同时进入脚本的,所以查询出来的值都是初始值,会导致第一个迭代查询到的cur_range都是一样的。

如下图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

解决办法:先做数据的更新,再做查询,因为更新操作数据库本身会有锁,则会有先后顺序。创建订单都成功了。

在这里插入图片描述

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值