背景

前面一篇聊了一下 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. jmeter csv参数化_jmeter学习(二)

    参数说明: a) 引用名称:下一个请求要引用的参数名称,如填写token,则可用${token}引用它. b) 正则表达式: ():括起来的部分就是要提取的 .:匹配任何字符串 +:一次或多次 ?:在 ...

  2. Jmeter接口测试+参数化

    Jmeter接口测试+参数化 1.双击Jmeter.bat文件打开Jmeter 2.右键测试计划添加线程组 2.右键线程组添加用户参数 3.在用户参数里添加变量,变量名称以及参数根据接口文档来填写 5 ...

  3. jmeter csv参数化_运用Jmeter参数化来实现接口自动化测试

    本文记录如何使用Jmeter参数化(csv)实现接口自动化--测试Token不同入参情况下,接口请求能够返回正确的结果 1. 首先需要使用Jmeter获取一个Token,如何获取暂略(同一般访问请求方 ...

  4. jmeter随机参数化不重复_接口测试参数化详解(Jmeter)

    接口测试是目前最主流的自动化测试手段,它组合不同的参数向服务器发送请求,接受和解析响应结果,通过测试数据的交换逻辑来验证服务端程序工作的正确性.我们在测试过程中需要考虑不同的输入组合,来覆盖不同的测试 ...

  5. Jmeter CSV 参数化/检查点/断言

    当参数的值没有规律且量不太大时,可以使用CSV Data set config这种方法.  案例:  应用Sogou自动搜索关键字: 软件开发测试,web功能自动化测试,性能自动化测试,Seleniu ...

  6. jmeter csv参数化_性能测试之Jmeter中如何设置参数化数据

    参数化配置 jmeter中进行参数化设置,右击测试计划或者线程组,add->config element->CSV Data Set Config参数1.png Allow quoted ...

  7. 聊一聊Jmeter与多接口测试

    背景 前面两篇聊过了 JMeter 的 简单使用 和 参数化,主要都还是单接口的. 很多时候,一个业务要走完,它会依赖多个接口,而且这些接口会有依赖性. 好比说,我想查询一个订单信息,那么大前提肯定是 ...

  8. 聊一聊Jmeter的简单使用

    背景 近段时间,团队想补强测试这一块,减少重复性的一些工作,让一些内容可以自动化起来,同时对开发同学写的接口的性能也开始有所要求了. 考虑到团队内没有人有测试开发的经验,所以前期的选择还是以工具为主, ...

  9. Jmeter中参数化的使用

    在使用Jmeter进行接口测试时,如果提交的参数不变,那么就会读取缓存数据,无法测试出服务器真正的负载能力,所以要对提交的参数进行参数化来解决这一问题. 在Jmeter中经常使用CSV Data Se ...

最新文章

  1. 2021中国国际消费电子博览会和青岛国际软件融合创新博览会盛大开幕
  2. R语言使用scales包的hue_pal函数获取ggplot2任何级别的离散色码、使用scales包的hue_pal函数获取ggplot2任何级别的反序(reverse)离散色码
  3. torch topk
  4. ActiveMQ中Queue消费者
  5. 在Spring-boot中,为@Value注解添加从数据库读取properties支持
  6. Android Studio 4.0 发布
  7. Reef Finance与Manta Network就流动性解决方案达成合作
  8. [置顶] 怎么对待重复的代码
  9. lambda表达式的语法精简
  10. C2000系列DSP生成hex/bin文件并使用串口下载程序的方法
  11. 五险一金 ,即将毕业的每个人都看看吧
  12. (raspberry、bananapi)Archlinux 无法安装yaourt解决办法-----手工编译(不难)(适用于package-query找不到)
  13. 计算机word论文,怎么用电脑Word写论文?
  14. 小型固定翼无人机集群仿真演示平台
  15. vue 设置路由导航守卫 控制路由跳转
  16. 完全免费,界面友好的文件批量更名工具Bulk Rename Utility
  17. libsvm多分类python,SVM实现多分类的三种方案
  18. IT服务公司经理专栏:小公司管理(4)
  19. Centos 7 中 修改 Redis 的默认端口号
  20. Error: Could not find tools necessary to compile a package/compilation failed for package

热门文章

  1. (ZT)VC++的链接错误LNK2001
  2. wireshark使用教程 linux,Linux入门教程:ubuntu下安装wireshark(以及配置非root),这个强大的工具可以捕...
  3. 【动态规划】cf1034C. Region Separation
  4. C# 跨平台的支付类库ICanPay
  5. sybase sp_procxmode简述
  6. 【转】linux之fsck命令
  7. Eclipse将引用了第三方jar包的Java项目打包成jar文件
  8. 使用dotnet template快速开发Microsoft Teams Outgoing Web Hook
  9. Zoom Host可以真正看到您的所有私人消息吗?
  10. 自定义v-drag指令(横向拖拽滚动)