Jmeter 函数助手之__RandomString的用法

__RandomString的用法

1.功能:随机生成字符串,如英文名,性别等

2.格式:必填;可以设置生成字符串的长度;例如:6位数字或者数字加字母混合等等

3.范围:必填;代表是从什么范围取值,自己根据要求填写,比如:数字或者字母或者数字和字母混合填写

4.变量设置:非必填

5.填写完成后,点击生成就可以看到随机生成的字符串。见下图

6.也可以将参数做拼接处理,比如:下图id字段内容是w_随机6位数,写成:W-${__RandomString(6,ABC123456789DFGZHJAHS,)}

见下图:

个人总结,仅供参考、如有不足,请指正,谢谢!!

 

 

<think>嗯,用户给了一个关于JMeter中优化手机号传参的问题。首先,我需要仔细理解用户提供的JSON结构和他们的需求。用户希望优化手机号参数,可能是在进行性能测试时需要生成大量唯一的手机号,避免重复导致的问题。 首先,用户提供的手机号是"152${__Random(11111111,99999999,)}",这里用了JMeter的__Random函数生成8位随机数。但这种方法可能存在重复的风险,尤其是在高并发或长时间运行的测试中,因为8位数的范围虽然大,但随机数生成器可能会有碰撞。另外,用户可能还希望手机号更真实,比如符合运营商号段,或者需要参数化其他字段如visitorId。 接下来,我需要考虑如何优化。首先,确保手机号的唯一性。__Random函数可能不够,可以考虑使用__RandomString或者更可靠的方法,比如时间戳加上随机数,或者计数器(__counter)来生成唯一值。例如,将手机号格式改为152加上时间戳的部分,再加上随机数,这样可以大幅降低重复概率。 另外,用户可能没有提到是否需要符合真实手机号的格式。中国的手机号通常以13x、15x、18x等开头,后面跟8位数字。用户当前使用的是152开头,这没问题,但可能需要更多变体,比如使用不同的号段,这时候可以用__CSVRead函数从文件中读取预定义的号段,或者用__RandomFromMultipleVars来随机选择不同的前缀。 然后,visitorId也是类似的,用户用了1加上8位随机数,可能同样存在重复的问题。可以考虑使用UUID函数(__UUID)来生成唯一标识符,这样确保全局唯一性。 另外,用户提供的JSON中有其他字段如smsCode、scene、channelPromotionCode等,目前是固定值。可能需要参数化这些字段,尤其是smsCode,如果测试需要不同的验证码,可以使用随机字符串或者从数据文件中读取。 关于JMeter的最佳实践,用户可能需要将动态参数提取到用户定义的变量中,或者使用CSV数据文件来管理测试数据,这样方便维护和重用。同时,使用后置处理器如JSON提取器或正则表达式提取器来获取服务器返回的动态值,并在后续请求中复用,这能提高脚本的灵活性和真实性。 最后,还需要考虑性能优化,比如参数生成的方式是否高效,是否会导致JMeter本身成为瓶颈。使用内置函数通常性能较好,但需要确保生成的数值足够唯一且符合测试需求。 总结下来,优化点包括:确保手机号和visitorId的唯一性,使用更可靠的生成方法,参数化其他字段,以及采用数据文件或更高级的函数来提高脚本的维护性和真实性。</think>在JMeter中优化手机号传参可以通过以下步骤实现,确保测试数据的有效性和可维护性: --- ### **一、当前数据结构分析** ```json { "phone": "152${__Random(11111111,99999999,)}", "smsCode": "string", "scene": "string", "channelPromotionCode": "xqdlj", "city": "", "visitorId": "1${__Random(11111111,99999999,)}", "source": "" } ``` - **问题点**:手机号`phone`和访客ID`visitorId`使用随机数生成,可能导致重复或不符合业务规则。 --- ### **二、优化方案** #### **1. 手机号唯一性优化** **目标**:生成符合运营商规则且唯一的手机号 **方法**: ```java // 使用时间戳+随机数生成唯一手机号 ${__time(yyMMddHHmmss,)} // 生成12位时间戳 ${__Random(1000,9999,)} // 生成4位随机数 ``` **优化后**: ```json "phone": "152${__time(yyMMddHHmmss,)}${__Random(1000,9999,)}" ``` --- #### **2. 参数化其他字段** **目标**:提升测试数据的灵活性 **方法**: - 使用`CSV Data Set Config`管理参数: ```csv # testdata.csv smsCode,scene 123456,login 654321,register ``` - 配置JMeter: ``` Filename: testdata.csv Variable Names: smsCode,scene ``` --- #### **3. VisitorId全局唯一性** **目标**:生成分布式环境下唯一的访客ID **方法**: ```java // 使用UUID或时间戳+IP地址 "visitorId": "${__UUID}" // 或 "visitorId": "${__machineIP}_${__time(yyMMddHHmmss,)}" ``` --- #### **4. 动态提取城市信息(可选)** **目标**:模拟不同城市用户 **方法**: - 使用`User Defined Variables`定义城市列表: ```java city_1=北京 city_2=上海 city_3=广州 ``` - 使用`__RandomFromMultipleVars`随机选择: ```json "city": "${__RandomFromMultipleVars(city_1|city_2|city_3,|)}" ``` --- ### **三、完整优化后的JSON** ```json { "phone": "152${__time(yyMMddHHmmss,)}${__Random(1000,9999,)}", "smsCode": "${smsCode}", "scene": "${scene}", "channelPromotionCode": "xqdlj", "city": "${__RandomFromMultipleVars(city_1|city_2|city_3,|)}", "visitorId": "${__UUID}", "source": "" } ``` --- ### **四、验证与调试** 1. **使用调试取样器(Debug Sampler)**:检查变量值是否按预期生成 2. **查看结果树(View Results Tree)**:验证JSON请求体格式 3. **压力测试验证**:监控重复率是否降低(通过`Response Assertion`检查) --- ### **五、扩展建议** - **使用BeanShell脚本**:生成更复杂的手机号逻辑 ```java vars.put("phone", "152" + new java.util.Date().getTime() % 100000000); ``` - **分布式测试**:在`user.properties`中配置全局唯一前缀,避免多机ID冲突 通过以上优化,既能保证数据唯一性,又能提升测试场景的真实性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值