JMeter中如何构造一个唯一ID(性能测试,持续集成群:842104845 欢迎加入!!!)

在编写JMeter测试脚本时我们经常会碰到构造一个唯一ID,下面我们说下常用的构造方法:

 

1.使用UUID,JMeter函数助手给大家提供了一个UUID()函数,UUID来生成一个附机字符串。

  __UUID()生成的格式类似8e9464d2-4561-453e-8005-ad0a44507640,貌似一些订单ID好像使用UUID并不合适。

 

2.RandomString(),指定种子生成指定长期的字符串,如果迭代次数多的话可能会出现重复现象,单独这个函数不能满足要求。

有些工程师就用__RandonString()与__time()组合起来,只要TPS足够大还是可能会有重复现象的。

 

3.使用多个函数组合:{group}+{thread number}+{迭代计数}

   group:由于JMeter支持多个Group,所以要考虑多个Group的情况,于是我们把线程组编号也纳入组合中

   thread number:线程Number,组中的线程Number是唯一 的,group+thread number能够保证线程号唯一

   迭代计数:每个线程都有一个迭代计数量,记录脚本运行了多少次

  {group}+{thread number}+{迭代计数} 就可以保证生成一个唯一号,如果觉得不够长可以加上time({time}+{group}+{thread number}+{迭代计数} )。

   group获取:JMeter的线程组可以通过ctx来获取,线程组是类似这样的格式:线程组 1-1

   使用BeanShell来截取,${__BeanShell(((ctx.getThread().getThreadName().toString()).split(" ")[1]).split("-")[0],group)},并把线程组的Id放到了group中

   thread number获取:可以通过__threadNum获取

   time获取:通过__time(hhmmss,)获取,可以指定输出格式,这里只输出时分秒

   迭代计数器获取:通过__counter获取

  合在一起:${__time(hhmmss,)}${group}${__threadNum}${__counter(,)}  名称中直接用了BeanShell函数,在此可以触发截取group。

 

 这种方法有个弊端,就是每次运行Sampler时都会取一次group,这样多少影响效率,有没有一劳永逸的办法呢,当然有,我们可以用BeanShell Sampler,

并且把BeanShell Sampler放在仅一次控制器中,这样就只截取一次(Group在运行过程中是不变的),于是就是这样:

 

 

   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章