暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

jmeter web性能测试实例

IT那活儿 2021-08-08
1056
目  的

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

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论