热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

jmeterweb性能测试实例

目  的使用jmeter对web业务进行一次完整的性能测试,包括录制脚本、脚本调试、设计场景、执行压测,记录结果、性能分析等,全面了解使用jmeter

目  的

使用jmeter对web业务进行一次完整的性能测试,包括录制脚本、脚本调试、设计场景、执行压测,记录结果、性能分析等,全面了解使用jmeter进行web性能测试流程。

脚本录制
1. 录制前准备
  • 在录制脚本前,需要先明确业务流程,需要添加的事务,需要创建几个线程等。

  • web业务中一个页面操作,会有大量的http请求,我们一般不关注单个请求的性能,而是某个操作整体的性能状况,所以需要将操作添加到事务,最终关注事务的性能状况。

  • 本例查询业务,需要进行的操作主要有登录、搜索菜单、打开菜单、点击查询、注销登录等,其中一个虚拟用户,登录、注销操作只需要做一次,查询业务可以做多次,因此将注销放tearDown Thread Group线程组,所有主线程执行完成后,最后执行,且为了方便查询操作能和登录共用一个有效回话,登录和查询业务可以放一个线程组,录制完脚本后登录操作添加一个Once Only Controller,来实现登录一次,查询业务多次操作。

  • 另外还需要根据实际情况,添加公共的默认COOKIE,http默认值等。

明确了以上问题,就可以在测试计划中依次添加,如下图:

2. 配置http代理服务器

测试计划准备好,就可以对http代理服务器进行设置,包括代理端口、过滤不需要录制的页面元素,如.png、css等页面元素,还需要对浏览器设置代理服务器,端口号要和http代理服务器中设置的一致

3. 录制脚本

http代理服务器和ie代理服务器都设置完成后,点击【start】按钮就可以进行脚本录制了。jmeter5.0后,在录制脚本过程中有recording框,和loadrunner类似,可以实时添加事务。脚本录制完成后,可以在响应的事务控制器下看到录制的脚本。

脚本调试
  1. 删掉不相干的请求,在录制过程中可能有非业务相关的请求,也一块记录,删除这些请求。

  2. 参数化,线程组添加CSV Data Set Config ,将登陆用户、查询条件等进行参数化,多并发时就会模拟不同用户、不同查询条件。

  3. 关联,如果有需要关联的参数,在相应的http请求下添加提取器,提取关联参数进行关联,关联参数的确定可以通过fiddler抓包确认,或直接询问相关的开发人员。

  4. 断言,根据实际需求在相关的请求下添加断言,来判断请求是否达到预期值。

  5. 登录事务添加一次性控制器

  6.  COOKIE共享,注销和登录在不同线程组,需要将登录COOKIE参数全局化,在注销线程组中引用。COOKIE参数化还需要修改配置文件jmeter.properties中COOKIEManager.allow_variable_COOKIEs=true,默认是false

  7. 测试计划中勾选Run Thread Group consecutively,这样多线程组就能顺序执行

  8. 所有事务控制器都要勾选Generate parent sampler,这样结果统计按事务统计,否则结果按每个http请求来统计。

以上完成后,就可以添加监控器、View Results Tree、Aggregate Report等,运行脚本,在View Results Tree查看,若有失败的请求,再根据实际报错情况进行调试。

参数化、一次性逻辑控制器:

关联:

全局化COOKIE参数,在注销中引用:

脚本调试完成后运行,在View Results Tree中查看,没有报错,调试成功

场景设计
脚本调试完成后,就可以根据实际需求,设计压测场景进行压测了。

本例设计的场景为5并发,每隔3s起1个并发,压测5min,完成后查看结果。

在jmeter默认的线程组中设置,不好实现以上场景,可以下载线程组插件,丰富不同场景需求。

本例用Stepping Thread Group (deprecated)来实现以上场景,如下:

执行压测
Jmeter执行压测,GUI上执行多并发耗资源较大,一般不建议直接在GUI上执行,建议通过命令行执行脚本

jmeter -n -t D:\jmeter\查询.jmx -l D:\jmeter\Qry.jtl -e -o D:\jmeter\

-n: 非GUI模式执行脚本

-t: 脚本文件(含路径)

-l: 测试结果保存文件(含路径)

-e: 测试结束后生成测试报告(html报告)

-o: 存放测试报告路径

如果压测结束,退出压测时报The JVM should have exited but did not.修改jmeter.properties中jmeterengine.force.system.exit=true,默认为false

记录结果
压测结束后,在相应的路径下能看到生成的.jtl测试结果和.html测试报告,其中.jtl可以在jmeter中打开,.html测试报告中有已生成的各维度统计结果(表格、统计图等)

记录性能指标结果(事务平均响应时间、TPS等)。

本例查询业务,我们只关注打开菜单和查询操作的性能状况,其他操作不关注,所以记录结果只记录【打开菜单】和【查询】事务。

结果分析

从本例结果分析,1/5/10并发TPS按倍数递增,平均响应时间相差不大,性能平稳,从20并发开始,TPS增加明显变缓,平均响应时间增大,性能有下降趋势,60并发TPS开始下降,平均响应时间持续增大,错误率也明显增大,60并发达到性能瓶颈。

1并发响应时间趋势图:

60并发响应时间趋势图:

相关阅读:

jmeter响应断言阐述

jmeter web性能测试之关联及参数化

END

更多精彩干货分享

点击下方名片关注

IT那活儿



推荐阅读
  • VG浏览器是免费的吗 VG浏览器常见问题汇总
    VG浏览器是免费的吗VG浏览器常见问题汇总。现在,不少人都在使用VG浏览器。但是,有些用户在使用VG浏览器过程中,也是碰到不少问题。今天,小编给大家带来VG浏览器常见问题大汇总。想 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
author-avatar
秀珍冠秋晓雯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有