用户数据包括:
{
“account”: “mijiayan665”, (登录账号:姓名拼音+序号)
“telephone”: “11111111111”, (电话:数字,无要求*)
“email”: “3995860@173.123”, (邮箱:要有@及.符号)
“userStatus”: 1, (用户状态:1为启用、2为禁用)
“tenantId”: “********”, (租户ID:所属租户id)
“realName”: “糜嘉延665”, (真实姓名:姓名汉字+序号,与登录账号相对应一致)
“isAdmin”: “0”,
“userType”: 1,
“roleIds”: [
“577013754324455424”(角色ID:与系统角色相一致)
],
“companyId”: “10011000000”,(公司ID:用户所属公司)
“departmentIds”: [
“10012000210”
],
“isVip”: “N”,
“authTenantIds”: [
“1001”
],
“id”: “577720498533699587”(用户ID:在系统中具有唯一性)
}
1、创建用户中文名
使用Jmeter自带的RandomString函数:
${__RandomString(1,赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎,xing)}${__RandomString(2,文林欣德和泽子墨鸿哲兴贤良翰翰池景澄乐成俊晖嘉誉睿诚康安鹏程浩漫永年豪杰正梧浩晔光康天豪东瑜豪祥利综皓枫祥晴豪冰晨泽茹铭雪宪豪天晨冰冰悦祥孝天晓钟校杰椒冰铭涵魁嘉志棕皓瑞亭浩鸣子南鉴清浩航梓舒凌安云孜瑞迅雨星振链懿浩灏宇旭扬濮铭礼程铭心明寿程磊宁含亦民胜晨鸿树忆旭雨广铭海章毓秋恒宇学晨成博锌军宸慕富俊杰和志景浩安国奇希翰藻正豪承安雨华永寿彭湃志奇玮飞舟凯泽晟睿永嘉兴学专理群巍昂阳云正真永康伟毅吉星正文英卓星雨嘉勋博延飞鹏天宇康适鹏池运杰俊名俊健锐智光亮嘉树良奥德馨嘉志玉书经略飞航嘉荣光翰骞泽和风俊哲高懿文翰嘉赐曾琪乐池高轩宇寰文斌璞玉承基兴平烨然泽语建义子实元化明诚彬彬建中涵畅星,ming)}${__Random(1,2000,usernum)}")
第一个随机函数生成用户的姓,并把生成的姓赋值给“xing”;第二个随机函数生成用户的名,并把生成的姓赋值给“ming”,这里生成的名是两个字的,可以改成一个或三个;第三个随机函数生成用户的序号,并把用户序号赋值给“usernum”。由于我需要的用户数据是50W,怕用户有重复,所以加上了用户序号,如果有更多需要可以在姓和名中加入更过的数据。
2、根据用户名生成登录账号
JAVA有第三方依赖包pinyin4j-2.5.0.jar,可以实现将汉字自动转换为拼音,可自行下载。
在测试计划中引用下载到本地的依赖包,如上图。
并在创建用户的HTTP请求下添加BeanShell 预处理程序,并将下面代码复制到bean shell中:
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
public static String ToPinyin(String chinese){
String pinyinStr = "";
char[] newChar = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < newChar.length; i++) {
if (newChar[i] > 128) {
try {
pinyinStr += PinyinHelper.toHanyuPinyinStringArray(newChar[i], defaultFormat)[0];
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
}else{
pinyinStr += newChar[i];
}
}
return pinyinStr;
}
String name_test = ToPinyin("${__RandomString(1,赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董粱杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯昝管卢莫经房裘缪干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀羊於惠甄麴家封芮羿储靳汲邴糜松井段富巫乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭厉戎祖武符刘景詹束龙叶幸司韶郜黎蓟薄印宿白怀蒲邰从鄂索咸籍赖卓蔺屠蒙池乔阴欎胥能苍双闻莘党翟谭贡劳逄姬申扶堵冉宰郦雍舄璩桑桂濮牛寿通边扈燕冀郏浦尚农温别庄晏柴瞿阎充慕连茹习宦艾鱼容向古易慎戈廖庾终暨居衡步都耿满弘匡国文寇广禄阙东殴殳沃利蔚越夔隆师巩厍聂晁勾敖融冷訾辛阚那简饶空曾毋沙乜养鞠须丰巢关蒯相查後荆红游竺权逯盖益桓公,xing)}${__RandomString(2,文林欣德和泽子墨鸿哲兴贤良翰翰池景澄乐成俊晖嘉誉睿诚康安鹏程浩漫永年豪杰正梧浩晔光康天豪东瑜豪祥利综皓枫祥晴豪冰晨泽茹铭雪宪豪天晨冰冰悦祥孝天晓钟校杰椒冰铭涵魁嘉志棕皓瑞亭浩鸣子南鉴清浩航梓舒凌安云孜瑞迅雨星振链懿浩灏宇旭扬濮铭礼程铭心明寿程磊宁含亦民胜晨鸿树忆旭雨广铭海章毓秋恒宇学晨成博锌军宸慕富俊杰和志景浩安国奇希翰藻正豪承安雨华永寿彭湃志奇玮飞舟凯泽晟睿永嘉兴学专理群巍昂阳云正真永康伟毅吉星正文英卓星雨嘉勋博延飞鹏天宇康适鹏池运杰俊名俊健锐智光亮嘉树良奥德馨嘉志玉书经略飞航嘉荣光翰骞泽和风俊哲高懿文翰嘉赐曾琪乐池高轩宇寰文斌璞玉承基兴平烨然泽语建义子实元化明诚彬彬建中涵畅星,ming)}${__Random(1,2000,usernum)}");
vars.put("pinyinname",name_test)
上面的代码会自动将生成的中文名转换为拼音,并且将拼音赋值给“pinyinname”。
3、创建用户数据
经过上面的两步最大的问题已经基本解决,下面可以直接调用创建接口:
报文数据如下:
{
"account": "${pinyinname}",
"telephone": "11111111111",
"email": "${__Random(1111111,9999999)}@${__Random(1,200)}.123",
"userStatus": 1,
"tenantId": "1001",
"realName": "${xing}${ming}${usernum}",
"isAdmin": "0",
"userType": 1,
"roleIds": [
"577013754324455424"
],
"companyId": "10011000000",
"departmentIds": [
"10012000210"
],
"isVip": "N",
"authTenantIds": [
"1001"
],
"id": "${userid}"
}
报文中:“account”引用的是生成的姓名拼音;“email”是使用随机函数生成无效邮箱,也可根据数据要求进行相应修改;“realname”通过引用姓+名+序号的形式生成的,可以保证与account的拼音相一致;这里“id”是后端生成的,所以这里是先调用了生成用户ID的接口并用正则提取器提取到这里,也可直接使用Jmeter随机函数自动生成。
注:要想把测试数据创建的真实且合适需要考虑真实场景需要,万万没想到创建测试数据也踩过这么多坑,测试人共勉!