背景

前面一篇讲了 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的参数化的更多相关文章

  1. 7 jmeter之参数化

    badboy里参数化(前面4 jmeter badboy脚本开发技术详解已讲过) jmeter里参数化-1 用户参数 1.打开badboy工具,点击红色按钮开始录制,在地址栏目中输入地址:www.so ...

  2. Jmeter性能测试-----参数化方法CSVRead函数

    Jmeter里面参数化的方法有很多,大家可以结合自己的项目情况来使用哪种方式来调用测试 数据. 下面我给大家介绍下Jmeter里CSVRead函数来获取参数的方法: 我这里已去到直播间发表评论为例(这 ...

  3. JMeter学习-参数化

    JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现. 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户 ...

  4. 转 7 jmeter之参数化

    7 jmeter之参数化   badboy里参数化(前面4 jmeter badboy脚本开发技术详解已讲过) jmeter里参数化-1 用户参数 1.打开badboy工具,点击红色按钮开始录制,在地 ...

  5. Jmeter之参数化

    Jmeter参数化分为两类,一类是在badboy录制脚本时进行参数化,二是再Jmeter里进行参数化 一:badboy录制脚本时进行参数化的步骤 1.脚本录制成功后->在左下角,点击variab ...

  6. JMeter学习参数化User Defined Variables与User Parameters

    偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近,刚开始时我也没注意,两者有什么不同.使用时却发现两者使用场景有些不同,现在小结一 ...

  7. 【jmeter】参数化User Defined Variables与User Parameters

    偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近,刚开始时我也没注意,两者有什么不同.使用时却发现两者使用场景有些不同,现在小结一 ...

  8. Jmeter使用——参数化

    最近一个想项目使用jmeter进行测试,陆续将遇到并解决的问题记录下来,本次主要记录参数化得一些问题. 1. 单台压力机 多个线程组不重复数字,注意分布式负载时多个压力机会出现重复的问题 主要思路分别 ...

  9. JMeter脚本参数化和断言设置( CSV Data Set Config )

    用Badboy录制了Jmeter的脚本,用Jmeter打开后形成了原始的脚本.但是在实际应用中,为了增强脚本的多样性,就要使脚本参数化.这里我以登录为例,参数化用户账号与用户密码.  图1 :原始脚本 ...

随机推荐

  1. 如何吃透Python的面向对象(OOP)

    ​本篇可乐和大家一起来吃透 Python 的面向对象,类和实例. 面向对象(OOP) 解释:面向对象它是一种编程的思想,将现实事物抽象化为编程对象. 举例说明:喝可乐 ① 选择自己根据配方买对应的材料 ...

  2. 使用Prometheus搞定微服务监控

    最近对服务进行监控,而当前监控最流行的数据库就是 Prometheus,同时 go-zero 默认接入也是这款数据库.今天就对 go-zero 是如何接入 Prometheus ,以及开发者如何自己定 ...

  3. “蚂蚁牙黑”太火,想玩就用ModelArts做一个!

    摘要:本文将介绍如何借力一站式 AI 开发平台,"傻瓜式"操作实现生成"蚂蚁牙黑"小视频. 作者:华为云EI专家胡琦 一夜之间,朋友圈都在"蚂蚁牙黑& ...

  4. 面试题-python 如何读取一个大于 10G 的txt文件?

    前言 用python 读取一个大于10G 的文件,自己电脑只有8G内存,一运行就报内存溢出:MemoryError python 如何用open函数读取大文件呢? 读取大文件 首先可以自己先制作一个大 ...

  5. web服务器-并发服务器2

    阅读目录 1.Web静态服务器-5-非堵塞模式 2.Web静态服务器-6-epoll 3.Web静态服务器-7-gevent版 4.知识扩展-C10K问题 一.Web静态服务器-5-非堵塞模式 单进程 ...

  6. Hi3559AV100 NNIE开发(2)-RFCN(.wk)LoadModel及NNIE Init函数运行过程分析

    之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3559AV100 NNIE开发(2)-RFCN(.wk)LoadModel及NNIE Init函数运行过程分析,通过对LoadModel函数及 ...

  7. C# 基础 - string 和 Datetime

    1. string 1. 格式化填充 string str = "this {0} a {1}"; Console.WriteLine(string.Format(str, &qu ...

  8. rman全备脚本

    cat rman_back.sh #!/bin/bash source /home/oracle/.bash_profile   rman log=/u01/backup/backupall_rman ...

  9. Python之基础算法介绍

    一.算法介绍 1. 算法是什么 算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求的输 ...

  10. 前端知识-CS-01

    一.选择器 通过什么方式来定位 1.sytle标签 style标签功能:写css样式的sytle标签的几种写法:1.可以在head里面添加一个style标签 2.在head标签中 通过link标签,引 ...