• jmeter参数化4、函数助手


    FunctionHelper

    4.1_csvRead 函数

    4.1.1函数介绍

    _cvsRead函数从一个文件中读取参数。

    多线程运行时,函数值才会变化,每个线程依次取值,当线程数大于函数可取值个数时,会从头循环取值。

    仅单线程循环运行时,函数的值为固定值,始终为第一次取的值。

    CSV file to get values from | *alias:表示要读取的文件路径,需要是绝对路径(放在和脚本相同目录直接写文件名是不能正确读取到的)。

    CSV文件列号| next| *alias:表示当前变量读取第几列数据,从第0列开始。

    4.1.2使用方式

    1、 将生成的函数直接放到需要使用的地方

    2、 察看运行结果

    注意:如果中文乱码,需要修改文件格式为GB2312格式。

    4.2_Random 函数

    从一个数据段中随机读取数据替换参数。

    多线程运行,或者单线程循环运行,该值均会更新。

    4.3_split 函数

    4.3.1函数介绍

    将一个字符串或者一个变量,分割成多个值

    String to split:需要进行分割的字符串或者变量。

    函数名称。存储变量名,可以在其他地方进行使用。

    String to split:分割符。

    4.3.2使用方式

    1、定义传入的变量的值

    2、使用forEach控制器循环取出split函数生成的值

    3、请求结果

    4.4_counter函数

    4.4.1函数介绍

    该函数功能和计数器相同。

    第一个参数:True,每个线程的计数器保持独立。False,全局,所有线程共用的计数器。

    第二个参数:存储脚本返回结果的变量名,当函数为${__counter(false,i)}时,可以直接调用函数${__counter(false,i)},也可以调用${i},效果相同。

    4.4.2使用方式

    比如有一个论坛的业务分布如下,回复帖子与开新帖的比例为3:2,在测试中控制业务比例,两种方式:

    1.多线程组方式

    2.逻辑控制器控制

    多线程组方式:

    我们知道JMeter是用线程组来模拟虚拟用户的,JMeter还可以支持一个计划中多个线程组。利用这个特性我们可以把开新帖业务放在一个线程组中,回帖业务放在另外一个线程组中。为了制造出业务量的比例关系,我们通过控制线程数来达到效果。如下图:

    ReplayTopic为回帖线程组,添加90个线程;

    SendTopic为开新帖线程组,添加60个线程,刚好是3:2。

    当然,这只能是近似的,如果这两个事务的响应时间不一样,最终完成的业务数比例也会不一样。

    当前线程数是在假定两个业务的响应时间一样的情况下,所以这完全是理想状况。

    因为需要模拟的是单线程的操作比例,而单线程循环请求的特征,是需要等当前请求得到响应之后,才会继续下一个请求。所以此处直接使用多线程模拟不合适。

    下面我们用第2种方式:

    控制器控制

    下图是一个IF控制器,IF控制器可以使用表达式来做为条件,这样我们事以获取迭代次数来决定是回帖还是开帖,比如一共3次迭代,第1次与第3次迭代时开新帖,1,2,3次迭代都会进行回帖

    接下来我们就要获取迭代次数,JMeter函数助手提供了一个__counter函数,可以用来获取当前的迭代次数。

    ${__counter(true,)}%2==1||${__counter(true,)}%3==0

    上面__counter(true,)是获取当前迭代次数,%是取余,也就是除2余1与3整除时执行开新帖。

    9次迭代为例,回帖9次,1,3,5,6,7,9 次迭代时都会开新帖,回刚好是6次

    9:6=3:2

    基本上保护了3:2的比例。

    ${__counter(true,)}%2==1||${__counter(true,)}%3==0

    写法2:${__counter(true,)}%3!=0

    4.5_time函数

    格式:非必填项,格式如果不填那么就是默认获取当前时间的毫秒数(此项也常被用于接口参数中那些不允许重复的字段);

    参数名称:非必填项,如果填了,则生成的时间会被放到该参数中,可以在任意地方调用这个参数,常用于多接口中某个值使用同一个时间参数的情况;

     

    ${__time(,)}:获取当前时间的毫秒数;

    ${__time(/1000,time_s)}:获取当前时间的秒数并存入参数time_s中;

    ${__time(yyyy-MM-dd,time_date1)}:获取当前日期并存入参数time_date1中;

    ${__time(yyyyMMddHHmmss,time_1)}:获取当前时间,固定格式,并存入参数time_1中;

    日期格式可以根据情况灵活填写。

  • 相关阅读:
    sql优化
    多字段in
    最大值对应的行数据
    spring boot admin
    git + idea 操作
    css 多行溢出显示省略号失效
    Android输入系统(7)——Linux input子系统代码分析与调试 Hello
    Java中的正则表达式 Hello
    mybatis 中文路径报错处理
    React 18 之 useTransition
  • 原文地址:https://www.cnblogs.com/hushuer/p/16140591.html
Copyright © 2020-2023  润新知