• 0
  • 0
分享
  • 学习用Jmeter生成证件号的方法——软件测试圈
  • 恬恬圈 2023-04-13 16:12:38 字数 2092 阅读 5346 收藏 0

  写在前面

  前几天五一放假期间,偶然在一个测试群里看到一位群友提问“Jmeter如何生成合法的身份证号”。我们都知道,如果是Python或Java语言,借助第三方库,很容易就能够模拟出合法的身份证号。在此之前,我也遇到过使用Jmeter生成身份证号的场景,但那时候我们的接口没有身份证号的合法校验。为了方便起见,在传参时都是用函数助手生成18位长度的随机数字字符串传递。于是,出于好奇和热心,在经过自己一番实践过后,解答了他的问题。因此,本篇也是一次解答群友问题的实践记录。

  Jmeter生成身份证号的三种方法

  方法一:通过RandomString函数

  熟悉Jmeter的人都知道,Jmeter提供了函数助手的功能,通过函数助手中的RandomString函数可以生成指定长度的、随机的数字字符串,但这种方法生成的身份证号只符合了身份证号的长度规则,它并不合法。因此,这种方法的好处是简单快捷,缺点是不适用于后端接口存在合法性校验的情况。

1-1.jpg

函数助手

  方法二:通过CSV文件助手

  ① 模拟生成身份证号

  我们可以提前将在其他地方,比如下图网站中模拟生成好一些合法的身份证号数据,并复制到CSV文件中。

1-2.jpg

http://www.chineseidcard.com/

  ② 在Jmeter中引用CSV文件

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

1-3.jpg

CSV Data Set Config

  方法三:通过BeanShell取样器读取Python文件

  很显然,当我们需要每运行一次Jmeter脚本就可以生成一个合法的、且不重复的身份证号时,以上两种实现方式就无法满足需求。这也引出了本次文章重点介绍的第三种方法,总体实现思路如下:

  ·python里有现成的第三方库faker库可以生成身份证号,可以编写一个python文件,引用faker库,定义一个生成身份证号的函数。

  · 然后在jmeter中添加一个beanshell取样器,在取样器中调用系统命令行执行python文件,同时定义一个变量来接收函数返回值,也就是身份证号。

1-4.jpg

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}在接口中进行传参。

1-5.jpg

调试取样器

  小结:

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



作者:测试开发实战    

来源:http://www.51testing.com/html/14/n-6657714.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   前言  jmeter 这个工具既可以做接口的功能测试,也可以做自动化测试,还可以做性能测试,其主要用途就是用于性能测试。但是,有些公司和个人,就想用 jmeter 来做接口自动化测试。  你有没有想过呢?  下面我就给大家讲讲,用 jmeter 如何做接口自动化测试。  jmeter 与接口自动化测试  如果要你用 jmeter 来做接口自动化测试,你是不是把几乎每一个测试用例,都是用一个取样器来实现?  相信很多人都是这么想的,也是这么干的。  但是,很遗憾,你这种,是初级入门做法。你能实现所有的测试用例都被执行,但是,你写脚本和维护脚本的时间,可能比你用手工执行所有的测试用例时间还要长...
            0 0 1161
            分享
          • 1、TCP是互联网中的(1 A)协议,使用(2 C)次握手协议建立连接。当主动发出SYN连接请求后,等待对方回答(3 A)。这种连接的方法可以防止(4 D),TCP使用的流量控制协议是(5 B)。(1)A.传输层  B.网络层  C.会话层  D.应用层;(2)A.1  B.2  C.3  D.4;(3)A.SYN,ACK  B.FIN,ACK  C.PSH,ACK  D.RST,ACK;(4)A.出现半连接  B.无法连接  C.假冒的连接  D.产生错误的连接;(5)A....
            16 14 6651
            分享
          •   “为什么入软件这行?”很多人问我,“一个女孩子做这个不太好,做不长久,特别年龄大了更不好做。”  我只是很随意的说专业对口,我能说是看上这个行业的高工资和技术范么,这样太俗了,然而就是这个俗气的理由让我走上这一条路,且想一直走下去。为什么呢?  一是因为做了这么久的软件测试,已经爱上它了,这大概就是日久生情吧(偷笑),现在这个对我来说不仅仅是一份工作,还是一份兴趣爱好。  二是性格使然,只有这份默默劳作不需要太多交流的工作比较符合我的性格。  三这也是我在这么多年的工作生涯中不断摸索出来的一条路,一条生活之路吧。  回想刚毕业那会懵懵懂懂的,啥也不懂,还记得刚入公司很幸运进了公司的实验室,...
            0 0 998
            分享
          • 前言:前面是对http协议的补充,后面的https工作流程才是这篇帖子的重点!一、用代码构造http请求1、通过HTML中的form标签,构造出GET/POST请求> 通过input标签搭配form来使用,实现给服务器提交数据这样的功能。<form action="https://www.baidu.com" method="GET">         <input type="text" n...
            0 0 960
            分享
          • SeleniumBase是一个自动化web测试框架,它的设计pyse相似,基于selenium和unittest封装的框架,api多,支持命令行多参数执行文档地址:https://github.com/seleniumbase/SeleniumBase下载pip下载 pip install seleniumbasegit克隆git clone https://github.com/seleniumbase/SeleniumBase.git cd SeleniumBase pip install -r require...
            0 0 1309
            分享
      • 51testing软件测试圈微信