学习用Jmeter生成证件号的方法

发表于:2022-5-18 09:32

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:测试开发实战    来源:知乎

  写在前面
  前几天五一放假期间,偶然在一个测试群里看到一位群友提问“Jmeter如何生成合法的身份证号”。我们都知道,如果是PythonJava语言,借助第三方库,很容易就能够模拟出合法的身份证号。在此之前,我也遇到过使用Jmeter生成身份证号的场景,但那时候我们的接口没有身份证号的合法校验。为了方便起见,在传参时都是用函数助手生成18位长度的随机数字字符串传递。于是,出于好奇和热心,在经过自己一番实践过后,解答了他的问题。因此,本篇也是一次解答群友问题的实践记录
  Jmeter生成身份证号的三种方法
  方法一:通过RandomString函数
  熟悉Jmeter的人都知道,Jmeter提供了函数助手的功能,通过函数助手中的RandomString函数可以生成指定长度的、随机的数字字符串,但这种方法生成的身份证号只符合了身份证号的长度规则,它并不合法。因此,这种方法的好处是简单快捷,缺点是不适用于后端接口存在合法性校验的情况。
函数助手

  方法二:通过CSV文件助手
  ① 模拟生成身份证号
  我们可以提前将在其他地方,比如下图网站中模拟生成好一些合法的身份证号数据,并复制到CSV文件中。
http://www.chineseidcard.com/

  ② 在Jmeter中引用CSV文件
  添加CSV Data Set Config元件,设置变量名id_card,在需要引用的地方使用${id_card}来引用即可。这种方法的好处是读取到的CSV文件中的身份证号是合法的,缺点是不适用于后端接口存在身份证号重复性校验的情况,因为脚本多次运行时,每次都会从头开始读取数据。
CSV Data Set Config

  方法三:通过BeanShell取样器读取Python文件
  很显然,当我们需要每运行一次Jmeter脚本就可以生成一个合法的、且不重复的身份证号时,以上两种实现方式就无法满足需求。这也引出了本次文章重点介绍的第三种方法,总体实现思路如下:
  ·python里有现成的第三方库faker库可以生成身份证号,可以编写一个python文件,引用faker库,定义一个生成身份证号的函数。
  · 然后在jmeter中添加一个beanshell取样器,在取样器中调用系统命令行执行python文件,同时定义一个变量来接收函数返回值,也就是身份证号。
Beanshell取样器

  1.python文件create_ssn.py文件内容如下:
  # coding:utf-8
  from faker import Faker
  fake = Faker(locale="zh_CN")
  def create_ssn():
      ssn = fake.ssn()
      print(ssn)
      return ssn
  if __name__ == '__main__':
      create_ssn()

  2.Beanshell脚本内容如下:
  String command = "cmd /c python C:\\create_ssn.py";
  Runtime rt = Runtime.getRuntime();
  Process pr = rt.exec(command);
  pr.waitFor();
  BufferedReader b = new BufferedReader(new InputStreamReader(pr.getInputStream()));
  String line = "";
  StringBuilder response = new StringBuilder();
  while ((line = b.readLine()) != null) {
    response.append(line);
  }
   String response_data = response.toString();
   System.out.println("身份证号:" + response_data);
   b.close();
   vars.put("ssn",response.toString());

  注意事项:
  ·第一行中的cmd /c 可以省略,如果是Windows可以加,如果是Mac或Linux系统,一定不能加;
  · py文件路径不能带有空格,路径分隔要用双斜杠。
  3.运行后,在调试取样器中可以看到变量ssn的值。此时,即可使用${ssn}在接口中进行传参。
调试取样器

  小结:
  以上就是利用python的faker库+Beanshell取样器生成身份证号的整体实现过程,此外还可以借助这种方式生成姓名、手机号、银行卡号、省市区地址等多种数据。当然,生成测试数据的方式有很多种,主要看个人选择,以上方法也并不一定是最佳方案。如果你有更好的方法,欢迎留言讨论!

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • 陈微甜
    2022-5-18 17:14:01

    学习了,beanshell和python还能联动起来

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号