提升Jmeter测试效率的9种参数化方法!

jmeter工具无论做接口测试还是性能测试,参数化都是一个必须掌握且非常有用的知识点。参数化的使用场景:

1)多个请求都是同一个ip地址,若服务器地址更换了,则脚本需要更改每个请求的ip

2)注册账号,不允许账号重复;想批量注册用户时

3)模拟多个用户登录,需要用到不同用户信息登录时

4)上一个请求的输出结果用于下一个请求的参数传入,例如登录获取到的token信息,用于提交账单请求的参数调用

一、用户定义的变量

1、右键快捷菜单中选择 添加-配置元件-用户自定义变量。

用户自定义变量中的定义的所有参数的值在测试计划的执行过程中不能发生取值的改变,因此一般仅将测试计划中不需要随迭代发生改变的参数(只取一次值的参数)设置在此处。例如应用的tid和vid。

取样器中的tid和vid用${tid}和${vid}代替,即使被测应用的部署服务器发生了变化,只需要简单地修改tid和vid参数的取值即可。

2、在测试计划下方也有用户定义变量,使用方法同上

二 、用户参数

右键快捷菜单中选择 添加-前置处理器-用户参数

与用户自定义变量不同的是,用户参数列表中的参数取值可以在测试计划执行过程中发生变化。

如图,username和password分别有两组不同的取值。通过界面右下方的四个按钮,可以向列表中增加参数,增加参数值,删除参数和删除参数值。

“每次迭代更新一次”选项控制参数取值的变化规则,如果选中该选项,则参数的值在每个迭代中保持不变,在新的迭代开始时取下一个值。

如果取消该选项,则参数值在每个在其作用域内的sampler发出请求时取下一个可用值。

如果参数的取值范围很小,使用用户参数比较合适;如果参数的取值范围很大,建议使用csv data set config方法。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

三、函数助手

1、CSV函数助手

点击菜单栏“选项”---->函数助手对话框,看下图: CSV文件列号是从0开始的,第一列0、第二列1、第三列2、依次类推。

复制生成的参数化函数,打开登陆请求页面,在右侧的参数化中找到我们要参数化的字段,这里对用户名和密码做参数化,第一列是用户名,列号为0;第二列是密码,列号为1;修改函数中对应的参数化字段列号就可以啦。

2、Random

选项-函数助手对话框,列出了系统函数的使用方法,生成后,参数传入直接使用即可。

3、下面介绍一下常用系统函数:

1.__time获取当前时间第一个参数为时间格式,第二个参数为存放获得当前时间值的参数名称,例在第一个参数输入yyyy-MM-dd HH:mm:ss,单击生成即可得到正确的函数表达式。

2.__Random随机数

3.__StringFromFile从本地csv文件中读取记录存入参数与CSV Data Set Config相比,该函数的强大之处是它可以支持从多个文件中读取数据。第一个参数是文件名(使用绝对路径),第二个参数是存放取得数据的参数列表,第三个和第四个参数分别为数据文件的起始和终止顺序号。

四、CSV Data Set Config配置元件

右键快捷菜单 添加-配置元件-CSV Data Set Config

Filename:获取参数值的文本文件(数据池)。文件名既可以使用绝对路径,也可以使用相对路径。当使用相对路径时,jmeter会在当前测试计划所在路径下寻找该文件。

File Encoding:文件编码方式,默认为ANSI.如果文本文件是以其他方式保存的,则请使用相应的编码方式(如utf-8)。

Variable Names:从文本文件中获取内容的参数列表。参数列表中可以包含多个参数,用逗号分隔。

Delimiter:文本文件中分隔记录域的分隔符,“t”表示tab键。

Allow quoted data:当该项值是False时,CSV Data Set Config原封不动地将文本文件中相应域的值取为参数值;当为Trues时,将处理文本中用双引号引用的部分,把双引号中的内容取为参数值。除非是CSV文件中的某个域的值包含有设定的分隔符,否则该项设置为False即可。

Recycle on EOF:当该项取值为True时,允许循环取值。当文件中的全部记录被取完后,重新从文件的第一行取值。为False时,根据stop thread on EOF的取值决定测试计划的执行行为。

Stop thread on EOF?:当Recycle on EOF为true时,无论该项取何值,测试计划的执行行为相同;当Recycle on EOF为False时,该项值为True时,文件记录取完后,线程停止运行,如果该项取值为False,则线程后续执行时给定参数的取值为<EOF>。

Sharing mode:All threads,该测试计划的所有线程共享csv文件中的记录(所有线程按照顺序取文件中的记录)。Current thread group,该测试计划中的每个thread group中的所有线程共享csv文件中的记录。Current thread,每个线程各自独立使用csv的记录。以下在参数内直接使用即可:

五、jmeter的属性

以命令行方式运行测试计划时,用户可指定从命令行输入的值替换测试计划中的某些值。例如:以命令行指定线程组的线程数和运行时长。

__property函数具有3个参数,分别为属性名称、存放属性值的变量名称(可选),属性默认值(可选)。命令行:Jmeter –n –t test.jmx –Jthreadcount=10 –Jduration=60-J表示设置property的值,以上命令行表示:10个线程运行,运行时间为60秒。

六、正则提取

需要用上个请求返回的参数内容:

1、首先添加后置处理器,正则表达式提取器,可使用Debug Postcessor查看请求参数结果。

2、 在下个请求中将引用名称带入即可。

七、需要使用上个线程的返回的参数内容

1、首先在线程组1中使用__setProperty函数设置jmeter属性值(此值为全局变量值),将所需变量值如${oldtoken} 设置为jmeter属性值,即newtoken,示例:

String oldtoken=bsh.args[0];{__setProperty(newtoken,{oldtoken},)}2.在线程组2中使用_p函数来调用jmeter属性,获取属性值,从而实现跨线程组,参数值传递。在参数或者url中直接调用该属性即可,方法:${__P(newtoken,)}

八、参数需要base64加密

1、首先添加后置处理器,BeanShell PreProcessor,可使用Debug Postcessor查看请求参数结果。

2、脚本区域:import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;String cursor64= bsh.args[0];String queryId64 = bsh.args[1];BASE64Encoder encode = new BASE64Encoder();String cursorbase64 = encode.encode(cursor64.getBytes());System.out.println(cursorbase64);vars.put("cursor64", cursorbase64);vars.put("queryId64",querybase64);

3、在请求中直接使用put的参数即可。

九、参数AES等加密——BeanShell

写好代码打成jar包,把jar包放到jmeter目录apache-jmeter-2.13libext下,在jmeter某个sampler下添加一个BeanShell PreProcessor,在beanshell PreProcessor中导入我们的jar包,调用里面的加、解密码方法,把结果保存在jmeter变量中,下面两个方法是beanshell中我们最常用到的:

· vars.get(String paramStr):获得变量值· vars.put(String key,String value):,将数据存到jmeter变量中import com.pingan.ff.account.user.utils.*;//加密System.out.println("加密");String password = "123123";String encode = SecurityUtils.getKey(password);//调用工具类中的方法进行加密System.out.println("Set my encode");vars.put("encode",encode);//把值保存到jmeter变量encode中String getEncode=vars.get("encode");System.out.println("Get my encode: " + getEncode);

把加密后的密码存到jmeter变量中,然后在http sampler中就可以通过${encode}进行使用了:

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/236418.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络HTTP篇

目录 一、HTTP基本概念 二、GET 与 POST 2.1、GET 与 POST 有什么区别&#xff1f; 2.2、GET 和 POST 方法都是安全和幂等的吗&#xff1f; 三、HTTP 缓存 3.1、强制缓存&#xff1a; 3.2、协商缓存 四、HTTP 特性 4.1、HTTP/1.1 4.1.1、HTTP/1.1 的优点 4.1.2、HTT…

OSError: We couldnt connect to ‘https://huggingface.co‘

最近在做NerF类的数字人口型算法。需要加载一些huggingface上面的模型&#xff0c;但是无法连接上&#xff0c;如下图所示 于是先科学上网&#xff0c;打开https://huggingface.co/models 然后搜索提到的无法加载的模型&#xff0c;比如这里是cpierse/wav2vec2-large-xlsr-53-…

Unity DOTS《群体战斗弹幕游戏》核心技术分析之3D角色动画

最近DOTS发布了正式的版本, 我们来分享现在流行基于群体战斗的弹幕类游戏&#xff0c;实现的核心原理。今天给大家介绍大规模战斗群体3D角色的动画如何来实现。 DOTS 对角色动画支持的局限性 截止到Unity DOTS发布的版本1.0.16,目前还是无法很好的支持3D角色动画。在DOTS 的b…

周报:css相关扩展知识

目录 1. 扩展知识&#xff1a;浮动盒子的排列位置 浮动盒子常见排列特点&#xff1a; 浮动盒子扩展特点&#xff1a; 2.扩展知识:行高的取值 line-height常见取值&#xff1a; 行高的取值的方式&#xff1a; 两个方式的区别&#xff1a; 3.扩展知识&#xff1a;body背景…

鸿蒙系统开发手册 - HarmonyOS内核驱动层源码分析

众所周知系统定义HarmonyOS是一款“面向未来”、面向全场景&#xff08;移动办公、运动健康、社交通信、媒体娱乐等&#xff09;的分布式操作系统。在传统的单设备系统能力的基础上&#xff0c;HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念&#xff0c;能…

深度学习手势检测与识别算法 - opencv python 计算机竞赛

文章目录 0 前言1 实现效果2 技术原理2.1 手部检测2.1.1 基于肤色空间的手势检测方法2.1.2 基于运动的手势检测方法2.1.3 基于边缘的手势检测方法2.1.4 基于模板的手势检测方法2.1.5 基于机器学习的手势检测方法 3 手部识别3.1 SSD网络3.2 数据集3.3 最终改进的网络结构 4 最后…

Gitee 之初体验(上)

我们在项目开发或者自己学习的时候&#xff0c;总会存在这样的问题&#xff1a; 在一台电脑上编写完代码&#xff0c;想要再另外一台电脑上再去写&#xff0c;再或者和其他人一起协作等等场合&#xff0c;代码传来传去很麻烦。 这个时候&#xff0c;我们就可以去使用代码管理工…

K8s 多租户方案的挑战与价值

在当今企业环境中&#xff0c;随着业务的快速增长和多样化&#xff0c;服务器和云资源的管理会越来越让人头疼。K8s 虽然很强大&#xff0c;但在处理多个部门或团队的业务部署需求时&#xff0c;如果缺乏有效的多租户支持&#xff0c;在效率和资源管理方面都会不尽如人意。 本…

Jvm常见问题

1. 为什么用元空间替换永久代 避免OOM异常&#xff1a;永久代中存放了很多JVM需要的类信息&#xff0c;这些数据大多数是不会被清理的&#xff0c;所以Full GC往往无法回收多少空间。而永久代的空间是有限的&#xff0c;如果经常加载新的类进来或者频繁的创建和删除类&#xf…

天眼销:精准的企业名录

企业名录的重要性&#xff0c;对于销售而言都是极其重要的。本期为家人们分享如何正确挑选出优质的企业名录渠道&#xff0c;避免走一些弯弯坑坑。 为了有效利用企业名录进行客户开发&#xff0c;您需要关注信息的准确性、可提供的资源数量以及信息的时效性。能否根据您的需求…

Arduino、ESP8266、HTML相关知识点记录

C代码 const char *ssid "********"; // 这里定义将要建立的WiFi名称。 const char *password "********"; // 这里定义将要建立的WiFi密码。 多WiFi连接&#xff1a; wifiMulti.addAP("**…

Zookeeper从零入门笔记

Zookeeper从零入门笔记 一、入门1. 概述2. 特点3. 数据结构4. 应用场景 二、本地1.安装2. 参数解读 三、集群操作3.1.1 集群安装3.2 选举机制1. 第一次启动2. 非第一次启动 3.3 ZK集群启动停止脚本3.4 客户端命令行操作3.2.1 命令行语法3.2.2 节点类型&#xff08;持久/短暂/有…