前言
通过前面对Jmeter元件的讲解,大家应该都知道常用元件的作用和使用了。编写Jmeter脚本前我们需要知道Jmeter元件的执行顺序,可以看看我这篇性能测试学习之路(三)—初识Jmeter来了解下。下面我将以工作中的一个简单的实例带大家手把手写一个Jmeter脚本。
场景及分析
场景:用户登录系统,选择相应的模块,然后去相应的菜单下新增一个单据。
预压测接口:用户登录接口和单据保存接口,假设业务场景为一天2小时中,请求登录接口为1000次,请求单据保存接口为3000次。
脚本分析:用户登录系统,我们需要根据登录接口来获取到token供后面接口使用,这时我们需要用到后置处理器;选择相应的模块和进入到相应的菜单下我们要看这两个接口是不是有关于Pageid的关联,这需要我们通过抓包工具抓到的接口来分析;保存单据就是一个单纯的保存接口。按理说我们只需要写四个接口,这四个接口的服务器地址是一样的,所以我们可以添加一个HTTP请求默认值。又需要添加一个HTTP信息头管理器来设置请求头的一些信息。然后线程组设置成1循环1次添加查看结果数调试脚本是否能跑通。
性能场景分析:
登录接口:2小时请求2000次
保存接口:2小时请求5000次
没有明确的指标的话我们就是可以通过二八原则来计算出大概得TPS。那么什么是二八原则呢?
二八原则是指80%的请求在20%的时间内(时间按秒来计算)完成,计算公式: TPS=总请求数80%/(总时间20%)
那么通过计算可得出登录接口的TPS=2000x0.8÷(2x60x60x0.2)=1.1,保存接口的TPS=5000x0.8÷(2x60x60x0.2)=2.8,TPS只要能达到我们计算的值就能满足线上需要。
脚本编写
经过抓包工具分析接口发现只需要写登录和保存接口即可,下面是这个脚本的调试时的样子:
重点来了!!!调试接口时设置线程数为1循环次数为1就行,编写脚本时遇到的坑有登录接口和保存接口的请求头中的Content-Type不一样所以我们在保存下又增加了一个HTTP信息头管理器;保存接口传参中有中文我们需要在内容编码写入UTF-8(不写入的话会产生乱码)。
脚本调通了我们就完善一下脚本并设置好并发数来运行脚本,如下:
1、设置线程组中的线程数并勾选循环次数为永远,勾选调度器设置好持续时间来让线程持续运行。
2.添加断言并去掉查看结果数和调试取样器(运行时会耗费机器资源)。添加聚合报告、TPS和响应时间监听器来检测结果。
3.然后开始执行,等待运行完毕后查看监听器中的结果。
聚合报告:主要关注95% 响应时间、异常和吞吐量指标
Transactions per Second:主要关注TPS随时间的变化趋势
Response Times Over Time:主要关注响应时间随时间的变化趋势
这就是一次简单的压测,根据需求分析并写出脚本,写脚本时先用一个线程来调试成功,成功之后再设置相应的并发数来进行压测。
在压测中不仅需要看聚合报告、TPS和响应时间折线图,也需要配合运维查看服务器CPU、内存、磁盘等利用率。一般来说服务器的这三个指标利用率在压测过程中不能超过80% 。当压测完成后,根据结果配合开发、运维进行性能调优,性能调优后续会笼统的讲一下。