资讯专栏INFORMATION COLUMN

jmeter web性能测试实例

IT那活儿 / 1748人阅读
jmeter web性能测试实例
目  的

使用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:jmeterQry.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那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129834.html

相关文章

  • 云智慧压测实战分享之JMeter工具使用初探

    摘要:有了测试脚本,通过线程组来模拟真实用户对服务器的访问压力。不同的是,这些类型的线程执行测试结束后执行定期的线程组。线程组中包含的线程数量在测试执行过程中是不会发生改变的。逻辑控制器元件只对其子节点中的取样器和逻辑控制器作用。 工欲善其事必先利其器,要保证移动应用产品在上线之后能稳定运行于各种复杂环境,仅仅进行功能测试是远远不够的,压力测试越来越被应用开发商所重视。而压力测试从传统的内部...

    venmos 评论0 收藏0
  • 第一篇--认识Jmeter

    摘要:为了最大限度的灵活性,允许使用正则表达式创建断言。线程组理解一个虚拟用户组,线程组内线程数量在运行过程中不会发生改变。测试执行后操作,即线程组执行完成后执行的内容。 Jmeter是Apache组织开发的基于Java的压力测试工具,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数...

    张宪坤 评论0 收藏0
  • 全国大学生软件测试大赛web性能测试

    摘要:点击确定建议练习的时候,把这个提示框信息仔细看看奥阅读题目要求认真阅读性能测试文档。 目录 一.环境的准备 1.从比赛官网下载jmeter 2.解压后,启动 二.答题 1.下载题目 2.阅读题目要求 3.录制脚本  4.完善和回放脚本  4.提交大赛官网运行,查看成绩  5)点击 mooc...

    MSchumi 评论0 收藏0
  • jmeter web性能测试之用beanshell转换全局变量

    jmeter web性能测试之用beanshell转换全局变量 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75...

    IT那活儿 评论0 收藏896
  • 2021了,不会还有测试人员认为Jmeter就等于性能测试吧!

    摘要:认为就等于性能测试,其实这是不对的。性能测试定义指通过自动化的测试工具模拟多种正常峰值以及异常负载条件来对系统的各项性能指标进行测试。另外,从业务角度来说也可以使用访问人数天或页面访问量天做为单位。 随着软件行业的快速发展,现代的软件系统越来越复杂,功能越来越多,测试人员除了需要保证基本的...

    luffyZh 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<