好久没用jmeter了,此次趁着项目稳定后,用jmeter写了一些建立测试数据的脚本,由于手动建立数据太麻烦了正则表达式
本次编写脚本,一方面是经过查看后台请求,手动录入脚本,另外一方面用到了一些自带的函数来生成时间戳、生成随机数浏览器
因此本篇主要说一下此次写脚本的思路以及如何解决遇到的问题dom
1.总体思路
- 要想构造数据,首先必须登陆获取token,后续操做都依赖这个生成的token;
- 本次须要构造3种类型的数据,每种数据填写的字段不一样,因此编写脚本时,利用【事务控制器】,把不一样做用的脚本进行分类,例如登陆操做、构造A类型数据、构造B类型数据,这样脚本运行时,结果看起来一目了然;
- 不一样请求须要的headers可能不一样,因此把【HTTP信息头管理器】添加在各个【事务控制器】下,只对其下的请求生效(或者再细分添加某个具体请求下);
- 根据参数实际状况选用【HTTP请求默认值】以及【JSON提取器】、【正则表达式提取器】以及【函数助手】等,帮助实现参数化
2.编写过程当中的关键点
(1)响应结果中的中文字符显示成了“???”函数
编写好第一个脚本后,执行后查看结果,发现中文字符没有正常显示,以下测试
解决方法:在请求中,加上内容编码:utf-8编码
(2)添加时间戳 timestampspa
有些请求携带的参数中包含时间戳,能够是放在headers中,也能够是放在请求参数中翻译
在jmeter中,可以经过函数助手来生成时间戳3d
- 生成当前时间
依次点击【选项】-【函数助手对话框】,打开函数助手blog
而后选择【__time】函数,它能够生成各类形式的当前时间,展现以下
点击【帮助】会默认打开浏览器显示该函数的说明文档,谷歌硬核翻译以下
(1)不填写任何格式,直接点击【生成】,在结果区会展现一个13位的时间戳(毫秒级)
(2)若是要生成10位数字时间戳(秒级),则须要在格式字符中输入“/1000”
(3)生成特定格式的日期
帮助文档中提供了以下几种
- YMD = yyyyMMdd
- HMS = HHmmss
- YMDHMS = yyyyMMdd-HHmmss
依次来试一下
YMD,等价于yyyyMMdd,填写到格式字符串中,点击【生成】
HMS ,等价于 HHmmss
YMDHMS ,等价于 yyyyMMdd-HHmmss
也能够本身来自定义一下显示格式
以前说生成时间戳时,变量名是非必填的,下面看下填写变量名后是什么效果
注意:当点击【生成】后,“拷贝并粘贴函数字符串”后会出现一串变量名,这个能够理解为时间戳变量,把它放到请求参数中,就意味着获取到了当前时间,以下
- 根据当前时间进行位移(向前or向后移动指定时长)
有些请求会用到过去或未来的 某一个时间,jmeter有一个函数能够知足这个需求【__timeShift】
谷歌硬核翻译帮助文档以下
下面来试验一下
(1)显示格式为yyyyMMdd,时间基准20200420,向后推移2天
(2)显示格式为时间戳(毫秒级),时间基准为当前时间,向后推移10分钟
${__timeShift(,,PT10M,,)}
(3)显示格式为 yyyy/MM/dd HH:mm:ss,时间基准为 2020/04/17 17:38:00,向后推迟 10分20秒
${__timeShift(yyyy/MM/dd HH:mm:ss,2020/04/17 17:38:00,PT10M20S,,)}
(4)显示格式为 yyyy/MM/dd HH:mm:ss,时间基准为 2020/04/17 17:38:00,向前推 10分20秒
有2种写法:PT-10M-20S 或 -PT10M20S
ps.位移时间时,注意“-”添加的位置便可,“+”能够省略
添加时间戳一方面能够用到传时间参数这种状况下,直接丢个时间戳过去;另外一方面,例如批量造数据时,不想每一个数据的名称都同样,那么就能够用时间戳做名称后缀,以下
这样生成的数据就是:测试数据-20200417-141443
(3)生成随机数
一种是利用【__Random】函数(生成的随机数不惟一,可能会重复)
一种是利用【__UUID】函数(每次都会生成惟一的随机数)