jmeter 参数化大数据取唯一值方式
一、用时间函数:
因为时间戳永远没有重复,jmeter参数化,而且要取唯一值,可以考虑用时间函数加上其他函数一起:
# 以13位的时间戳作为 userID
nowTime = lambda: int(round(time.time() * 1000))
userID = str(nowTime())
print("userID--------" + userID)
输出结果:
userID--------1574172135349
每次输出的结果都不一样:
#!/usr/bin/env python # -*- coding: utf-8 -*- import time nowTime = lambda: int(round(time.time() * 1000)) userID = str(nowTime()) for i in range(0,10): print("userID--------" + userID) 输出结果: userID--------1574172365139 userID--------1574172365139 userID--------1574172365139 userID--------1574172365139 userID--------1574172365139 userID--------1574172365139 userID--------1574172365139 userID--------1574172365139 userID--------1574172365139 userID--------1574172365139
二、用UUID:
解决上面的问题,还可以用UUID来作为参数,UUID通常以36字节的字符串表示,示例如下:
3F2504E0-4F89-11D3-9A0C-0305E82C3301
ID多数是数字的,如果不需要 “-”,可以去掉。
如下是分析在jmeter中如何使用:
1,新建一个BeanShell Sampler;
在BeanShell Sampler编写UUID的代码: import java.util.UUID; UUID uuid1 = UUID.randomUUID(); //获取UID的值 vars.put("transferNo",(uuid1.toString()).toUpperCase().replaceAll("-","")); //去掉UUID的“-”,再赋值给transferNo 运行获取的参数就是:3F2504E04F8911D39A0C0305E82C3301 //vars.put("transferNo",(uuid1.toString()).toUpperCase()); //这个就是不用去掉UUID的“-” 运行获取到的参数就是:3F2504E0-4F89-11D3-9A0C-0305E82C3301
2,新建一个http请求;
在BeanShell Sampler获取到UUID的参数后,可以在http请求页面,直接用: "transferNo":"${transferNo}" 获取。
运行后,该参数值几乎不出现重复的问题。UUID可以根据自己需要的参数,进行优化。
三,直接写代码for循环生成大量唯一不重复的测试数据
#!/usr/bin/env python # -*- coding: utf-8 -*-
for i in range(1000000, 9000000):
k = i + 1
q = '2018' + str(k)
print('q ========= ' + q)
输出结果:
.........
q ========= 20181145532
q ========= 20181145533
q ========= 20181145534
q ========= 20181145535
q ========= 20181145536
q ========= 20181145537
.........
最后用txt或者excel将生成的大量数据导入jmeter进行并发请求。