速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

论性能测试

  • 2020-02-12
  • 本文字数:3285 字

    阅读完需:约 11 分钟

论性能测试

Part 1:性能测试

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。


A. 类别


性能测试包括负载测试、压力测试、基准测试等。


i. 负载测试


  • 通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。


ii. 压力测试


  • 也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等


iii. 基准测试

Part 2:性能测试目的

验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,对代码进行优化,最后起到优化系统的目的


i. 系统调优


ii. 识别系统中的弱点


iii. 评估系统的能力


iv. 验证系统的稳定性、可靠性

Part 3:性能测试流程

制定性能测试目标à选择性能测试工具à设计性能测试à执行性能测试脚本à监控分析系统à性能调优


A. 目标


例如:满足 3000 用户在线、240 个用户同时访问,访问响应时间不超过 2 秒,系统资源使用率不超过 30%


B. 工具


可选 LR、JMeter、Locust 等主流测试工具,这篇文章主要介绍 LR 和 JMeter 相关


C. 设计


测试脚本开发、负载生成规则、场景设计及监控方式、测试环境的搭建


D. 执行


根据需要进行基准测试、负载测试、压力测试等,搜集结果


E. 监控


监控各个节点的运行情况


F. 分析


对数据进行分析,需要众多人员共同协作,罩住数据背后的问题,确定性能瓶颈


G. 调优


确定以后,进行软硬件调优,然后重复之前的步骤,找到最合适的优化方案


H. 性能指标


i. 响应时间


  • 针对页面操作,用户感官满意响应时间<2s,可以接受响应时间 2~5s,如果响应时间>5s 用户将无法接受。

  • 针对内部调用的接口响应时间需要更快,具体与接口种类相关。


ii. 吞吐量


  • 一般结合业务需求而定


iii. 服务器资源占用


  • CPU 占用率

  • 内存使用率

  • Cache 命中率

Part 4:LR 篇

HPLoadRunner 是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题


A. 轻松创建虚拟用户


i. 使用 LoadRunner 的 Virtual User Generator,您能很简便地创立起系统负载。该引擎能够生成虚拟用户,以虚拟用户的方式模拟真实用户的业务操作行为。


B. 创建真实负载


i. Virtual users 建立起后,您需要设定您的负载方案,业务流程组合和虚拟用户数量。用 LoadRunner 的 Controller,您能很快组织起多用户的测试方案。


C. 录制脚本


i. 参数化


  • 参数化可以让脚本更好的适应环境变化,提高脚本适应能力

  • 场景运行时,每个用户使用不同参数,提高真实性


ii. 关联与 session


  • 对于脚本,很多时候,我们处理数据的时候,是需要对服务端返回的数据进行解析,而服务端返回的数据如果每次都是变化的话,每次我们都是需要动态获取,这个时候就需要关联。简单来说,就是处理服务端返回的动态数据


iii. 创建集合点


  • 集合点就是为了让 Vuser 集合,然后同时做某个操作,只要在相应的请求前设定有意义的集合点 lr_rendezvous 即可


D. 执行监控


i. 在启动性能测试之后,系统会按照设定的场景产生压力。在执行过程中,需要观察脚本执行的情况,被测试系统的性能指标情况。LR 监控来查看这些信息


E. 分析报表


i. 一次性能测试执行完成,会创建各种性能分析报表,包括 cpu 相关、吞吐率、并发数等。

Part 5:JmETER 篇

A. jmeter 简介


Apache jmeter 是一个 100%的纯 java 桌面应用,用于压力测试和性能测量。它最初被设计用于 Web 应用测试但后来扩展到其他测试领域。Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl 脚本,java 对象,数据库和查询,FTP 服务器等等)的性能进行测试。它可以用于对服务器,网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。


  • 优点:开源,轻量级,免安装,跨平台。可支持二次开发和拓展。

  • 缺点:性能整体流程缺失,报告展示不够友好(逐渐被插件弥补)。


B. jmeter 进行性能测试原理


  • jmeter 脚本运行原理:jmeter 核心代码封装多种页面请求类型和多种 API 请求类型,提供 GUI 页面来填充参数,生成可运行的 xml 脚本文件,jmeter 能对脚本文件进行解析,并调用相应协议。这种方式方便脚本的编写,易上手,对代码要求较低,只需要掌握相应请求协议相关参数即可,且方便调试。插拔式的取样器支持无限制扩充测试能力,对于不支持的新协议,可以进行二次开发进行扩展。

  • jmeter 性能运行原理:Jmeter 性能原理与 loadRunner 类似。采用多线程来模拟多用户,通过对线程的开启运行的控制来达到实际用户增长的复杂需求。配置(可扩展)多种计时器,定时器。来实现用户集中某时间刻访问,即集合点概念,或着采取等待时间定时器模拟用户操作时间等待。实现更贴近于实际访问情况的性能测试方式,使性能结果数据更真实。

  • jmeter 数据采集原理:jmeter 提供对线程的监听,能将运行结果进行处理,如传递给 GUI 进行数据展示,和曲线生成,记录生成日志文件可以供非 gui 方式运行,提供运行完成后的性能数据分析。可以实时发送给时序数据库,提供监控使用,可以动态监控查看。


C. jmeter 性能测试步骤(前提:选型使用 jmeter 作为测试工具)


  • 性能需求分析确定:先确定此次性能测试目标,需求,收集性能需求参数,确定性能测试的测试环境情况与通过与否的判断条件。确定测试各种场景。

  • 脚本分析编写并调试:根据前期确定的各种场景进行脚本编写,设置请求,定时器模拟集合点,等待时间,设置为单线程运行脚本,测试脚本是否按预期执行,调试使脚本能够按预期执行。

  • 搭建好测试环境:根据需求搭建符合要求的测试环境,提前做好能够监控服务器运行状况的方式(cpu,内存,网络,DB 等),确保测试环境被测系统,运行参数配置正确,运行无误。

  • 执行性能测试,运行性能脚本:确定发送请求的用户数,执行测试的压力机是否能够支持发送这些并发数(根据压力机 cpu 与内存确定)如果达不到可以使用分布式压力机进行压测,确定测试机与测试环境网络互通且网络足够支撑压力测试运行。确定完成后即可根据需求确定脚本运行参数,使用 NO-GUI 方式进行性能脚本执行。

  • 对性能测试数据进行分析:运行完成后收集性能测试数据,对测试数据进行分析,可以导入到 jmeter 内监听器进行数据处理,或着采用其他处理方式,根据数据来验证需求是否满足,确认此次性能测试是否通过。


D. 基于 jmeter 性能测试平台


  1. 思路:统一管理 jmeter 的版本,性能需求维护,性能脚本与结果数据的统一管理,增加服务器的运行情况监视,从需求制定到结果分析在测试平台一站解决,简化了性能测试工作,将性能测试变成可视可控可管理状态。

Part 6:总结

1、性能测试是什么?


性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试与压力测试都是性能测试。负载测试主要是通过各种工作负载下系统的性能。随着负载的变化,来确定系统的性能变化。压力测试主要是确定的系统所能承受的极限。互联网金融客户群体相当庞大,所以对于我们来说系统的性能尤为重要。


2、性能测试做什么?


性能测试是通过使用各种工具,来模拟各种可控与不可控的请求。通过模拟生产运行的业务以及使用场景的组合形成多种性能测试点,测试系统的性能是否能够满足生产性能要求。在特定条件下运行验证系统承受能力。通过各项性能指标来判断系统是否达到生产需求,及时对系统做出风险评估。发现问题、解决问题,回馈用户高质量的体验。


3、性能测试做怎么做?


我们系统的性能测试利用市面上测试工具进行性能测试。这种测试方法可以捕获部分问题,但很难模拟业务场景组合。而且测试工具五花八门,不利于搜集测试性能结果。我们现在进行的性能测试开发,利用统一的性能测试工具 Jmeter 做为核心。利用 influxDB 数据库做数据收集,Grafana 做性能数据展示平台。搭建完整的性能测试平台,开放统一的性能测试通道,建立通一的性能指标收集平台。平台根据我们自己的业务要求建立性能测试计划,推出不同的业务模板。通过平台接口可进行合理的性能测试。我们可根据不同业务展示不同的性能图形。有利于测试人员及时定位问题。


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/191


2020-02-12 15:29952

评论

发布
暂无评论
发现更多内容

Activity初窥门径

梦笔生花

android App Activity

个人开发者应该如何选购云服务

光毅

AIGC热门技术岗平均年薪超百万,脉脉林凡认为白领可能先于蓝领失业

科技热闻

如何使用 MegEngine 生态落地一个算法

MegEngineBot

开源 性能优化 MegEngine 算法落地

「行业化」会是ToB巨头们的新战场吗?

ToB行业头条

碳基大模型--人一生处理多少个token?

FN0

人工智能 AIGC ChatGPT

AI的道德风险验证

陈磊@Criss

探索Python Web后端技术的发展之路

阿呆

MobPush 厂商通道SDK集成指南

MobTech袤博科技

矩阵起源荣获“IT用户满意度大会”年度新秀称号

MatrixOrigin

MatrixOrigin MatrixOne

AI又火了,这一次云厂商能赚到钱吗?

脑极体

云计算 AI 云厂商

职场「OKR」,魔幻又内卷

Java 架构 职场 OKR

从人工智能角度看人肉智能

FN0

AIGC

使用 DataEase 展示服务器运行状态

搞大屏的小北

Linux监控 Linux监控脚本 监控展示 监控大屏

秒懂算法 | Treap树

TiAmo

数据结构 算法 节点 旋转法

世界备份日|有“备”而来,才能不为数据安全“蕉绿”

云布道师

存储

腾讯云数据库性能打破世界纪录 每分钟可处理8.14亿笔交易

数据库小组

数据库 腾讯云 tdsql

DevOps |如何说清楚研发效能工作的价值?

laofo

DevOps cicd 研发效能 持续交付 研发效能度量

一文讲透|如何部署OceanBase社区版(4.x版)

OceanBase 数据库

数据库 oceanbase

一文读懂mysql锁

Paincupid

MySQL MySQL锁 mysql锁原理 mysql如何上锁 msyql锁分类

从制作九转大肠来谈起 | GreptimeDB 如何提高多步操作的容错能力

Greptime 格睿科技

数据库 云原生 时序数据库 procedure

Sync包Mutex的原理阐述

Jack

golang

「高频必考」Docker&K8S面试题和答案

王中阳Go

Docker 高效工作 学习方法 面试题 Go 语言

轻松搞懂云成本优化:FinOps,2023年一定要懂的热点趋势!

博文视点Broadview

电商通用型商品中心设计

京东科技开发者

构架 企业号 3 月 PK 榜 电商中心 SKU 类目

设计原则 — I 接口隔离原则

Lemoon Can

接口隔离原则 设计原则

一文读懂HAG:首个永久锚定BTC Mining算力的Security Token

股市老人

深入探讨Python Tornado框架:原理与异步实现

阿呆

Python tornado Web

pulsar:创建更多租户 VS 创建更多namespaces

李code

架构 pulsar 调优 业务

RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践

阿里巴巴云原生

阿里云 RocketMQ 云原生

“ChatGPT们”的淘金时代

OneFlow

论性能测试_文化 & 方法_闫亚威_InfoQ精选文章