【Jmeter】按比例分配Api压测

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。【Jmeter】按比例分配Api压测,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

先看

【Jmeter】基础介绍-详细

【Jmeter】Request1输出作为Request2输入-后置处理器

继续聊提出的第二个问题,即

  2.需要按比例分配API请求并发,以模拟真实的API压力场景

做压测的时候,一般的需求都是多个API同时压,不然也看不出真正的tps是多少啊。

比如虽然接口a的需求并发不高,500个用户才请求一次,但是特别耗性能,导致其他接口tps下降严重,所以压测的时候可以将比例调的很小,但是不能忽略它,只测并发请求高的接口

说会主题,如何按比例分配压测并发量呢?使用Jmeter可以有两种实现方式

先说第一种,通过线程组的方式控制:

线程组1配置:

【Jmeter】按比例分配Api压测

 线程组2配置:

【Jmeter】按比例分配Api压测

 区别就是线程数不一样,当然用循环次数也可以控制,区别可以看【Jmeter】基础介绍-详细

Request请求:

【Jmeter】按比例分配Api压测

 结果:

【Jmeter】按比例分配Api压测

 这里哪个请求在前完全随机,两个线程中互不干扰。

这种方式的好处就是完全并行,互不干扰,缺点就是基本没有使用场景,一般情况下,API都是有权限认证接口的,后面的接口需要依赖前面接口的输出(实现方式可以看【Jmeter】Request1输出作为Request2输入-后置处理器),这种完全隔离的方式显然无法满足需求,或者你需要自己写代码提前获取登录信息,不使用压测过程中登录返回的认证信息。

我们继续介绍第二种方式,其实就是按【Jmeter】Request1输出作为Request2输入-后置处理器中创建的线程组一样,只使用一个线程组,然后通过循环控制器来控制某个Api所占比例:

新建循环控制器:

【Jmeter】按比例分配Api压测

 调整参数达到按比例分配Api压力的目的:

【Jmeter】按比例分配Api压测

【Jmeter】按比例分配Api压测

 执行效果:

【Jmeter】按比例分配Api压测

 如上图所示,执行了一个Request1和两个Request2,而且是按顺序执行的,即这种方式可以满足【Jmeter】Request1输出作为Request2输入-后置处理器需求的同时使用。不过有两点需要注意:

  1. 这种方式按顺序执行时,变量(例如身份信息token)是会被覆盖的,即无法完全模拟多用户登录及身份信息的场景。
  2. 这种配置方式会导致api并发分配不均,即在时间段1全部请求都是Request1,时间段2全部请求都是Request2,虽然总量是按比例的,但是并不符合我们的需求。

以上两个问题,在我的测试场景中1没有影响,即用户1、2、3、4、5那个来请求Api对压测来说是不关心的,性能完全一样。这里的登录只是为了压测登录接口,同时生成一个token给下面的接口使用。问题2影响比较大,可以通过【Jmeter】基础介绍-详细中提到的Ramp-up时间参数来控制,首先按比例配置好循环控制器后,将线程数和循环次数配置为1,Ramp-up配置为0,即立刻启动,然后使用压测机跑一下用于估算一次压测流程的时间。得到这个时间后,就是我们在实际压测中需要填写到Ramp-up中的参数,比如一次完整的压测流程需要2s,我现在需要压测执行1000个线程,循环100次,即一共10w次请求,将Ramp-up时间设置为2s,即1000个线程将在2s内逐步启动,达到所有线程的启动时间覆盖第一个线程一次循环的整个时间段,来达到真实模拟多种请求并发执行的过程,解决以上提到的第二个问题。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/206143.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!