深聊性能测试,从入门到放弃之:性能测试技术栈,看完这篇,保证刷新你对性能测试的认知~~

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
性能测试 PTS,5000VUM额度
简介: 深聊性能测试,从入门到放弃之:性能测试技术栈,看完这篇,保证刷新你对性能测试的认知~~

1、引言

关于性能测试的理论知识、监控分析、调优及集成,小鱼也是写了不少博文,

而今天写的这个目的,很简单,

就是为了能更快更直接的让小伙伴知道性能测试的技术栈。

要想成为性能测试大佬,需要掌握那些姿势。

话不多说,先展示一下性能测试技术栈的脑图。

2、性能测试基础

这部分内容,小鱼有专门整理过一篇博文,

深聊性能测试,从入门到放弃之:初识性能测试》,在这里,原有的就不再这里面重复写了,

但是,在这里,小鱼会根据上篇博文进行扩展,主要体现在:

  • 性能测试理论
  • 测试开发技能

2.1 性能测试理论

性能测试理论,是用来指导我们开展性能测试,指导我们要得到什么结果,让我们了解测试过程是否可靠,测试结果是否具备可参考性。

而对于性能测试理论,我们主要关注以下几点:

  • 测试需求分析要能够准确挖掘出性能需求,圈定测试范围,并明确性能指标;
  • 测试模型要能够尽量真是的反应系统的实际使用情况;
  • 测试环境尽量对标实际(避免云主机,虚拟机);
  • 测试数据在量与结构上尽量与实际对标;
  • 测试场景要考虑业务关联,尽量还原实际情况;
  • 测试监控尽可能少的影响系统性能;
  • 测试执行时测试结果要趋于稳定。

在这里,如果还是有些不理解的话,

别着急,别灰心,

按照小鱼的套路,这些内容会在接下来的实战篇,会详细的讲解。

2.2 测试开发技能

系统(产品)的多样性决定了测试程序的多样性,不是所有的系统都可以有工具可以帮助进行测试的,这个时候我们就需要自己动手开发测试程序;

如果了解Locust的话,可以参照小鱼的python+Locust系列实战博文:

深聊性能测试,从入门到放弃之:Locust性能自动化(二)代码实战

深聊性能测试,从入门到放弃之:Locust性能自动化(三)如何提高Locust性能

深聊性能测试,从入门到放弃之:Locust性能自动化(四)自定义客户端测试

如果不懂Python流派,那也可以用java直接写Jmeter脚本进行测试,也都是很简单。


当当当然,如果不会开发语言,不会编写脚本,也不是没有版本,那就利用工具,遵循理论,不懂就问,长期积累,也可以具备这种能力的哦。


至于使用的工具,同样,请参照《深聊性能测试,从入门到放弃之:初识性能测试》第四章节:性能工具


不懂的话,可以私信或者留言,小鱼看到也会回复的。

太简单的问题,就…,有颜值的妹子除外…

3、性能监听诊断

性能监听与调优,是性能测试的一个难点

当然,小鱼也是在《MySQL性能监控(sql命令语句 & MONyog工具)全掌握,这一篇足以!》写过,MySQL的性能监控诊断,

当然呢,这里,我们不仅仅说的是MySQL,还有别的呢。

接着往下看。

3.1 前端监听诊断

目前的开发形式多采用前后端分离的方式,一套后端系统处理多套前端请求;

用户通过APP(H5、Native、Hybrid应用)和PC中的浏览器访问系统。

  • JavaScript的运用让前端技术发展飞速;
  • APP的运用让前端可以存储、处理更多业务;
    随着功能的增多就带来性能问题,前端的性能问题也越来越成为广泛关注的重点。
    但是幸运的是,前端应用性能的监控工具也有不少。

3.2 服务器监听诊断

不管我们的程序多么牛X,架构多么牛叉,

但是运行程序最后还是依靠服务器硬件,服务器硬件是性能之本,所有的性能都会反映到硬件指标上,我们想要分析性能,就需要知道服务器知识,主要体现在:

  • CPU
  • 存储
  • 内存
  • 网络

了解操作系统及其内核对于系统分析至关重要。所以小鱼说过:性能测试是一门综合学科,也是一个团队的活。

对于系统分析,我们要掌握:

  • 系统调用如何执行;
  • CPU是如何调度线程;
  • 优先大小的内存是如何影响性能;
  • 文件系统是如何处理IO;

对于操作系统,我们要掌握:

  • Linux
  • Windows Server

3.2.1 Linux

Linux是开源的类UNIX操作系统,Linux继承了UNIX以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

因为越来越多的大厂用Linux作为服务器操作系统,所以针对性能测试大佬,了解掌握Linux操作时必须的。

但是,针对当前Linux/UNIX的分支也很多,比较普及的有:

  • CentOS
  • Ubuntu
  • RedHat
  • AIX
  • Solaris

3.2.2 Windows Server

Windows Server 是Microsoft Windows Server System (WSS)的核心,是服务器操作系统。

目前都是比较小型的公司在使用。

Windows Server 优点:

  • 资源监视器功能完善
  • 图形界面画
  • 使用方便

3.3 中间件监听诊断

主流的中间件必须是Tomcat,

Tomcat作为一个载体,帮助我们实现通信及作业功能,提供了一套规范,而我们只需要遵循规范,开发出实现业务逻辑代码,既可以发不成系统。

它为我们省掉了基础通信功能和多线程的开发,让我么可以专注业务逻辑的实现。

Tomcat有一些性能指标用来反映服务的"健康情况",如:

  • 活动线程数
  • JVM内存分类
  • 垃圾回收情况
  • 数据库连接池使用情况

3.4 持久化产品监听

数据的持久化有结构数据、非结构数据、块数据、对象数据,存储时对应不同类型的存储产品。比如:

  • 关系型数据库:MySQL、Oracle
  • 非关系型数据库:Redis、HBase
  • 分布式存储:hdfs、ceph

以上这些都属于IO操作。

IO操作一直都是性能的"重灾区",因为不管什么类型的存储,终究是把数据存储的介质上。存储介质广泛使用的是固态硬盘(SSD)和机械硬盘。

机械硬盘是物理读写(IO),其读写速度相对固态硬盘相差很大,比如:

  • 我们启动计算机,如果操作系统不在固态硬盘,启动至少30多秒;
  • 而操作系统在固态硬盘上,启动也就是几秒。

所以,我们可以通过监听存储介质的性能指标来诊断程序在IO上的耗时,

并针对性的优化对存储的访问(比如减少请求次数等)。

因为存储介质的性能是一定的,我们需要对依赖她的持久化产品做调优,比如:

4、性能优化分析

性能调优,有过站门的博文介绍,

性能调优怎么做,看过这一篇,菜鸟变大佬!

深聊性能测试,从入门到放弃之:如何对IO进行性能调优

关于MySQL性能优化方式,这一篇就够!

所以,在这里,也是总结概括性的说一点,因为在后面的实战篇,小鱼同样会展开来说的哦。

4.1 代码分析能力

代码分析,在很多大佬眼里,这不就是开发小哥哥的工作,我一个测试,搞什么代码分析。

这个想法,很危险,必须黄牌警告一次。

作为测试开发的大佬,难道你的自动化测试,单元测试,性能测试,安全测试,都不看代码???

只有多提高自己的代码阅读能力,才能跟开发的小姐姐聊到一起呢~

所以我们要多掌握代码阅读分析能力,多掌握开发语言,多掌握撩妹技能 哎~~ 跑偏了…

最主要的如:Java,Python ,别的就不说了。

4.2 架构

高性能的系统架构与普通系统架构必须不一样。

所以性能优化或者性能规划要依照系统的用户规模来设计,了解架构有助于快速判断系统性能风险,有针对性的进行性能压测,提出合理的解决方案。

每个人都可以都成为码农,但是不是每个人都能成为架构师。

4.3 中间件性能分析

中间件的性能指标反应了系统的运行状况,我们要能够通过这些指标推导出系统的问题所在。

有些可以通过调整中间件的配置来改善系统性能,

  • 用户请求过多,可以适当增加线程池;
  • 当JVM内容回收,特别是FullGC太频繁,我们就要分析到底那些程序了大连的Heap内存申请;
  • 当CPU过于繁忙时,我们就去看那个线层占用大量的CPU资源;
    不是说80%的问题,都是可以用常见的方法解决,所以
    用上述的方法,就可以解决80%的问题。

4.4 操作系统

操作系统统筹管理计算机硬件资源,针对不同业务,不同场景也会有一些可以优化的参数。

我们首先要知道操作系统的限制,还需要从监控的指标中推导。

而常见的调优方法如下:

  • 文件句柄数设置;
  • 网络参数化设置;
  • 亲和性设置;
  • 缓存设置;

同样的,掌握了这些,也就能解决80%的。

剩下的20%,可能就是别的问题喽,例如架构问题…

架构师表示:不背这锅

4.5 数据库分析

系统中流转的数据离不开持久化,而持久化需要数据库。

数据在数据库中的存储结构和搜索方式直接影响性能,大多数的性能调优都集中在数据库的存储及查询上。

所以,学好数据库是多么的重要。

如果还不会,就看小鱼MySQL专栏《MySQL(用法及性能优化)

这里不仅有基本操作,还有性能调优方法哦~

同样要举例子,如:

Key-Value存储时Value过长,性能就会急剧下降,因为网络传输时数据包的MTU(最大数据包大小,Maximum Transmission Unit )通常是1500字节,大的数据包需要网络中多次传输,所以效率就低了,

那问题来了,如何优化数据库,最直接的就是减少Value的长度,文本的限制500,输入框的255/128,还有就是特殊规定限制10。


5、持续集成及工具

性能测试是一个反反复复的过程,发布后执行压测,分析问题、找到问题、修改问题,在发布,在执行压测。

所以这时候,持续集成工具就凸显重要性和方便性。

一般都是用svn/Git做管理,Jenkins做持续集成。

如果不会的话,可以参照小鱼的这两篇:

测试开发之:Jenkins持续集成(上),安装与配置

测试开发之:Jenkins持续集成(下),构建与运行

6、总结

看到这里,是不是觉得自己对性能测试的又有了更深的了解呢。

但是,有的小伙伴也可能觉得,这技术栈的内容太多了,我一下子怎么学得完呢?

嗯,最开始小鱼在学习性能测试的时候,也是有这样的犹豫,甚至想过,不想做这块,

但是,架不住太多的妹子call我,所以就…关键解答完,还有彩蛋…

我们再回顾一下,性能测试的技术栈,也就四部分内容,每个模块,都有专门的博文,

所以,不会的小伙伴,可以直接跳转到对应的博文,详细阅读哦!

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
2月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
68 4
|
3月前
|
测试技术 数据库连接 数据库
测试脚本的编写和维护对性能测试结果有何影响?
测试脚本的编写和维护对性能测试结果有着至关重要的影响,
54 1
|
3月前
|
数据采集 缓存 测试技术
性能测试中,除了迭代次数,还有哪些因素会影响测试结果?
性能测试中,除了迭代次数,还有哪些因素会影响测试结果?
64 2
|
3月前
|
Java 测试技术 Android开发
探索自动化测试的奥秘:从入门到精通
【10月更文挑战第37天】本文将带你进入自动化测试的世界,从基础知识到实战案例,逐步揭示自动化测试的神秘面纱。我们将一起探讨如何利用代码来简化测试过程,提高效率,并确保软件质量。无论你是初学者还是有经验的开发者,这篇文章都能为你提供有价值的见解和技巧。让我们一起踏上这段探索之旅吧!
|
3月前
|
缓存 监控 测试技术
全网最全压测指南!教你如何测试和优化系统极限性能
大家好,我是小米。本文将介绍如何在实际项目中进行性能压测和优化,包括单台服务器和集群压测、使用JMeter、监控CPU和内存使用率、优化Tomcat和数据库配置等方面的内容,帮助你在高并发场景下提升系统性能。希望这些实战经验能助你一臂之力!
190 3
|
3月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
188 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
3月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
604 1
|
3月前
|
缓存 监控 数据挖掘
C# 一分钟浅谈:性能测试与压力测试
【10月更文挑战第20天】本文介绍了性能测试和压力测试的基础概念、目的、方法及常见问题与解决策略。性能测试关注系统在正常条件下的响应时间和资源利用率,而压力测试则在超出正常条件的情况下测试系统的极限和潜在瓶颈。文章通过具体的C#代码示例,详细探讨了忽视预热阶段、不合理测试数据和缺乏详细监控等常见问题及其解决方案,并提供了如何避免这些问题的建议。
87 7
|
4月前
|
测试技术 持续交付 开发者
探索自动化测试的无限可能:从入门到精通
在软件开发领域,确保产品质量是至关重要的。自动化测试作为一种高效、可靠的测试方法,正逐渐成为行业标准。本文将带你深入了解自动化测试的世界,从基础概念到实践技巧,帮助你掌握这一强大的工具。无论你是初学者还是有经验的开发者,都能从中获得宝贵的知识和启发。
|
4月前
|
Java 测试技术 开发者
初学者入门:掌握单元测试的基础与实践
【10月更文挑战第14天】单元测试是一种软件测试方法,它验证软件中的最小可测试单元——通常是单独的函数或类——是否按预期工作。单元测试的目标是确保每个模块在其自身范围内正确无误地运行。这些测试应该独立于其他模块,并且应该能够反复执行而不受外部环境的影响。
107 2

热门文章

最新文章