开发必备的性能测试知识点

/ 默认分类 / 0 条评论 / 422浏览

开发必备的性能测试知识点

jmeter参考手册

一.jmeter聚合报告指标详解

Throughput is calculated as requests/unit of time. The time is calculated from the start of the first sample to the end of the last sample. This includes any intervals between samples, as it is supposed to represent the load on the server. The formula is: Throughput = (number of requests) / (total time).

二.系统性能衡量指标详解

服务端开发衡量系统性能的主要指标无非就是以下几点:

对于qps的含义,如何理解“查询”的含义?这点很重要。首先,需要表明一点,qps是一个宽泛的词,需要针对特定的场景,特定的标准来解释其含义。 例如,现在需要计算一个mysql实例的qps,那么有两个出发点:

在比如,现在需要计算一个由java语言(或者其他任意服务端开发语言,例如go,php,nodejs等等)开发的后端服务系统的qps,该系统只对外提供响应数据格式为json的 操作接口,一般来说,这里的qps指的就是每秒可以处理多少的用户请求,也就是统计一秒内前端(app或者web等)的单次网络请求数(接口请求次数),这里有以下几个统计维度:

到这里,算是把qps的一些概念说清楚了。但是还要补充一个更重要的点,我们需要区分以下两个概念(这里我只在应用层面做举例):

  1. 当前应用的qps
  2. 当前应用支持的qps

这是两个不一样的概念,如果你是一名后端开发人员,那么最常提到的应该是前者,对于一个服务A调用服务B的feign接口,比如线上某个时间点发生了流量激增, 导致A服务侧告警feign的请求线程不够,很明显,这种情况是,A服务的web线程池尚有余力,但是请求B服务的feign线程池扛不住了,所以可以合理考虑扩大feign的线程池.那么这种情况下,我们通过说明原因的时候会有这样一句话:由于A服务在某某时间点的qps突增(或者A服务的某个具体的接口在某个时间点发生qps突增),那么这里的qps说的就是当时A服务的qps。但是,如果你是一名敬业负责,资历深厚的后端开发或者是一名压力测试人员,通常你会在本地开发完接口后,对一些有需要的接口进行本地压测,简单判断该接口的实现逻辑可以抗住的qps是多少。那么这里所说的qps指的就是该服务(或者该接口)在当前环境下运行,所能抗住的qps的最大值。任何一个web系统都会存在这样一个qps的最大值,因为web服务器的web线程数是固定的,所以当处理的请求数达到系统的峰值时,再增加就只能等待,或者直接报错了。

比如我所做的项目,qps统计有两个维度,一个是应用层面的,另一个是接口层面的,每5s进行一次统计,以这段时间内的平均qps作为数据。 网关的应用层面的qps最高可达7k多,负责的模块,应用层面的qps最高可达1.5k,不完全统计,应用层面单个接口的qps最高可达300(首页卡面信息查询接口). 截至当时,用户总量为380w。

jmeter中压测结果的吞吐量Throughput,是指压测时间段内,从第一个请求样本开始到最后一个请求样本结束这段时间内的平均请求样本数。也就是:请求样本总数/样本请求总耗时。所以这里测出来的是本次压测时的qps

三.jmeter压测操作(just for Developers)

3.1 jemter下载地址

立即下载

3.2 基本操作简介

新建一个测试计划,然后在测试计划中创建线程组,然后在该线程组下创建http请求,然后为这个请求设置路径参数等等数据,然后为这个请求添加一些数据检测的功能,比如聚合报告和结果树。这些基本的配置做好以后,就可以直接点击启动了。

压测案例1

这里可以看到,我设置的线程属性,下面来重点介绍下这三个属性的含义:

线程数(Number of Threads):表示最多要模拟多少个用户(线程)在请求。 rampup时间(Ramp-up Period):表示所有线程都启动完毕所需要花费的时间。 循环次数(Loop Count):表示每个线程执行的次数,如果这里配置的是1,那么就表示每个线程请求1次就结束了。 官方文档