暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Jmeter参数化的几种方式

IT那活儿 2022-07-17
1532
点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!
Jmeter参数化概况
使用jmeter进行测试时,不同的场景对所要发送的数据有一定的要求,有些字段需要进行参数化以满足测试的需求。

Jmeter参数化主要有以下几种方式

  • 用户定义的变量;
  • 用户参数;
  • csv数据文件;
  • 随机变量;
  • 计数器等...

根据需求可以自行设置。

参数化的引用:设置完参数化后,根据${变量名称}进行引用替换,从而对具体的参数值进行转化,引用是可以通过手动替换或搜索替换。

方式一:用户定义的变量

用户定义的变量是全局变量,它可以跨线程组被引用,在脚本启动时会获取一次值,但在后续运行过程中不会动态获取值。常用于数据库地址,测试环境地址等常量配置,或配置不同服务器地址和端口,也可以用来参数化登录用户等场景。

用户定义变量的实现有两种,效果是一样的。
  • 第一种:在“测试计划”下:
  • 第二种:在线程组下:
操作步骤:线程组—添加—配置元件—用户定义的变量。

设置完毕后,引用变量名称${user}即可。

方式二:用户参数

用户参数是局部变量,它不可以跨线程组被引用,在脚本启动时会获取一次值,在后续运行过程中会动态获取值。用户参数适用于取值范围小、需要少量测试数据的场景。

操作步骤:线程组—添加—前置处理器—用户参数。
通过添加变量/删除变量,添加用户/删除用户,设置参数名称和值的个数,勾选每次迭代更新一次,最后在需要参数化的地方进行${变量名称}的替换。

上图定义一个变量user用于登录,指定了多个变量值,这样每次请求的时候会顺序去取这些值,并且在请求中需要参数化的地方进行${user}的替换与引用。

方式三:csv数据文件

适用于参数取值范围较大的场景,参数化文件一般为txt或csv格式,每一行代表一条数据,每条数据可包含多个属性,不同属性之间需用分隔符间隔,CSV数据文件对数据量无要求,当需要参数化的数量量较大时,应使用这种参数化方式

首先新建一个text参数化文件,将需要进行的参数化的数据放入文件。
操作步骤:线程组—添加—配置元件—csv数据文件设置。

进行csv数据文件参数配置,设置完毕进行${变量名称}的引用:

  • 文件名:参数化文件的目录;
  • 文件编码:编码格式,UTF-8;
  • 变量名称:变量名称应与引用的参数名称一致,以西文逗号间隔;
  • 忽略首行:若参数化文件中第一行为变量名,选择true,否则选择false;
  • 分隔符:与参数化文件中变量间隔符一致,一般为西文逗号;
  • 是否允许带引号(引用数据):一般为false,选true处理全角字符可能会出现乱码;
  • 遇到文件结束符再次循环:选true时,可以重复读取文件;选择false不重复读取文件,一般选true;
  • 遇到文件结束符停止线程:当上一选项为true时,此项无意义;当上一选项为false时,读取到文件结尾停止进程;
  • 线程共享模式:所有线程(线程组中所有线程都有效)、当前线程组(对当前线程组有效)、当前线程(对当前线程有效)。
  • 遇到文件结束符再次循环与遇到文件结束符停止线程的关联关系:
    当遇到文件结束符再次循环项为true时,遇到文件结束符停止线程项无意义;
    当遇到文件结束符再次循环项为false时,遇到文件结束符停止线程项为true时,当线程为4个,参数值为3个时,会执行请求3次;

    当遇到文件结束符再次循环项为false时,遇到文件结束符停止线程项为false时,当线程为4个,参数值为3个时,会执行请求4次,但是最后一次请求会报错,因为第4次请求无参数。

方式四:随机变量

当测试需要产生随机数或者随机取值时,可以用随机变量实现参数化。

操作步骤:线程组—添加—配置原件—随机变量。
  • Variable name变量名称:用于在其他元素中引用。
  • Output format可选格式:比如000,格式化为001,002;默认格式为Long.toString()。
  • Minimum valve:生成的最小随机数。
  • Maximum value:生成的最大随机数。
  • Seed for random function:供随机数生成器使用的seed,如果为空,则使用默认的random构造器。
  • Per thread(user):设为fales,所有线程共享同一个随机数生成器,设为true,每个线程独享各自的随机数生成器。
若参数化数据为手机号,可以使用随机函数,输入变量名称、最大值最小值,在需要参数化的地方引用即可。

上图生成的是1390537开头的手机号,最小值为13905370000,最大值为13905379999,最后以${tel}进行引用,这种是根据最大最小值设置取值的,也可以根据可选格式设置。

方式五:计数器
计数器和随机函数不同的是,随机函数取值是随机的,有可能会重复,计数器的取值不会重复
操作步骤:线程组—添加—配置原件—计数器。
  • Starting value:给定计数器的起始值、初始值,第一次迭代时,会把该值赋给计数器。Increment:每次迭代后,给计数器增加的值。
  • Maximum value:计数器的最大值,如果超过最大值,重新设置为初始值,可以不设置最大值,默认的最大值为Long.MAX_VALUE,2^63-1,依具体情况设置。
  • Number format:可选格式,比如000,格式化为001,002;默认格式为Long.toString(),默认格式下,可以当作数字使用。
  • 引用名称:计数器值的变量名称,用于引用。
  • Track Counter Independently for each User:全局的计数器,如果不勾选,即全局的,比如用户1 获取值为1,用户2获取值还是为1;如果勾选,即独立的,则每个用户有自己的值:比如用户1获取值为1,用户2获取值为2。
  • Reset counter on each Thread Group Iteration:仅勾选与每用户独立的跟踪计数器时可用;如果勾选,则每次线程组迭代,都会重置计数器的值,当线程组是在一个循环控制器内时比较有用。
在实际使用中,可以用计数器生成我们需要的有序字符串,如手机号、证件号,上图生成的是格式为H00000000的证件号,从H00000001开始,每次递增为1,最大值为H99999999,最后以${certid}进行引用即可,这种是依赖于可选格式进行参数设置的。

本文作者:朱珂珂(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论