Jmeter 参数化实现

Jmeter 参数化实现在测试过程中,我们经常遇到需要根据需求动态操作数据的情况,常规的固定数据无法满足我们的需要,这个时候,我们可以通过jmeter提供的参数化组件来实现动态的获取数据、改变数据。Jmeter中常用的参数化方式jmeter为我们提供了四种实现参数化的方式,分别是【CSVDataSetConfig】(数据集配置)组件、【用户参数】组件、【用户定义的变量】组件和【函数】组件,四种方式都有…

大家好,又见面了,我是你们的朋友全栈君。

      在测试过程中,我们经常遇到需要根据需求动态操作数据的情况,常规的固定数据无法满足我们的需要,这个时候,我们可以通过jmeter 提供的参数化组件来实现动态的获取数据、改变数据。

Jmeter 中常用的参数化方式

      jmeter 为我们提供了四种实现参数化的方式,分别是【CSV Data Set Config】(数据集配置)组件、【用户参数】组件、【用户定义的变量】组件和【函数】组件,四种方式都有各自的使用场景,互为补充。

1.【CSV Data Set Config】(数据集配置)组件

      我们借助此组件可以实现动态的从外部CSV文件中获取数据,从而达到批量操作数据的目的。
使用此组件的前提条件:我们需要有一个 CSV 格式的数据文件。

CSV文件编写格式:
	1.每一行代表一条数据;
	2.各字段之间用英文逗号分隔开;
	3.编码格式采用 utf-8。

假设现在有一个 CSV 格式的数据文件csv_test.txt,该文件内容如下图所示:
这里写图片描述

      要实现依次读取文件中的内容,并将内容中第一个字段的值作为关键字在百度中搜索的操作,我们可以这样做:
1)在jmeter中依次创建【测试计划】、【线程组】和【HTTP 请求】,并添加查看结果的组件【查看结果树】如图:
这里写图片描述
2)添加【CSV Data Set Config】(数据集配置)组件:右击【线程组】—>【添加】—>【配置元件】—>【CSV Data Set Config】。
3)配置参数

  • 设置线程组循环次数:选中【线程组】,在右边属性窗口中将【循环次数】设置成 与CSV 数据文件中数据条数相同,在本例中即为3。
    这里写图片描述
  • 设置 CSV Data Set Config 组件的参数
    • Filename:CSV 数据文件所在路径。

    • File encoding:CSV文件的编码格式,即 utf-8;

    • Variable Names(comma-delimited):给 CSV 数据文件中数据的每个字段取一个名字,作为调用的变量名;CSV 中每个字段都对应一个变量,每个变量用逗号隔开

    • Delimiter(use ‘\t’ for tab):与CSV 中的分隔符 保持一致,本例中即为英文逗号;
      这里写图片描述

    • 一般情况下,我们只需要设置这四个属性即可。

4)使用变量

  • 变量名即为上一步骤中设置的变量名
  • 变量使用格式为${变量名}
  • 在 HTTP 请求 URL 路径中使用正确格式调用变量,如图。
    这里写图片描述
  • 为了结果更明确,在 HTTP 请求的命名中也调用此变量标注。

5)执行,结果如下图:
这里写图片描述
      结果中显示,我们依次从 CSV 数据文件中获取到了每条数据的第一个字段的值,并将其作为百度搜索的关键字执行了搜索。

2.【用户参数】组件

      除了读取外部文件中的数据,我们还可以在jmeter中定义一些数据,实现批量操作数据的功能。但由于此操作不是那么的易用,所以数据量较大时,不建议使用此操作。
下面我们来看一下具体是怎么操作的:
1)这里我们先把上面添加的 CSV Data Set Config 组件禁用掉(右击该组件后选择【禁用】即可);
这里写图片描述
2)通过添加【用户参数】组件,用来配置数据:右击【测试计划】—>【添加】—>【前置处理器】—>【用户参数】,如图:
这里写图片描述
3)配置数据。我们可以看到用户参数面板如下图所示,主要使用的部分就是图中标注出来的三个部分:
这里写图片描述

  • ①这里应该不陌生了,就是用来标注我们这部分的参数是给干什么用的,取个名字,见名知意,好让我们以后再看的时候不会迷糊。

  • ②这里我们看到有四个按钮,第一行的两个是用来操作变量的,第二行的两个是用来操作用户的。这里所谓的变量就是我们要设置的参数变量名,用来在后面调用的;而用户就是参数值,每一个用户对应一条数据。

  • ③ 点击【添加变量】后会在③中添加一行输入框,提供给我们输入变量名和变量值,输入后保存即可。点击【添加用户】后会在【用户_1】后面添加一列,表示可以多添加一条数据。

  • 我们还是用上面例子中的数据添加到这,如下图:
    这里写图片描述

  • 从上面的结构我们可以看出,【用户参数】组件是通过表格的形式来存储数据的,每个变量和变量值都需要我们手动去一条一条添加,可想而知,如果数据量比较大的情况下,我们还是用此方式操作的话,就会比较麻烦了。这种情况下,就建议使用第一种方式来批量操作数据了。

4)更改线程组设置,让jmeter循环读取我们的数据:

  • 将线程组的【线程数】更改为与我们【用户参数】中用户数量相同;
  • 将线程组的【循环次数】更改回 1 次。

5)调用参数的方式与上面的例子相同,在需要的地方使用”${变量名}”的格式调用即可,这次我们来遍历一下 【country】的值。
这里写图片描述
6)我们来执行一下,看看读取【用户参数】的执行结果:
这里写图片描述
出现上面的结果,就说明我们配置成功了!

3.【用户定义的变量】组件

1)通常,在项目的接口中经常会遇到一些相同的部分,当这个相同的不出频繁出现时,我们可以将其抽取出来,作为一个全局的变量供我们调用,定义全局变量我们可以通过定义【用户定义的变量】来实现;
2)这里我们抽取 HTTP 请求的【服务器名称】和【端口号】来举例。
3)添加【用户定义的变量】组件:右击【测试计划】—>【添加】—>【配置元件】—>【用户定义的变量】,如图所示,
这里写图片描述
4)【用户定义的变量】面板如下图所示,我们依次来介绍。
这里写图片描述

  • ①取个见名知意的名字
  • ②点击【添加】,就会出现③中的输入框;点击【删除】,就会在③中删除一个变量。
  • ③【名称】:即参数名,变量名;【值】:参数值,变量值;【Description】:对变量的描述信息,可不填。
    这里写图片描述

5)调用方式和之前一样,HTTP 请求的【服务器名称】和【端口号】的位置调用这两个变量:
这里写图片描述
6)查看执行结果,如下:
这里写图片描述
      这里我们要注意的是:【用户定义的变量】是全局变量,即这里定义的变量的所有值只会初始化一次,无论后面创建了多少线程,值都不会变。也正是因为这个原因,为了不占用过多资源,建议不要创建太多这种类型的变量。

4.【函数】组件

      在jmeter 中已经内置了一些【函数】供我们使用,给我们的测试工作提供了很大的便利。在jmeter中常用的【函数】主要有6个,我们通过其中的__counter()为例来介绍【函数】组件的使用方式,后面再介绍每个函数的功能。
1)调出【函数】组件有三种方式,我们在使用时选择任意一种即可:

  • 方式一:菜单栏【选项】—>【函数助手对话框】

这里写图片描述

  • 方式二:工具栏中倒数第二个类似于笔记本的按钮【函数助手对话框】
    这里写图片描述
  • 方式三:使用快捷键:
    • Windows 平台:Ctrl+shift+F1
    • Mac 平台:shift+command+F1
  1. 执行1)中的操作后,会出现下面的对话框:
    这里写图片描述
  • ①选择我们需要使用的函数__counter

  • ②设置函数调用时需要的参数:

    • 第一行:设置此计数器的作用范围:

      • TRUE:用户范围内有效,在本例中我们可以认为是单次循环内有效;
      • FALSE:全局范围内有效,即在多次循环范围内有效。
    • 第二行:这里要给函数的返回值取个名字,以便后面调用,这个是选填参数;

  • ③点击【生成】按钮,在输入框中就会出现完整的函数调用代码,我们直接复制到需要调用该函数的位置即可。
    这里写图片描述

3) 为了直观体现出参数的作用,我们把线程组的【循环次数】设置为多次,这里就设置为3。

  • 当参数选择 TRUE 时:
    这里写图片描述
    这里写图片描述
    查看结果,我们可以发现,每次循环都是从1开始的。
  • 当参数选择 FALSE 时:
    这里写图片描述
    查看结果,我们可以发现,所有循环使用同一个计数器,新循环开始时,计数器不再重置为1,而是继上次循环结束时的结果递增。

至此,函数的调用方式就介绍完了,下面就介绍一下jmeter中内置的6个常用函数:

  • __counter():计数器,上面介绍过了,就不再赘述。

  • __random():产生一个随机数。

    • 参数1:随机范围的低边界值,即随机范围内的最小值;
    • 参数2:随机范围的高边界值,即随机范围内的最大值;
    • 如下图中的设置所示,随机范围为[0,100] ,即两个边界值都可能取到。
      这里写图片描述
  • __time():返回当前时间,默认为距离1970年1月1日 0时0分0秒的毫秒值。

    • 参数1:设置返回的时间表现形式,
      • yyyy:表示年份
      • MM:表示月份
      • dd:表示日期
      • hh/HH:表示小时(hh:12小时制,HH:24小时制);
      • mm:表示分钟
      • ss:表示秒
        这里写图片描述
  • __CSVRead():读取外部 CSV 格式文件,类似于 CSV Data Set Config 组件,用来批量操作数据。

    • 参数1:CSV 文件路径,注意这里要填写 CSV 文件的绝对路径;

    • 参数2:要读取CSV 文件中哪一个字段的值,这里填写的是字段对应的 index 值,index 从0开始计数,即第一个字段对应的 index 为0 。
      这里写图片描述

    • 注意:此函数读取 CSV 文件要注意:

      • 此函数调用一次,只能读取一个字段的值,所以想要读出所有字段,需要多次调用此函数;
      • 将线程组的【线程数】设置为与 CSV 文件数据行数相同,可以读出当前字段对应的所有值;
    • 查看结果

      • 线程数设置为3,(与 CSV 文件数据行相同)
      • 只用一次 HTTP 请求,读取一个字段的值
        这里写图片描述
        这里写图片描述
        结果显示,我们只读取了一个字段对应的所有数据。
      • 下面我们再创建一个 HTTP 请求,多调用一次此函数,读取两个字段的值,注意第二各字段对应的 index 为1,不要忘记修改。
        这里写图片描述
        由结果看出,线程数为3,发送两次请求,调用两次此函数,成功的读取出了 CSV 文件中的两个字段对应三条数据的所有值。
  • __setProperty() 和 __property():用于线程组之间传参。

    • __setProperty() 在线程组1中将属性及属性值放到测试计划的共享空间中;
    • __property()在线程组2中从共享空间中获取属性。

至此,Jmeter的参数化实现方式就介绍完了,希望以后看到的时候不会迷糊!哈哈~~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/147401.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • byte转string字符

    byte转string字符开发过程中从数据库拿出来的数据用tostring会显示为System.Byte[]查了下资料要发现网上的都不适用记录下自己的foreach(DataRowrowinds.Tables[0].Rows){    byte[]datbytes=(byte[])row["dat"];    for(inti=0;i<datbytes.Length;i++)…

  • es6的解构赋值_字符串赋值给字符指针

    es6的解构赋值_字符串赋值给字符指针ES6模板字符串与解构赋值

  • 一个软件完整的开发流程介绍

    一个软件完整的开发流程介绍刚开始写博文的时候就应该将这个文章更新一下,虽然不是什么大牛,但是对于软件的开发流程还是比较了解的,毕竟大大小小做过了好几个项目了,今天就大概的说一下,用我做过的一个项目来说吧,写的不好的,请多多见谅,毕竟小生不才。开发流程百度的解释是:不是我懒得写,而是觉得写出来也不是自己的,还不如直接告诉你们我是百度的概念…但是下面的我们就不要百度了,因为百度说的太专业,让你看了很烦,最起码我是很烦(都是…

  • 彩色图和深度图转点云

    彩色图和深度图转点云环境:windows10、VS2013、opencv2.49、openNi、PCL1.8opencv环境搭建参考https://www.cnblogs.com/cuteshongshong/p/4057193.htmlhttps://blog.csdn.net/u013105549/article/details/50493069PCL1.8+openNi搭建参考https://blog.cs…

  • 各种数据库的分页查询语句[通俗易懂]

    各种数据库的分页查询语句

  • power by dedecms什么意思,power by dedecms怎么去掉

    power by dedecms什么意思,power by dedecms怎么去掉powerbydedecms什么意思,powerbydedecms怎么去掉powerbydedecms什么意思,powerbydedecms怎么去掉一、powerbydedecms什么意思网上冲浪的时候,会看到很多带powerbydedecms的网站,powerbydedecms表示该网站基于DedeCMS系统搭建,DedeCMS是开源免费

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号