我们在使用JMeter进行测试的时候,测试数据是一项重要的准备工作,当每次迭代的数据不一样的时候,就需要进行参数化,也就是从参数化数据文件中来读取测试数据。

JMeter中的参数化方式有多种,我们之前讲过了使用CSV 数据文件设置组件,从.cvs和.txt文件中读取数据。

今天我们来说一下,使用函数助手实现JMeter的参数化,其实方法很类似,只是调用数据的方式略有不同。

需求:我们以一个登陆接口为例。

发送登录请求的时候,我们需要传递两个参数:phone和password。

针对这个登录接口设计5条用例,如下:

  1. 正常登录。
  2. 手机号未注册,即:手机号填写错误。
  3. 手机号不合法,即:手机号填写错误位数不对或为空。
  4. 手机号或密码错误,即:密码错误。
  5. 密码不合法,即:密码为空。

1、测试计划中的元件

添加元件操作步骤:

  1. 创建测试计划。
  2. 创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组。
  3. 在线程组里面,添加取样器“HTTP请求”组件:选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求。
  4. 在线程组里面,添加监听器“察看结果树”组件:查看结果,选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树。

最终测试计划中包含的元件如下:

点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。

2、数据文件内容

创建一个.csv文件,名为login_data.csv,然后根据需求编辑数据文件内容。使用函数助手实现参数化的时候,我们不在数据文件的第一行添加列表明,这样方便我们取值。

然后使用Notepad++打开该文件,点击“编码” —> 转为UTF-8编码,防止中文乱码。

最终所得到的.csv格式文件的内容如下:

3、函数助手配置

(1)函数助手的打开方式

在JMeter中打开函数助手界面的方式有两种:

第一种:选项 ——> 函数助手对话框。

第二种:在工具栏中常用功能的快捷按钮,如下图:

(2)函数助手界面介绍

界面说明:

  • 选择一个功能:这里是选择你要使用的函数。
  • 函数参数:每个函数需要的函数参数都是不一样的。

    我们以__CSVRead函数为例:

    1)CSV file to get values from | *alias:填写数据文件路径。

    2)CSV文件列号| next| *:标识在CSV文件中读取第几列中的数据,从0开始,第一列0、第二列1、第三列2,依次类推。
  • 点击生成按钮,生成获取参数值的函数表达式,可以在下方中看到生成的结果,生成的结果即为从数据文件中拿到的参数值。
  • Reset Variables:重置变量。
  • The result of the function is:当我们文件路径和参数值的列号填写后、点击“生成”按钮,就会将读取到的值显示在这里。
  • Current JMeter Variables:当前的JMeter变量相关信息。

说明:Current JMeter Variables中的内容说明。

(1)预定义变量

大多数变量都是通过函数调用和测试元件(如用户自定义变量)来设置的,在这种情况下用户拥有对变量名的完整控制权。

但是有些变量是JMeter内置的,例如:JMeterThread.last_sample_ok:最近的采样是否可以(true/false)。

(2)预定义变量属性

JMeter属性集是在JMeter启动时通过系统属性初始化的,还有其他补充的JMeter属性来自于jmeter.properties、user.properties或者命令行中。

JMeter还另外定义了一些内置属性,从方便的角度考虑,属性START的值会被复制到同名变量中去。

下面是具体列表:

  • START.MS:以毫秒为单位的JMeter启动时间;
  • START.YMD:JMeter启动日期格式yyyyMMdd;
  • START.HMS:JMeter启动时间格式HHmmss;
  • TESTSTART.MS:以毫秒为单位的测试启动时间;

请注意:START变量/属性表征的是JMeter启动时间,而非测试的启动时间,它们主要用于文件名之中。

(3)编辑后的函数助手界面

因为我们使用函数助手实现JMeter中的参数化,所以我们要使用__CSVRead函数。

然后我们需要把数据文件的绝对路径填入第一个输入框中,在第二个输入框选择取第几列的数据。

最后我们点击“生成”按钮,就会生成一个函数表达式。

如下图所示:

提示几点:

  1. 在The result of the function is的输入框中要看到参数文件中的值,算是成功。
  2. 把生成函数字符串,复制到请求元件中需要参数化的地方。
  3. 文件数据中的每一列数据,都要生成一个函数字符串。(其实就是最后的列数不一样)

4、HTTP请求组件内容

编辑HTTP请求组件中的内容,然后把需要使用参数化变量的地方,引用函数助手中生成的函数字符串表达式。

如下图所示:

5、线程组元件内容

如果需要使用CSV文件中所有的数据,需要设置线程数。

因为没有了CSV数据文件设置组件的参与,所以这里只能使用线程数进行设置,才能实现变量的循环应用。

如果使用循环次数进行设置,效果就是使用同一用户,执行几次登陆操作。

6、脚本运行结果

该测试脚本运行结果如下图所示:

我们可以看到,一个发送了5次请求,每次请求使用的参数值都是不同的,并且返回结果的预期也与我们设想的一样。

这样就演示了,使用函数助手实现JMeter中的参数化。

7、总结JMeter函数助手使用步骤

  1. 点击JMeter页面的函数助手。
  2. 选择需要使用的函数。
  3. 设置函数相关参数。
  4. 点击生成可被引用的函数字符串。
  5. 复制函数字符串。
  6. 粘贴到需要使用的位置。

『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化的更多相关文章

  1. 『动善时』JMeter基础 — 28、JMeter函数助手详解

    目录 1.函数助手介绍 2.函数助手中的函数分类 3.常用函数介绍 (1)__Random函数 (2)__counter函数 (3)__time函数 (4)__property函数 (5)__setP ...

  2. 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求

    目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...

  3. 『动善时』JMeter基础 — 8、JMeter主要元件介绍

    目录 1.测试计划(Test Plan) 2.线程组 3.取样器(sampler) 4.逻辑控制器(Logic Controller) 5.配置元件(Config Element) 6.定时器(Tim ...

  4. 『动善时』JMeter基础 — 41、使用JMeter连接数据库(MySQL)

    目录 1.为什么要使用JMeter连接数据库 2.JMeter连接数据库的前提 3.JDBC连接配置组件界面介绍 4.JMeter连接数据库演示 (1)测试计划内包含的元件 (2)测试计划中添加链接数 ...

  5. 『动善时』JMeter基础 — 44、JMeter对数据库的更新操作

    目录 1.执行一条insert语句 2.insert语句实现参数化 3.一次执行多条insert语句 4.使用Beanshell生成加密数据示例 (1)测试计划内包含的元件 (2)JDBC连接配置组件 ...

  6. 『动善时』JMeter基础 — 2、JMeter的安装和启动

    1.安装Java环境 由于JMeter是纯Java的桌面应用程序,因此它的运行环境需要Java环境,即需要安装JDK或JRE.(也就是安装JDK环境) 步骤简要说明: 下载并安装JDK 配置环境变量 ...

  7. 『动善时』JMeter基础 — 7、jmeter.properties文件常用配置

    目录 1.默认语言设置 2.配置默认编码格式 3.GUI图标放大比例设置 4.功能区工具栏图标大小设置 5.视图区目录树图标大小设置 6.内容区编辑字体设置 7.添加JMeter元素快捷键设置 8.捕 ...

  8. 『动善时』JMeter基础 — 22、JMeter中实现参数化(CSV)

    目录 1.参数化的定义 2.什么情况下需要用到参数化 3.JMeter实现参数化的方式 4.CSV数据文件设置界面详细说明 (1)CSV数据文件设置组件界面说明 (2)补充说明:Recycle on ...

  9. 『动善时』JMeter基础 — 23、JMeter中使用“用户自定义变量”实现参数化

    目录 1.用户自定义变量介绍 2.使用"用户自定义变量"实现参数化 (1)测试计划内包含的元件 (2)数据文件内容 (3)测试计划界面内容 (4)线程组元件内容 (5)CSV数据文 ...

随机推荐

  1. IDEA使用JFX的相关问题

    1 问题概述 首先是javafx找不到对应的类: 其次是 class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x50f362 ...

  2. Appium 自动化测试框架:关键字驱动+数据驱动

    1. 关键字驱动框架简介 2. 框架结构说明 3. 框架代码实现 action 包  page_action.py business_process 包 case_process.py data_so ...

  3. 05.ElementUI源码学习:项目发布配置(github pages&npm package)

    0x00.前言 书接上文.项目第一个组件已经封装好,说明文档也已编写好.下面需要将说明文档发布到外网上,以此来展示和推广项目,使用 Github Pages功能实现.同时将组件发布之 npm 上,方便 ...

  4. Java整合极光推送 ( 简单 )

    Java 整合极光推送官方文档:https://github.com/jpush/jpush-api-java-client 这里记录一下简单的使用步骤:创建一个普通的 Maven 工程然后添加依赖 ...

  5. LINQPad,我的C#/.NET学习诀窍

    LINQPad,我的C#/.NET学习诀窍 在我以往的文章中,尤其涉及代码演示的,都使用了同一个工具--LINQPad.但许多客户面对我分享的.linq源文件都迷茫不知所措,因此有必要来聊聊一下这个强 ...

  6. 请解释Spring事务传播传播行为

    什么叫事务传播行为? 听起来挺高端的,其实很简单. 即然是传播,那么至少有两个东西,才可以发生传播.单体不不存在传播这个行为. 事务传播行为(propagation behavior)指的就是当一个事 ...

  7. OAuth2(未完待续)

    一.OAuth2是什么?OAuth2解决了什么问题 1.OAuth2是第三方授权协议,用于支撑认证和授权 2.OAuth2中的角色划分: 资源拥有者 客户端 资源服务器 授权服务器 二.OAuth2怎 ...

  8. 阿里早期Android加固代码的实现分析

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78320445 看雪上有作者(寒号鸟二代)将阿里移动早期的Android加固进行了逆 ...

  9. hdu4932 小贪心

    题意:      给了一些处在x轴上的点,要求我们用长度相等的线段覆盖所有点,线段和线段之间不能重叠,问线段最长可以使多长. 思路:       一开始一直在想二分,哎!感觉这个题目很容易就往二分上去 ...

  10. hdu5246超级赛亚ACMer

    题意(中文题意直接粘吧)                             超级赛亚ACMer Problem Description   百小度是一个ACMer,也是一个超级赛亚人,每个ACM ...