在使用 JMeter 进行接口测试时,我们经常需要使用一些测试数据,比如身份证号码。本文将介绍两种在 JMeter 中生成身份证号码的方法:使用 mock.js 插件和调用外部 Java 代码。

使用 mock.js 插件

mock.js 是一个用于生成随机数据的 JavaScript 库,它可以方便地生成各种格式的数据,包括身份证号码。我们可以使用 metersphere-jmeter-functions 插件在 JMeter 中使用 mock.js 的功能。

安装插件

使用方法

安装插件后,我们就可以使用 ${__Mock()} 函数来调用 mock.js 的方法。例如,要生成一个 18 位的身份证号码,可以使用以下表达式:

${__Mock(@id)}

你可以在 JMeter 的函数助手中查看该函数的效果

2024-08-24-dhltfcnd.png

也可以在 HTTP 请求中使用该函数

2024-08-24-umawrcub.png

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"));

2024-08-24-iciwqbrr.png

这段代码会将生成的身份证号码保存到 JMeter 变量 idCardNum 中,你可以在后续的请求中使用该变量。

总结

本文介绍了两种在 JMeter 中生成身份证号码的方法:使用 mock.js 插件和调用外部 Java 代码。两种方法各有优缺点,你可以根据实际情况选择合适的方法。

  • 利用 mock.js 插件,可以轻松实现模拟数据的生成,操作简单便捷。

  • 通过运用外部 Java 代码,我们可以更加灵活地自定义生成规则,但这需要一定的 Java 编程技能。

文章作者: 陆壹
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 陆壹笔记
测试 Java jmeter 自动化测试 java
喜欢就支持一下吧