聊一聊Jmeter的参数化
背景
前面一篇聊了一下 JMeter 的简单使用,这篇聊一下 JMeter 的参数化。
在开始之前先来一个单元测试的例子,感受一下参数化。
上面是一个用 xUnit 写的单元测试,这个单元测试就是一个参数化的例子:
模拟了不同的输入,调用同一个方法,得到了不同的输出。
对某一个场景,要验证不同的输入得到不同的输出是非常有用的。
在 JMeter 里面就可以通过参数化来实现这个效果。
JMeter 的参数化有很多种方法,本文主要是介绍基于 CSV Data Set Config 的参数化。
在这篇文章里面,会通过一个简单的场景来了解 JMeter 参数化的使用,以及自定义 jar 包的使用。
场景
这里用一个大家最熟悉的登录场景做为例子。
登录最重要的就是用户名和密码这两个内容,这里会有两种结果,登录成功和登录失败。
在这个场景下,假设我们的接口定义是这样的
POST http://localhost:8532/run?sign=sssss&appkey=aaaaa
Content-Type: application/json{"userName":"catcherwong","password":"xxxxx"
}
sign 的值是签名,用来验证参数是否被修改,这里是不校验的,所以随便生成一个随机数就可以了。
appKey 是定义的另一个参数,这里也不做校验的,也是随机定义即可。
这个接口,会有两种返回
登录失败的, code 会是 1, msg就是错误信息。
{"code":1,"msg":"用户名或密码错误"}
登录成功的, code 会是 0。
{"code":0,"msg":"ok","data":{"token":"626b97f78d794f4da927bc09ae6be245"}}
针对这个场景,简单起见,只考虑 code 的值来判断登录是否成功。
准备数据
场景有了,接口也有了,再下一步就是准备要用的数据了。
这里是用 CSV 文件来做为数据源,所以我们把接口要用到的参数放进去。
准备了20条数据,第一列是用户名,第二列是密码,第三列是appkey,第四列是结果,表明用前面三列数据去调用登录接口,应该成功还是失败。
然后在线程组里面添加一个 CSV 的配置原件。
在里面最主要的配置是 文件路径和变量名。
文件路径没什么好说的,就是 csv 文件所在的具体路径。
可以看到上面的 csv 文件,我们是没有定义头部的,放的直接是数据,所以每一列数据代表什么需要有一个标识。
这里的变量名可以认为就是给准备的每一列数据起个别名,便于后面的使用,示例这里是有4个的,每一个都是用英文逗号隔开。
配置HTTP请求
其中 name, pwd 和 appKey 这三个变量是前面已经定义好了的,所以这里可以直接用 ${xx} 的方式去使用。
sign 这个参数是没有定义的,所以要加一个 BeanShell PreProcessor 来处理一下。
到这里,请求已经配置好了,下面就是要判断登录是不是成功的了。
断言
断言这里是要判断返回的 JSON 结构里面的 code 值是不是和 csv 文件里面定义的一样。
所以这里选择的还是 JSON Assertion 。
要把期望值调整成变量名,这样它才会根据不同的入参判断不同的结果,上图的例子是 ${login_res}
添加结果树,调整线程组的循环次数为20,再运行这个线程组,就可以看到对应的结果了。
可以看到的是,20条数据都跑了一次,所有的用例都是可以过的。
但是这里有一个问题,密码是明文传输的!!!
这个是大忌,绝对不允许的,正常都会加密或哈希之后再传输。所以这里要做一个优化。
也就引入了,自定义 jar 包的使用。
自定义jar包调整
首先我们需要写一些 JAVA 代码来编译成一个 jar 包。
这里老黄是直接写好了,直接用就可以了。
调整一下 BeanShell PreProcessor ,如下图所示:
首先是先引入自定义 jar 包,其次是从 vars 里面拿到明文密码,然后是调用 jar 包里面的 getPwd 的方法对密码进行处理,最后再把处理好之后的密码放到一个新变量 ePwd 里面。
由于之前的 sign 参数是写死的123,这里也改成调用 jar 包里面的 getSign 方法来生成。
由于密码参数换了一个变量,所以要调整一下 HTTP 请求。
最后再次运行,可以看到 密码不再是明文了,sign值也不再是固定的了。
自定义的 jar 包,记得要在测试计划里面添加一下!
写在最后
参数化是一个很有用的功能,可以让我们的参数动起来。
聊一聊Jmeter的参数化相关推荐
- jmeter csv参数化_jmeter学习(二)
参数说明: a) 引用名称:下一个请求要引用的参数名称,如填写token,则可用${token}引用它. b) 正则表达式: ():括起来的部分就是要提取的 .:匹配任何字符串 +:一次或多次 ?:在 ...
- Jmeter接口测试+参数化
Jmeter接口测试+参数化 1.双击Jmeter.bat文件打开Jmeter 2.右键测试计划添加线程组 2.右键线程组添加用户参数 3.在用户参数里添加变量,变量名称以及参数根据接口文档来填写 5 ...
- jmeter csv参数化_运用Jmeter参数化来实现接口自动化测试
本文记录如何使用Jmeter参数化(csv)实现接口自动化--测试Token不同入参情况下,接口请求能够返回正确的结果 1. 首先需要使用Jmeter获取一个Token,如何获取暂略(同一般访问请求方 ...
- jmeter随机参数化不重复_接口测试参数化详解(Jmeter)
接口测试是目前最主流的自动化测试手段,它组合不同的参数向服务器发送请求,接受和解析响应结果,通过测试数据的交换逻辑来验证服务端程序工作的正确性.我们在测试过程中需要考虑不同的输入组合,来覆盖不同的测试 ...
- Jmeter CSV 参数化/检查点/断言
当参数的值没有规律且量不太大时,可以使用CSV Data set config这种方法. 案例: 应用Sogou自动搜索关键字: 软件开发测试,web功能自动化测试,性能自动化测试,Seleniu ...
- jmeter csv参数化_性能测试之Jmeter中如何设置参数化数据
参数化配置 jmeter中进行参数化设置,右击测试计划或者线程组,add->config element->CSV Data Set Config参数1.png Allow quoted ...
- 聊一聊Jmeter与多接口测试
背景 前面两篇聊过了 JMeter 的 简单使用 和 参数化,主要都还是单接口的. 很多时候,一个业务要走完,它会依赖多个接口,而且这些接口会有依赖性. 好比说,我想查询一个订单信息,那么大前提肯定是 ...
- 聊一聊Jmeter的简单使用
背景 近段时间,团队想补强测试这一块,减少重复性的一些工作,让一些内容可以自动化起来,同时对开发同学写的接口的性能也开始有所要求了. 考虑到团队内没有人有测试开发的经验,所以前期的选择还是以工具为主, ...
- Jmeter中参数化的使用
在使用Jmeter进行接口测试时,如果提交的参数不变,那么就会读取缓存数据,无法测试出服务器真正的负载能力,所以要对提交的参数进行参数化来解决这一问题. 在Jmeter中经常使用CSV Data Se ...
最新文章
- 2021中国国际消费电子博览会和青岛国际软件融合创新博览会盛大开幕
- R语言使用scales包的hue_pal函数获取ggplot2任何级别的离散色码、使用scales包的hue_pal函数获取ggplot2任何级别的反序(reverse)离散色码
- torch topk
- ActiveMQ中Queue消费者
- 在Spring-boot中,为@Value注解添加从数据库读取properties支持
- Android Studio 4.0 发布
- Reef Finance与Manta Network就流动性解决方案达成合作
- [置顶] 怎么对待重复的代码
- lambda表达式的语法精简
- C2000系列DSP生成hex/bin文件并使用串口下载程序的方法
- 五险一金 ,即将毕业的每个人都看看吧
- (raspberry、bananapi)Archlinux 无法安装yaourt解决办法-----手工编译(不难)(适用于package-query找不到)
- 计算机word论文,怎么用电脑Word写论文?
- 小型固定翼无人机集群仿真演示平台
- vue 设置路由导航守卫 控制路由跳转
- 完全免费,界面友好的文件批量更名工具Bulk Rename Utility
- libsvm多分类python,SVM实现多分类的三种方案
- IT服务公司经理专栏:小公司管理(4)
- Centos 7 中 修改 Redis 的默认端口号
- Error: Could not find tools necessary to compile a package/compilation failed for package
热门文章
- (ZT)VC++的链接错误LNK2001
- wireshark使用教程 linux,Linux入门教程:ubuntu下安装wireshark(以及配置非root),这个强大的工具可以捕...
- 【动态规划】cf1034C. Region Separation
- C# 跨平台的支付类库ICanPay
- sybase sp_procxmode简述
- 【转】linux之fsck命令
- Eclipse将引用了第三方jar包的Java项目打包成jar文件
- 使用dotnet template快速开发Microsoft Teams Outgoing Web Hook
- Zoom Host可以真正看到您的所有私人消息吗?
- 自定义v-drag指令(横向拖拽滚动)