Jmeter 接口测试,参数值为列表,如何参数化?
  tyX9h2h5DDYY 2023年12月01日 38 0


最近在我的教学过程中,我的一个学生问了我一个问题,他们公司的一个接口参数值是列表,列表中值的数量有多有少,问我在 jmeter 中如何让这个参数的值进行参数化?

Jmeter 接口测试,参数值为列表,如何参数化?_接口测试

看到这种问题,你的第一反应是什么?

写 Java 代码?我相信,如果你有一定的程序语言基础,你肯定会想着写代码。因为代码对你来说,不是难事。但是,如果你不懂代码呢?

如果你不懂代码,哪你肯定就会想着用 jmeter 自带的 Random 函数。

但是,当你使用 Random 函数,去生成随机数的时候,如何生成 70 个随机数,用逗号连接,构成一个列表,这个事情难住你了。


下面,我就给不懂代码的同学,讲讲如何使用 jmeter 现有的元件来实现这样一个需求。

首先,我们肯定知道,需要用 Random 函数和循环控制器。在线程组下面添加一个循环控制器,循环控制器只需要设置一个循环次数就可以了。

Jmeter 接口测试,参数值为列表,如何参数化?_软件测试_02

他的需求是至少 70 个,至于到底多少个没有说,所以,这个循环次数,我们就可以用 Random 随机函数,随机一个大于等于 70 的数字就可以,${__Random(70,79,)}随机函数中最大值,随便写大于 70 的数字。

接下来就是造出列表中的第 1 个数。定义什么元件来接收这个随机数字呢?

用户定义变量, 还是 用户参数

听过我的课的同学,肯定都知道使用用户参数,如果不清楚,可以咨询我们的工作人员。

用户参数,是一个前置处理器,所以,我们需要添加一个取样器;我们目的是造数据,这个取样器并不需要发起请求,所以,取样器我们可以使用‘调试取样器’,生成如:

Jmeter 接口测试,参数值为列表,如何参数化?_接口测试_03

 

现在,运行脚本,你会发现,在查看结果树中,每个 ‘调试取样器’ 看到 rd1 变量的值都不一样,但是,每次的值都只有 1 个。

进一步分析需求,需求中,还说,每个值之间用逗号分隔,哪我们看下,是否可以在 rd1 这个变量中添加一个‘逗号’呢。

Jmeter 接口测试,参数值为列表,如何参数化?_程序员_04

运行!!!

Jmeter 接口测试,参数值为列表,如何参数化?_接口测试_05

 

发现,有 rd2 不管运行多少次,值都只有 2 个。这是怎么回事呢

我们来理解一下,变量 rd2 的值为 rd1{rd1} ,其实,是不是就是 rd2 的值,是调两次 rd1,把两个 rd1 连接在一起。如果这个能理解,哪是不是就能理解,不管我们循环多少次,rd2 的值都只有 2 个。

继续想。

会不会想到,rd2 的值用 rd1 与 rd2 自身连接?

Jmeter 接口测试,参数值为列表,如何参数化?_jmeter_06

运行!

Jmeter 接口测试,参数值为列表,如何参数化?_自动化测试_07

这次,我们看到 rd2 的值,在循环此次不一样的时候,rd2 的值长度不一样,在递增。也就是说,这样,我们可以造出几十个类似的数据连接成的一个列表了。

但是,rd2 的值,最后一个是 ${rd2},这显然又不符合我们的要求。怎么办?

是不是想着又给 rd2 定义一个值?哪这次,继续用用户参数,还是用用户定义变量呢?

这次,我们用用户定义变量

楞楞的分不清 用户定义变量 和 用户参数 的用法,可以联系我们的工作人员

Jmeter 接口测试,参数值为列表,如何参数化?_程序员_08

 运行!

Jmeter 接口测试,参数值为列表,如何参数化?_jmeter_09

现在,不管我们运行多少次,都能正常生成 rd2 的值了。

在这位同学的接口中,直接使用变量引用 ${rd2},是不是就搞定了。很简单吧!

不过,如果,你是一个追求完美主义者。我下面两个问题,你可以思考下:

问题一:

上述这种方法,生成的 rd2,其实是要比循环控制器的循环次数多 1 的,也就是说,如果循环 70 次,实际 rd2 是有 71 个值的。知道什么原因吗?怎么验证吗?

问题二:

上述的方法,rd2 的值比循环次数多 1,如何使 rd2 值的数量与循环次数相同?

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月01日 0

暂无评论

推荐阅读
tyX9h2h5DDYY