写点什么

论性能测试

  • 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:29915

评论

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

在 Mac 上玩网游的简单方式

懒得勤快

Golang Array and Slice

escray

学习 极客时间 Go 语言 5月日更

2021年5月墨天轮国产数据库排行榜:十强榜单固若金汤

墨天轮

数据库 腾讯云 阿里云 国产化 dba

MySQL慢日志全解析

Simon

MySQL 慢查询

超时与线程池的坑

ES_her0

5月日更

Python 加密解密信息 - DAY9

Qien Z.

Python 加密解密 5月日更

华为发布HarmonyOS Connect品牌升级计划 帮伙伴做好产品、卖好产品、运营好产品

科技汇

还不会使用分布式锁?教你三种分布式锁实现的方式

华为云开发者联盟

数据库 zookeeper 分布式锁 etcd 数据库表

Kafka万亿级消息实战

vivo互联网技术

kafka 集群

快乐是一种选择

BY林子

快乐

为什么TCP 建连接要3次,断连接却要4次呢?

架构精进之路

TCP 网络层 5月日更

打破思维定式(十二)

Changing Lin

Elasticsearch数据库优化实战:让你的ES飞起来

华为云开发者联盟

数据库 大数据 elasticsearch 日志 ES

多吃点花生米吧!

Nydia

学习

云小课 | 大数据融合分析:GaussDW(DWS)轻松导入MRS-Hive数据源

华为云开发者联盟

华为云 GaussDB(DWS) MRS数据源 融合分析 数据仓库服务

百度 Serverless 函数计算引擎 EasyFaaS 正式开源

百度开发者中心

百度 开源

ShardingSphere 源码

云淡风轻

ShardingSphere

实践解析 | 如何用 OpenGL 实现跨平台应用高效渲染

拍乐云Pano

Android开发

云时代的数据之约

BinTools图尔兹

数据库 云计算 运维 云服务 dba

长连接网关技术专题(四):爱奇艺WebSocket实时推送网关技术实践

JackJiang

Netty websocket 即时通讯 IM 网关

这一年,我们都需要他安静而勇敢的陪伴

小天同学

读书笔记 读书 5月日更

奇亚chia算力挖矿系统开发搭建

薇電13242772558

区块链 算力

去年创建的个人网站,我又给它加多了一些新功能。

彭宏豪95

写作 网站 博客 5月日更

Apache Flink在 bilibili 的多元化探索与实践

Apache Flink

大数据 flink 流计算 实时计算

鸿蒙轻内核M核源码分析:数据结构之任务就绪队列

华为云开发者联盟

鸿蒙 数据结构 数组 双向循环链表 任务就绪队列

从0到1数字化转型的“精益落地”模式

高瑞

架构实战营模块4作业-千万级学生管理系统的考试试卷存储方案

好吃不贵

架构实战营

产品数据分析

lenka

5月日更

千万级学生管理系统考试试卷存储方案设计

eoeoeo

【LeetCode】形成两个异或相等数组的三元组数目Java题解

Albert

算法 LeetCode 5月日更

Dubbo 延迟服务暴露

青年IT男

dubbo

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