JMeter使用小功能-(持续更新)

1、jmeter在同一个线程组内,uuid的复用

  1. 方式一:

  2. 方式二:

2、获得jMeter使用的线程总数

ctx.getThreadGroup().getNumberOfThreads()来表示活动线程总数

java 复制代码
int threadNum=ctx.getThreadGroup().getNumThreads(); 
String threads = Integer.toString(threadNum);
log.info("线程"+threads);

3、Jmeter中使用JSON提取器获取数组中的多个值(id)拼接

1、JSON提取器中勾选 Compute concatenation var(suffix_ALL)

直译:计算串联变量(后缀_ALL),例如我设置的变量名称itemid,那么拼接字符串变量就是 itemid_ALL

通过调试取样器可见返回的 itemid_ALL 值。

4、Jmeter-获取本月第一天和最后一天日期时间,并转换为时间戳

java 复制代码
import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.*;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//获取当前月第一天:
    Calendar c = Calendar.getInstance();   
    c.add(Calendar.MONTH, 0);
    c.set(Calendar.HOUR_OF_DAY,0);
    c.set(Calendar.MINUTE,0);
    c.set(Calendar.SECOND,0);
    c.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天 
    String first = format.format(c.getTime());
    vars.put("first",first);

//获取当月最后一天:
     Calendar ca = Calendar.getInstance();    
     ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));  
     ca.set(Calendar.HOUR_OF_DAY,23);
    ca.set(Calendar.MINUTE,59);
    ca.set(Calendar.SECOND,59);
     String last = format.format(ca.getTime());
     vars.put("last",last);

//将日期格式转换为时间戳
String begin = vars.get("first");
String end =  vars.get("last");
Date beginTime1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(begin);
Date endTime1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(last);
String beginTime = String.valueOf(beginTime1.getTime());
String endTime = String.valueOf(endTime1.getTime());
vars.put("beginTime",beginTime);
vars.put("endTime",endTime);

5、将long类型转换成String类型

java 复制代码
long num = 1234567890L;
String str = String.valueOf(num);
vars.put("str",str);

示例:

java 复制代码
long today_time = ${__groovy(new java.text.SimpleDateFormat("yyyy-MM-dd").parse('${__time(yyyy-MM-dd,)}')getTime(),)}L;
String str = String.valueOf(today_time);
vars.put("todaytime",str);

6、JMeter中实现某个值的递减

  1. 定义变量

  2. 使用内置函数

java 复制代码
${__intSum(${num},-1,num)}
  1. 示例

    使用beanshell脚本自减
java 复制代码
int newid=Integer.parseInt("${__P(new_id,)}");//获取全局变量
newid--; //自减
vars.put("new_id",newid+""); //保存到变量
return newid;

多线程执行的时候不会自减,那是因为每个线程都是独立的,会重新初始化,我上面的都是在循环内执行自减的;如果要根据多个线程数达到自减的目的,可以想办法使用jmeter的函数 KaTeX parse error: Expected group after '_' at position 2: {_̲_threadNum} 得到线...{__threadNum}

java 复制代码
int max=Integer.parseInt("${__P(new_id,)}");//获取全局变量
int threadnum= Integer.parseInt("${__threadNum}");
int newnum=max-threadnum;
vars.put("new_id",newnum+"");
return newnum;


7、生成随机浮点数

JMeter 如何生成指定取值范围、指定小数位数的随机浮点数

可以使用函数 __javaScript 来执行 JavaScript 代码片:

javascript 复制代码
${__javaScript((Math.random() * (100)).toFixed(2) * 1,)}

以上将生成 0 ~ 100 的带两位小数的浮点数。说明如下:

  • Math.random() 生成 0 ~ 1 的小数
  • Math.random() * (100) 生成 0 ~ 100 的浮点数
  • toFixed(2) 将生成的浮点数保留 2 位小数

如果想生成 100 ~ 200 内的带两位小数的浮点数,可以:

javascript 复制代码
${__javaScript((Math.random() * (100)).toFixed(2) * 1 + 100,)}

生成 100 ~ 200 内的带两位小数的浮点数效果如下:

8、日期循环递减

java 复制代码
String date = "${__timeShift(yyyy-MM-dd,,P-${__counter(,)}D,,)}";
vars.put("date",date);
java 复制代码
-- 可以指定开始时间
${__timeShift(yyyy-MM-dd 00:00:00,2018-01-06 00:00:00,P-${__counter(,)}D,,)}
相关推荐
程序员龙叔11 天前
编写高质量 Skill 系列 -- 如何设计需求分析与用例生成的 SKILL
自动化测试·软件测试·python·软件测试工程师·接口测试·性能测试·skill·ai测试
小森林之主12 天前
Python re 模块速查:从实战对比中掌握正则表达式
python·正则表达式·性能测试·re模块·编程实战
程序员龙叔12 天前
从 0 开始学习 AI 测试 - 从接口测试来教你如何用 AI 来生成自动化测试代码
自动化测试·软件测试·python·软件测试工程师·测试工具·性能测试·ai测试
Saniffer_SH12 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
糖果店的幽灵13 天前
软件测试接口测试从入门到精通:JMeter接口测试
软件测试·jmeter·接口测试·压力测试·性能测试
1candobetter14 天前
JMeter 性能压测监控实战
jmeter
wenying_4432374415 天前
软件测试—JMeter—跨线程组关联
jmeter·压力测试
川石课堂软件测试15 天前
UI自动化测试|下拉选择框&弹出框&滚动条操作实践
开发语言·python·jmeter·ui·docker·单元测试·harmonyos
HBYKKJ16 天前
格雷希尔G70-370L050N定制款密封测试接头,专门针对法兰式凸缘管口而设计,解决SF6压力表的气密性测试难题
功能测试·压力测试·快速接头·气密性测试·密封测试接头
不剪发的Tony老师16 天前
SQLQueryStress:一款SQL Server查询压力测试工具
数据库·sqlserver·压力测试