jmeter-6-从入门到放弃【性能基础篇】

通常我们使用【阶梯式】压测,支持远程启动分布式压测。阶梯式也就是模拟一段时间内不断增长,直到指定的数量暂停增长,在一段时间进行大量请求测试。

如果需要并发测试,那么将需要合理设计场景,比如秒杀,可以使用同步器,一键启动所有远程调用多个机器把1000个线程用户启动完成,然后一起发送请求。

性能测试是很需要对整个链路数据的流向经过哪些(调用了谁、经过哪些中间件)

个人认为性能测试的价值:体现在应用服务机器成本中

Jmeter安装使用基础可以参考:https://www.cnblogs.com/gsxl/p/14993497.html

一、性能测试使用到的分析

1、压测多大的量?

  • 可以通过产品经理询问每天xx订单在多少量?再结合28原则
  • 监控信息每天访问此接口数量
  • 数据库信息得知用户量是多少,再结合28原则,是否摸高测试

2、压测是做单个接口还是多个?

  • 根据业务场景进行,比如电商行业,选购+下单+支付,便是3个接口(得看涉及的接口范围,简称:链路式)
  • 如果有明确压测只需【查询业绩】 接口,那就单个压测。比如签到、秒杀。

3、性能测试28原则

指80%的业务量在20%的时间(s)里完成。

  1. 例:如某系统,每天单量10w,90%下单主要集中在9-12点。

   则:业务量=10w个,时间=3x60x60=10800s

  TPS=(90%*10w*80%) / (20%*10800)=0.9*10w*0.8/(0.2*10800)=72000/2160=33.33个/s     (TPS:系统每秒处理事务的个数)

4、过程监控,分析与调优

  • cpu
  • 内存
  • 磁盘io
  • 网络使用情况
  • 中间件:数据库、mq、redis
  • 代码性能
  • jmeter 压测返回结果、99线平均响应时间、TPS每秒应用处理事务的数量

5、性能测试执行具体步骤

  • 方案确定
  • 脚本编写            (需调试跑通)
  • 测试数据准备  (个人认为压测工作量主要之一在这里,准备数据比较麻烦)
  • 执行脚本            (先调试一个请求成功,在设置>2,确保没问题后设置好对应线程数等等) 
  • 过程记录或分析及反馈,是否第N轮,是则重复(可能需要改线程数等)
  • 编写报告      

二、线程组界面简介:

线程数:并发数量

Ramp-Up时间:多少秒起完上面设置的线程数,一般为线程数的1-2倍。

循环次数:要循环多少次?一般压测是勾选循环

持续时间:在压测时,是通过一定的范围时间内压测。

jmeter-6-从入门到放弃【性能基础篇】

三、Jmeter 执行前需设置

1、聚合报告-配置,去掉勾选 XML (用来生成报告)

2、数据收集写入文件,用来生成报告的。

jmeter-6-从入门到放弃【性能基础篇】

3、报告生成

需要把jmeter配置先改一下,文件:D:\apache-jmeter-5.3\bin\jmeter.properties

490行的,jmeter.save.saveservice.output_format=csv

jmeter-6-从入门到放弃【性能基础篇】

需要注意路径,如我的:

  • E:\apache-jmeter-5.3\bin\jmeter -g data.csv -o reprot.html

data.csv        为刚才汇总报告写入的文件路径

reprot.html   为生成的报告路径

打开报告的 html 文件。

jmeter-6-从入门到放弃【性能基础篇】

jmeter-6-从入门到放弃【性能基础篇】

4、编写报告及发送

报告可以使用word、excel等下编写,主要体现,压测需求,测试机器环境,报告的过程中的图表走势图(吞吐量/响应时间等等),是否满足压测需求,

报告模板可以参考百度一大堆

注:

  • 1、压测报告需注明我们压测的环境。
  • 2、如发现压测机与本地请求响应时间不一样的时候,我们要测的是应用的性能而不是网络的性能。

本篇文章只是入门级,适合能够编写脚本,分析压测量,执行脚本,但不会太多分析调优的测试人员。

最后额外分享:

性能测试 ①登录需要怎样绕过验证码? ②登录密码需要加密或者请求信息都要加密怎么办?

答:最简单的就是,手动去登录把token粘贴到脚本上。

其次请求信息都要加密怎么办?如果后端使用的是Java那么可以直接让开发给加密的方法规则,如果不是那可能你要自己折磨写一个加密的Jar包。

欢迎来大家QQ交流群一起学习:482713805

jmeter-6-从入门到放弃【性能基础篇】

上一篇:面试面试


下一篇:C# 值类型和引用类型的区别