1、利用__counter()函数搭配if控制器
如果想用${__counter(参数1,参数2)}函数,那么就要首先了解这个函数的作用是什么。
参数1:只能是true,false。如果您希望每个模拟用户的计数器保持独立并与其他用户分开,则为TRUE。 False是对全局请求进行计数。如果=false就是统计全部执行的线程,不论这个线程执行那个取样器都被统计。
参数2:用于重用此函数创建的值的引用名称。存储的值的格式为$ {refName}。这允许您保留一个计数器并在多个位置引用其值。就是你把计数器的值保存到一个变量中,可以使用这个变量。
这个需要结合if控制器一起使用,每个取样器被执行前需要if控制器做判断,本次调用是否可以执行这个取样器,由于if控制器的表达式必须返回的true或者是false,所以需要结合函数__jexl3来使用,这个函数就是转换表达式为boolean值。
demo中期望取样器getUserAppToken-an-30%调用量:getUserAppToken-user-70%调用量的执行比例是3:7,那么if控制器的表达式分别是:
getUserAppToken-an-30%对应的if控制器表达式:${__jexl3(${__counter(false,threadNum)}%10<3,)}
getUserAppToken-user-70%对应的if控制器表达式:${__jexl3(${__counter(false,threadNum)}%10>=3,)}
表达式的解释:连个接口的执行比例是3:7那么就是分成10分第一个方法执行30,第二个方法执行70,那么根据计数器的当前的值取10的模如果小于3就执行方法1如果大于3就执行方法2,这个是个数学题了,如果多个方法,比例不同那么还是需要先计算好这个比例。根据上面的设置执行方法,执行完后的结果如下图: