JMeter 生成随机身份证号码方法详解
在使用 JMeter 进行接口测试时,我们经常需要使用一些测试数据,比如身份证号码。本文将介绍两种在 JMeter 中生成身份证号码的方法:使用
mock.js
插件和调用外部 Java 代码。
使用 mock.js
插件
mock.js
是一个用于生成随机数据的 JavaScript 库,它可以方便地生成各种格式的数据,包括身份证号码。我们可以使用 metersphere-jmeter-functions
插件在 JMeter 中使用 mock.js
的功能。
安装插件
下载插件:
https://github.com/metersphere/jmeter-functions/releases上边链接已经失效,补充新的下载链接 metersphere-jmeter-functions-v1.0.1.zip
将下载的
jar
包放到 JMeter 目录lib\ext
文件夹下。重启 JMeter。
使用方法
安装插件后,我们就可以使用 ${__Mock()}
函数来调用 mock.js
的方法。例如,要生成一个 18 位的身份证号码,可以使用以下表达式:
${__Mock(@id)}
你可以在 JMeter 的函数助手中查看该函数的效果
也可以在 HTTP 请求中使用该函数
mock.js
的更多用法
mock.js
提供了丰富的 API 用于生成各种格式的数据,你可以在 https://github.com/nuysoft/Mock/wiki 查看详细的文档。
使用外部 Java 代码
除了使用插件,我们还可以编写 Java 代码来生成身份证号码,并将代码放到 JMeter 中调用。
编写 Java 代码
以下是一个生成随机身份证号码的 Java 代码示例:
package com.example;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
public class IdCardUtil {
// 定义省、市、县代码数组,方便后续随机取值
private static final String[] PROVINCES = {"11", "12", "13", "14", "15", "21", "22", "23", "31", "32", "33", "34", "35", "36", "37", "41", "42", "43", "44", "45", "46", "50", "51", "52", "53", "54", "61", "62", "63", "64", "65", "71", "81", "82"};
private static final String[] CITYS = {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "21", "22", "23", "24", "25", "26", "27", "28"};
private static final String[] COUNTIES = {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38"};
// 定义校验码数组
private static final String[] CHECK_CODE = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
// 定义校验码权重数组
private static final int[] WEIGHT = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
// 定义日期格式化工具
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
/**
* 生成随机身份证号码
*
* @return 18 位随机身份证号码字符串
*/
public static String getRandomID() {
Random random = new Random();
// 随机生成省、市、县代码
String province = PROVINCES[random.nextInt(PROVINCES.length)];
String city = CITYS[random.nextInt(CITYS.length)];
String county = COUNTIES[random.nextInt(COUNTIES.length)];
// 随机生成出生日期
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.YEAR, -random.nextInt(100)); // 随机生成100年内的日期
String birth = DATE_FORMAT.format(calendar.getTime());
// 随机生成顺序号
String no = String.format("%03d", random.nextInt(1000));
// 计算校验码
String check = getCheckCode(province + city + county + birth + no);
// 拼接身份证号码
return province + city + county + birth + no + check;
}
/**
* 计算身份证校验码
*
* @param idCardNo 17 位身份证号码字符串
* @return 校验码,如果输入字符串不合法则返回 null
*/
private static String getCheckCode(String idCardNo) {
if (idCardNo == null || idCardNo.length() != 17) {
return null;
}
int sum = 0;
for (int i = 0; i < 17; i++) {
sum += Integer.parseInt(String.valueOf(idCardNo.charAt(i))) * WEIGHT[i];
}
int codeIndex = sum % 11;
return CHECK_CODE[codeIndex];
}
}
在 JMeter 中调用 Java 代码
将上面的 Java 代码保存到一个文件中,例如
IdCardUtil.java
。在 JMeter 中添加一个 BeanShell 后置处理器。
在 BeanShell 后置处理器中使用
source()
函数加载 Java 代码文件,并调用IdCardUtil.getRandomID()
方法生成身份证号码:
// 注意:Windows 下路径中的 "\" 需要替换成 "\\"
source("你的本地存储地址路径\\IdCardUtil.java");
vars.put("idCardNum", IdCardUtil.getRandomID());
log.info("生成的身份证号------>" + vars.get("idCardNum"));
这段代码会将生成的身份证号码保存到 JMeter 变量 idCardNum
中,你可以在后续的请求中使用该变量。
总结
本文介绍了两种在 JMeter 中生成身份证号码的方法:使用 mock.js
插件和调用外部 Java 代码。两种方法各有优缺点,你可以根据实际情况选择合适的方法。
利用
mock.js
插件,可以轻松实现模拟数据的生成,操作简单便捷。通过运用外部 Java 代码,我们可以更加灵活地自定义生成规则,但这需要一定的 Java 编程技能。