Jmeter-3-多场景传参总结

本文探讨了在JMeter中如何高效地进行参数传递,包括如何减少Token接口的调用次数,利用正则表达式提取Token,以及如何通过BeanShellPostProcessor实现跨线程组的参数共享。

话说

各位读者盆友,中午好!

这篇博客高度抽象总结下Jmeter传参。之所以是高度总结,那是因为这篇博客主要是给自己写的。后期会做详细的截图和说明(比较费时),这里暂且高度总结一下。笔者参考的文档在结尾,请有一定实际操作后,在回头看笔者这篇博客,否则会云里雾里的。

开发工具:Jmeter
难度系数:★★★☆☆
建议用时:2H


1)如何发现问题?

2)如何获取Token?(Jmeter)

3)如何萃取Token?(Jmeter)

4)如何跨线程组(Threads Group)传递参数?


1)如何发现问题?

发现问题,有时候需要刻意去发现,有时是很自然的事情。在解决一个问题的时候,可能无心插柳就发现了其他问题;这个时候,发现了问题,不要错过。

eg:

50个线程loop 1000次,会导致获取Token的接口访问1000次!假设这个接口响应Average是:15s,那么:就是4H!假设有10个场景,每个场景10个HTTP Samples,合计100个Samples;每个Samples访问:50*1000即5万次,那就是500万次访问量,可想等待结果是多么的痛苦,而且最终结果可能是:Abort!

笔者把多个场景(TestFragment)组织到一个ThreadsGroup下,形成一个.jmx文件,Ant驱动这个文件的时候,会通过权限验证的一个接口获取Token,JWT接口把获取到的Token存到Cookie里面。因为这2个接口放在当前的ThreadsGroup下面,Cookie里有了内容,只要设置一个全局的HTTP Cookie Manager即可在所有的线程里面共享这个cookie,这个时候:ThreadsGroup 、loop都是通过Jenkins传入,那么这个ThreadsGroup就按照你指定的线程数、循环次数运行所有的TestFragment,你的获取token的接口也不例外,那么访问这个获取Token接口的次数就是:ThreasNumber*Loop ,极大的资源浪费!

这里我们发现了2个问题:

a、获取Token的接口Average Response是多久?对执行所有场景影响多大?为什么?

b、如何做到只获取一次Token即可?

2)如何获取Token?(Jmeter)

 访问登录接口即可,接口自然会返回一个Token;

 当然可能也会有JWT令牌接口,把获取到的Token存放到Cookie里面。

3)如何萃取Token?(Jmeter)

这个问题是解决b问题的。

要想获取一次Token,可以通过:设置全局变量、全局Cookie做到。 问题是如何拿到这个token?通过Post Processors获取。也就是在执行获取Token接口之后,我们要做什么(萃取出Token);然后通过Regular Expression Extrator萃取。(萃取过程比较妖精)

我们需要另起一个TreadsGroup单独来获取Token,这样可以单独控制其ThreadsNumber、Loop次数。这里用到了SetUp ThreadsGroup。(对应TearDown ThreadsGroup).名字通俗易懂,作用好比:init()。

4)如何跨线程组(Threads Group)传递参数?

3)获取到Token之后,是没法通过User Defined Variables让全局使用的(要不要试试?),当然也就没法全局Cookie了。

如何跨线程组传参?也是在获取Token接口结束之后要搞事情。BeanShell PostProcessor来处理。这样该接口萃取的Cookie就可以作为全局共享了,其他ThreadsGroup都可以访问了。

这里再次感谢一下这个博主,是你们零碎的总结给笔者提供了足够多远的视角!感谢!

参考文档


1、jmeter接口测试3-正则表达式提取器的使用
https://www.cnblogs.com/xueli/p/7405258.html?utm_source=itdadao&utm_medium=referral

2、Jmeter基础之—jmeter基础概念
https://www.cnblogs.com/fnng/archive/2012/12/21/2828440.html

3、JMeter请求执行次数 你想执行几次就执行几次
https://www.cnblogs.com/wysk/p/6971929.html

4、究竟什么是ramp up
关于JMeter线程组中线程数,Ramp-Up Period,循环次数之间的设置概念
https://www.cnblogs.com/mochaMM/articles/6957773.html

5、Jmeter—–跨线程组传递cookies值
https://blog.youkuaiyun.com/niedongri/article/details/70255656

6、Jmeter—-正则表达式提取respones数据
https://blog.youkuaiyun.com/niedongri/article/details/70240686

7、转
Jmeter中正则表达式提取器使用详解
https://blog.youkuaiyun.com/wanglha/article/details/50781503


好,下期再会!

JMeter 中实现用户并发测试并循环传递参数,通常需要结合多个配置元件和逻辑控制器来完成。以下是一种常用的方法: ### 参数化设置 1. **CSV Data Set Config** 这是最常用的参数化方法之一。通过将用户数据(如用户名、密码)或请求参数(如文章ID、评论内容)存储在一个 CSV 文件中,JMeter 可以逐行读取这些数据并在每次迭代时使用不同的值。 - 添加 `CSV Data Set Config` 元件。 - 指定文件名、变量名称(如 `username,password`)以及是否循环读取(`Recycle on EOF` 和 `Stop thread on EOF` 设置)。 - 在 HTTP 请求中使用 `${username}` 和 `${password}` 来引用这些变量[^3]。 2. **用户定义的变量 (User Defined Variables)** 如果参数较少,可以直接在“用户定义的变量”中定义一些初始变量,但这种方法不适合大规模数据集。 3. **函数助手 (Function Helper)** 使用 `_Random`, `_StringFromFile` 等内置函数可以动态生成参数值,适合需要随机输入的场景。 ### 用户并发与循环控制 为了实现用户并发并循环传递参数,通常会用到以下几个组件: - **线程组 (Thread Group)** 设置线程数(即并发用户数)、循环次数等。如果希望每个用户执行次请求,可以在“Loop Count”中设置具体数值,或者勾选“Forever”。 - **For Each Controller** 当需要对一组数据进行遍历处理时(例如一个用户评论篇文章),可以使用 `For Each Controller`。它可以从一个变量前缀(如 `article_*`)获取所有匹配的变量,并为每个元素执行一次子级采样器。 - **循环控制器 (Loop Controller)** 如果需要某个请求被同一个用户重复执行次,可以将该请求放入 `Loop Controller` 中,并指定循环次数。 - **While Controller** 用于基于某个条件持续执行请求,直到条件不满足为止。例如,当 `${counter} < 10` 时继续循环。 ### 示例结构 ```plaintext Test Plan └── Thread Group ├── CSV Data Set Config ├── HTTP Request (Login) ├── For Each Controller │ └── HTTP Request (Comment on Article) └── Loop Controller └── HTTP Request (Repeat Some Action) ``` 在这个结构中: - `CSV Data Set Config` 提供了不同用户的登录信息。 - `For Each Controller` 遍历每篇文章 ID,使同一用户能评论篇文章。 - `Loop Controller` 让单个用户重复执行某些操作。 ### 注意事项 - **线程数设置**:如果每个用户要访问多个文章,则线程数应为用户数量乘以文章数量,以确保足够的并发量[^1]。 - **同步定时器 (Synchronizing Timer)**:如果需要模拟大量用户同时执行某操作,可添加此定时器来聚集请求。 - **监听器 (Listener)**:添加聚合报告 (`Aggregate Report`)、查看结果树 (`View Results Tree`) 等监听器以便分析性能指标。 通过上述配置,可以在 JMeter 中有效地实现用户并发测试,并且灵活地循环传递各种参数。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值