JMeter+BlazeMeter+Metersphere压力测试踩坑实践

这篇具有很好参考价值的文章主要介绍了JMeter+BlazeMeter+Metersphere压力测试踩坑实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:在进行性能测试之前,我们需要了解需要模拟的场景,影响性能的因素、软硬件环境。根据最近一次的压力测试,把测试过程中遇到的问题以及测试过程进行总结。

测试需求:需要模拟用户登录操作进行测试,登录成功之后,提取浏览器session,进行第三方应用跳转动作。整个流程需要3-4个接口才能完成,一次完整的动作流程需要共享session。

需要达到的效果:数据库中存有200万的数据量,不同用户并发登录+应用跳转TPS>5000。

01 脚本录制

测试之前需要进行脚本录制,研究了几种浏览器录制脚本的工具最终选择了chrome插件BlazeMeter进行脚本录制。相比于BalazeMeter,BadBoy工具近几年没有更新,只支持IE浏览器。而Jmeter自带的代理方式录制脚本,需要使用火狐浏览器设置jmeter代理,使用也不方便,设置代理后录制脚本过程中会影响服务器自身插件、脚本校验等功能,在录制过程中往往会遇到一些问题导致服务访问报错,而且录制的脚本还需要修改过滤才能提取出真正需要压测的脚本。BalazeMeter可以录制浏览器的操作,直接提取jmeter脚本,通过域名筛选,提取出有效的脚本:

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

 通过登录之后,应用跳转,在BalazeMeter中查看保存的脚本dev.*.360.cn域名的三个脚本为登录、初始化、获取应用列表的脚本。其他为跳转到华为应用的脚本。

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

 通过BalazeMeter导出Jmx文件,可以过滤域名(dev.*.360.cn识别成了undefined,这个没有关系,只要能识别就可以)由于压测对第三方应用会造成很大压力,因此之后调整了测试方案,即只提取自己服务器相关的接口就可以了。选择undefined.undefined域名,保存jmx文件,至此,测试脚本就生成了。

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

 Jmeter打开脚本可以看到设置的用户代理:

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

02 数据构造

导入jmeter脚本,在BalazeMeter录制的脚本中,直接使用已经配置好cookie管理。

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

Same user on each iteration默认为勾选状态,相同用户共用session,请求不会返回session信息。

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

要模拟多用户并发,需要构造大量的数据,jmeter在升级以后可以通过配置关闭Same user on each iteration共享,一个用户参数设置多并发就可以模拟多个用户。

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

为了更真实,我在数据库中通过脚本调用先添加了2000个用户,通过csv文件导入jmeter,反复调用线程模拟不同的用户。

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

03 测试优化过程

服务器依赖redis和mysql,服务器性能配置、数据锁、登录密码验证机制也是影响压力的主要因素,需要一个持续的测试、调优过程才能达到最终的效果。

刚开始调试脚本,使用单机版Jmeter GUI模式进行测试,为了方便实时观察持续加压接口请求响应时间、响应结果的变化。

漫长的测试优化过程就开始了。

第一次脚本调试,先设置较小的线程,设置1000个线程并发,手动循环执行线程,执行几次之后发现吞吐量(qps)<400,执行几次之后,错误率持续上升:

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

这对QPS>5000的要求差的太远,起初怀疑客户端资源不够导致的QPS上不去,找了多台客户端,使用GUI以及非GUI方式测试脚本,发现运行一段时间后,出现大量的502等错误。因此排除了客户端的问题。

通过服务端查看CPU,发现8核16G服务器15个pod cpu、数据库CPU在压力请求时瞬间打满。

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

从服务器CPU、内存参数来看,理论上不应该这么小的压力瞬间就出问题。

后来经过研发分析代码,发现代码中的数据库、redis锁以及密码验证机制会影响性能,为了进一步确定问题,搭建了同样的环境,重新编写了单纯的访问接口,进行压力测试,发现单纯的接口访问,在单pod环境下进行压力测试qps能达到1.5万以上:

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

经过分析,还是代码逻辑影响性能很大。

又经过代码调整,对登录接口进行优化,分别对优化前的login接口和优化后的loginR接口进行单pod压力测试,做性能对比:

发现loginR QPS单pod>1000,而login接口QPS<200。性能还是有很大差别。

之后优化接口后,同时扩大副本数量进行压力测试,单客户端的jmeter也不能满足QPS>5000的性能压测,之后采用metersphere进行压测,线程并发最大设置为10000,用四个压力节点进行测试。

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

 发现qps不是按照指定目标成倍提升的,持续一段时间后,错误率明显提升。

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

 观察redis发现,redis分布中,有很多响应超时的现象,redis内存占用率很高:

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

 之后调整redis,扩大集群方式,调整redis读取锁时间、内存释放配置等重新进行测试。经过不断的调整,最终qps达到>6000的效果。

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

 04 后续

数据库数据增至200万,发现登录接口qps>9000qps,与之前的测试结果不符:

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

 经服务端分析,没有读取到数据库,修改后发现数据量为200万时,qps与小数据量差别不大仍为>6000qps。

之后又做了读写并发压力测试,写入测试的时候,为了避免数据冲突,通过beanshell前置脚本生成不同的用户,保证每次执行都是插入新的用户修改后压力测试读写并发>6000qps。

总结压力测试过程中影响性能的因素很多,并发线程的数量,数据量大小,redis、mysql数据库配置、程序处理逻辑、内存、CPU配置等都会对压力有影响,需要针对不同场景进行测试、对比,发现影响性能的因素,通过不同的并发场景观察CPU、数据库、redis压力,响应时间的变化,找到程序执行的痛点,达到提升性能的效果。测试过程中也要观察服务端线程是否按照预期正常执行,防止遗漏处理逻辑导致测试数据不准确。

最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取【保证100%免费】

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

 这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试

面试文档获取方式:

blazemeter,程序员,IT,程序人生,单元测试,面试,职场和发展,软件测试,自动化测试文章来源地址https://www.toymoban.com/news/detail-769253.html

到了这里,关于JMeter+BlazeMeter+Metersphere压力测试踩坑实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • jmeter做接口压力测试_jmeter接口性能测试

     jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是免安装的,拿到安装包之后直接解压就可以使用,同时它在linu

    2024年02月07日
    浏览(74)
  • Jmeter接口测试与压力测试

    🍅 视频学习: 文末有免费的配套视频可观看 🍅  关注公众号:互联网杂货铺,回复1  ,免费获取软件测试全套资料,资料在手,涨薪更快 Jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简

    2024年04月23日
    浏览(44)
  • 压力测试+接口测试(工具jmeter)

    jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因 为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是免安装的,拿到安装包之后直接解压就可以使用,同时它在 linux

    2024年01月17日
    浏览(56)
  • Jmeter接口测试与压力测试详解

     jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因 为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是免安装的,拿到安装包之后直接解压就可以使用,同时它在 lin

    2024年01月19日
    浏览(53)
  • jmeter接口测试、压力测试简单实现

    测试计划—线程组—配置元件—前置处理器—定时器—逻辑控制器—取样器—后置处理器—断言—监听器 组件的作用范围: 同级组件 同级组件下的子组件 父组件 1、基于webservice协议接口,通过xml传输数据 2、基于dubbo协议接口,通过json传输数据 3、基于http协议接口,通过

    2024年02月15日
    浏览(49)
  • 性能测试-压力测试-jmeter简单实战

    压力测试考察当前 软硬件环境 下系统 所能承受的最大负荷并帮助找出系统瓶颈所在 。压测都是为了系统在线上的 处理能力和稳定性维持在一个标准范围内 ,做到心中有数。 使用压力测试,我们有希望发现找到很多种其他测试方法很难发现的错误。 有两种错误类型是:内

    2024年02月10日
    浏览(48)
  • Jmeter 简单的压力测试!

    今天我们一起利用Apache Jmeter(一种接口测试工具)来进行压力测试学习。压力测试主要目的是测试负载均衡的实现效果。 安装Jmeter这里就不做阐述了,上网下载个最新版就可以了,因为Jmeter是由JAVA语言开发的,所以安装之前先把java环境配置好。 安装好了之后,Jmeter的bin目

    2024年02月02日
    浏览(54)
  • 使用JMeter 进行压力测试

    Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对

    2024年02月16日
    浏览(50)
  • Jmeter 简单的压力测试

    今天我们一起利用Apache Jmeter(一种接口测试工具)来进行压力测试学习。压力测试主要目的是测试负载均衡的实现效果。 安装Jmeter这里就不做阐述了,上网下载个最新版就可以了,因为Jmeter是由JAVA语言开发的,所以安装之前先把java环境配置好。 安装好了之后,Jmeter的bin目

    2024年04月16日
    浏览(35)
  • Jmeter-压力测试工具

    1s内发送大量请求,模拟高QPS,用以测试网站能承受的压力有多大 Jmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK,并且配置了环境变量。 可以Apache Jmeter官网下载,地址:http://jmeter.apache.org/download_jmeter.cgi 或者直接用这个提供好的旧版本: 链接:https://pan.baidu.com

    2024年02月13日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包