全栈性能测试修炼宝典JMeter实战》第1章学习笔记-性能方向的职业发展


  目前市场上有各种IT培训,其中门槛低易上手的就是软件测试。学员通常以功能手工测试为切入点,掌握一些基本测试理论,学会设计测试用例,能够操作缺陷管理工具,熟悉一些业务就可以开始测试工作了。如果仅仅止步于此,技术含量很低,技术含量低,就很容易被取代和淘汰。首先来说一下为什么选择测试这个行业。

1.1 为什么选择软件测试

  • 首先薪水不错
  • 测试相较于开发轻松一些
  • 部分开发转测试
  • 工作岗位需要

1.2 软件测试痛处

  • 相较于开发,薪资水平低
  • 测试是开发后的附加工作,没有方便量化可见的产出;没有里程碑式的贡献,成绩很难突出。
  • 工作压力大
    • 需求难以驾驭(需求可能会经常变更)
    • 岗位处在工作流末端(软件项目研发的流程:需求调研分析-概要设计-详细设计-编码-测试-软件交付准备-验收)

1.3 软件测试发展路线

  虽然前面提到了测试职业的一些困境,但是不用悲观,因为测试的可塑性很高,还有很多其他的方向可以发展,下面谈一下软件测试职业的发展路线。暂且把软件测试职业路线分为:
3个方向

  1. 业务路线
    QA经理、业务专家、产品经理、产品总监、行业资讯顾问等。
  2. 技术路线
    掌握编程技术,拥有业务经验,成为自动化测试工程师、性能测试工程师、软件开发工程师、安全测试工程师、系统分析师、测试总监、研发总监等。
  3. 管理路线
    积累业务知识或者提高技术储备,能够出色的完成本职工作,负责带领团队;岗位一般有测试Leader、测试主管、测试经理及测试总监。

4个象限

  1. 执行层:
  • 软件测试——功能(初级——专职过渡阶段)
  • 软件测试——性能(专职)
  • 软件测试——自动化(专职)
  • 软件测试——安全(专职)
  • 软件测试——白盒(专职)
  • 软件测试——业务(专职)
  • 软件测试——小组长、主管(管理路线)
  • 软件开发(专职)
  • 质量保证工程师SQA(专职——业务线)
  1. 中层,中级执行管理领导:
  • 测试分析师(专职——领导过渡阶段)
  • 测试架构师初级(专职——领导过渡阶段)
  • 测试经理(执行领导——管理路线)
  • QA经理(执行领导——业务路线)
  • 产品经理(执行领导——业务路线)
  • 项目经理(执行领导——技术路线)
  • 系统分析师
  • 测试培训师
  1. 中高层过渡
  • 测试总监(执行领导——高级领导)
  • 产品总监(业务路线)
  • 行业咨询顾问(业务路线)
  • 研发总监(技术路线)
  • 项目总监(技术路线)
  1. 高层
  • CQO——首席质量官
  • CTO——首席技术官
  • CIO——首席信息官
  • CEO——首席执行官

1.4 不仅仅是性能测试

  企业现在逐渐意识到软件测试质量不单单是满足功能流程的顺畅就行,还需要提高测试效率,降低人力成本,更要为软件的稳定和易用性等质量保障来提高产品粘性留住客户。可以这么说,一个成熟的大型产品必须有过关的性能测试把关,这不是一个简单的事情,从需求、架构、硬件、数据库、代码等层面都需要精心设计和测试。
  全栈是学习能力强,总结能力强,不断总结,融会贯通提高实战能力,善于分析因果并找到原因和解决方案的复合型人才。
  本书作者认为全栈测试比纯测试更有未来,来看看全栈型人才除了测试,还需要掌握哪些基本功:

  1. 需求
    在实际的性能需求分析过程中,系统分析师必须清楚的认识到客户很难区分业务需求和用户需求的差别,搞清楚客户背后的真正的业务需求。可以说,软件工程中的“需求分析”就是确定计算机要做什么,要达到什么样的效果。可以说性能需求分析是做系统性能测试前必须要做的事情。
  2. 代码
    能看懂程序,掌握数据库知识、中间件知识、操作系统及硬件知识。
  3. 运维
    测试自动化是一个趋势,不仅包括功能测试自动化,也包括性能测试自动化及测试环境自动化(持续集成),掌握运维手段也变成必要。
    给出流行的一句话:测试人员懂开发最好,开发人员懂测试最好,也就是技术不错,能够跨界

1.5 从招聘要求看岗位价值

  这一部分就不码字了。主要就是一些城市以及公司的测试岗位要求。

1.6 性能测试技能树

在这里插入图片描述

1.6.1 测试工具

  通过测试工具能够提高测试软件开发速度,腾出时间专注于问题分析。主流工具有LoadRunner与JMeter,当前工具也不能解决所有的问题,有时会还是需要自己编写程序来实现测试脚本。这两个工具不是只能做性能测试,其实做性能测试的工具也可以做功能自动化回归,API和UI测试等都可以实现。不是非得Selinum、WebDriver等才能做自动化测试。
常见难点

  1. 用户和业务模型分析搭建;
  2. 合适的脚本开发(大部分初学者不根据用户和业务模型来开发脚本,认为要回归成功即可);
  3. 合适的需求分析转化为场景设计(大部分初学者不知道如何根据需求进行场景设计);
  4. 大容量系统的数据生成和使用;
  5. 大型系统的性能压力负载和实施;
  6. 云计算的负载生成和实施。

1.6.2 测试基础

  性能测试是一门富有挑战的、有深度的、综合性的学科。
  很多性能测试初学者总觉得性能测试就是写个脚本,弄几台机器压一压,出个报告就行。通常关注“并发多少”“响应时间多少”“能跑通吗”这些问题。认为并发越大,响应时间越快,那性能一定就越好。
  性能测试不仅仅是录制脚本或者编写程序,基本的性能理论、性能执行的原则还是要了解的。同样的脚本,不同的人员执行,不同的针对点,测试结果会大相径庭。
  实际上我们需要对系统进行一系列复杂的需求分析,以及一系列性能测试计划和设计的工作才能开始性能测试执行。经过N次回归,找到瓶颈的具体原因,并优化。掌握性能理论基础才能驾驭那些性能测试工具等,没有掌握性能理论基础直接操作好比开车找不到目标,盲目原地打转或离目标越来越远。
  自动化测试的目的是为了提高工作效率,目前,功能测试与性能测试都朝着这个方向发展,这些都是持续集成的一分子。
  鉴于目前行业内普遍项目时间紧,性能测试架构师在公司担任性能测试、自动化测试等多种角色,那么减少加班和追求高效益和高成就是我们全栈性能测试工作者的追求了。
  有时候测试工具并不能够解决测试脚本问题,比如现在流行的SOA 架构封装的 RPC 协议,就需要写代码来解决脚本问题。业内比较有名的比如 Dubbo、Dubbox, 笔者也碰到过这一类的测试,鉴于工作的重复性,为了节省时间提高效率,ROAD TESTING 团队在为某企业团队性能测试内训时对 JMeter 进行二次开发测试元件),专门用来测试Dubbo、Dubbox 协议的接口,这样我们功能测试人员都可以直接选择测试的项目与接口就可以,直接无脚本编程来做性能测试执行,大大提高了脚本开发效率。
常见难点

  1. 评估需求;
  2. 负载建模(用户与业务模型);
  3. 性能压力生成的原理和并发等之间的关系;
  4. 性能测试用例;
  5. 新系统需求分析;
  6. 容量规划;
  7. 性能测试策略。

1.6.3 代码

  作为IT部门的一员不可避免地要和开发代码打交道,了解编程知识既能提高测试内涵,还能提高交流沟通的效果。更重要的是,做自动化测试、单元测试、性能测试、安全测试都离不开代码。所以我们还是要掌握一些普及率高的编程语言和脚本语言。这里我们推荐Java、Python等。
  Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,目前也是国内公司使用的相对普及的语言。
  Python具有丰富和强大的库。它常被称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++) 很轻松地联结在一起。Python 是目前国内测试行业比较热门的一门语言,很容易上手,也可以搜索公共库的代码来缩减自己写代码的工作量和时间。

1.6.4 服务器性能诊断知识

  不管我们的程序如何高大上,不管我们用什么语言实现,最终还是要依赖服务器硬件,依赖数字信号,依赖模拟电路。服务器硬件是性能之本,所有性能都会反映到硬件指标上来,我们想要分析性能,服务器知识少不得。服务器几大件,如CPU、存储、内存、网络的性能指标,监控方法都需要熟练掌握。管理这些硬件的操作系统的原理,性能配置参数也需要掌握。要掌握这部分需要学习很多运维和开发知识。
  了解操作系统及其内核对于系统分析是至关重要的。作为性能测试工程师来说我们需要进行对系统行为做分析:系统调用是如何执行的、CPU是如何调度线程、有限大小的内存是如何影响性能的,或者是文件系统是如何处理I/O的,这些都是我们判断系统瓶颈的依据和线索。

  1. Linux
    Linux是一套免费使用和自由传播的类UNIX 操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了UNIX 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。越多越多的企业用这个系统作为服务器的操作系统,所以作为性能测试从业者来说,是必须掌握的系统之一,搭建环境、性能诊断是离不开它的。
    目前Linux/UNIX的分支很多,普及率比较多的有 CENTOS Ubuntu、RedHAT、Red Hat HP-UX、AIX、Solaris等。
  2. Windows Server
    Windows Server 是 Microsoft Windows Server System (WSS) 的核心,是服务器操作系统。目前使用比较多的都是中小型公司,目前2008和2012版本相对比较多。
    数据库是我们系统存储处理的最重要的手段,很大一部分性能问题都牵扯到数据库。所以我们需要深入地了解掌握数据库的语言SQL, 以及常规的性能诊断和调优手法。
    数据库目前有很多,关系型的如 DB2、Oracle、SOLServer、MySQL等,更有非关系型临时性键值存储(memcached、 Redis) 、永久性键值存储(ROMA, Redis) 、面向文档的数据库(MongoDB、CouchDB) 、面向列的数据库(Cassandra、HBase) Hadoop等。
  3. Oracle
    Oracle Database, 简称 Oracle.是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle 数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的适应高吞吐量的数据库解决方案。
  4. MySQL
    MySQL 是Oracle 收购的一个轻量型开源数据库,越来越多的公司为应对日益增长的数据库规模,在原有的基础上二次开发分布式数据库,也是目前国内比较流行的数据库。很多大型公司也在MySQL的基础上进行了分布式的开发,MySQL的能力被大大增强。
  5. NoSQL数据库
    NoSQL, 泛指非关系型的数据库。随着互联网 Web 2. 0 网站的兴起,应对超大规模和高并发的网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。NoSQL 有很多种类型,我们来一起了解。
    (1)键值数据库-Redis
    支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,它提供多种语言的API。其特点是每次存储一个数据时,是根据 Key 进行索引存储的。Redis 适用于数据变化快且数据库大小可预见的应用程序,股票、数据分析、实时数据搜集、通信等。7月阿里云宣布推出了自己的 Redis 云数据库KVStore for Redis, 应用于游戏、电商、社交等行业。
    (2) 列存储数据库-Cassandra
    最初由 Facebook 开发,于2008年转成开源项目。它是混合型的非关系数据库,在网络社交云计算方面应用较理想,读操作比写操作快很多,较适用于银行、金融、数据分析等领域。
    (3) 文档型数据库-MongoDB、CouchDB
    文档型数据库的灵感来自于Lotus Notes 办公软件,而且它同第一种键值存储类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,如 JSON.文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。
    图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。许多NoSQL数据库都有REST式的数据接口或者查询API,如Neo4J、InfoGrid、Infinite Graph。

  常见难点

  1. 进程、线程任务之间的区别?
  2. 线程的中断优先和原理?
  3. 进程的生命周期?
  4. 上下文切换?
  5. I/O密集型和CPU密集型工作负载之间有什么区别?
  6. 生产环境和测试环境之间换算?
  7. 关系型数据库体系结构和逻辑优化与非关系型数据库体系结构和逻辑优化?
  8. 事务数据库和分析数据库的使用?
  9. 数据关系建模与设计?
  10. TOP N SQL 诊断和优化(执行路径、索引和表链接优化等)?
  11. 阻击和根治阻塞和死锁?
  12. 热点防范和定位优化?
  13. 业务数据批量缓存化\异步化?
  14. 数据库配置优化?

1.6.5 性能调优技能

  面对一个性能不佳且复杂的系统,我们做的是建立性能数据分析模型、收集相关资源和指标信息、分析这些数据背后可能的原因。很多人说性能测试最难的就是定位性能瓶颈,作者赞同这种看法。这需要扎实的全栈IT技术基础和业务敏感度以及解决经验。
  另外性能优化是一个系统工程,内容涉及系统各方面,从上到下有软件产品(项目)、中间件、虚拟机、操作系统、硬件。软件产品有系统架构、业务设计、代码实现、数据库物理设计及数据库各种配置等。所以想要做好性能调优,不仅仅是一个人的事,而是整个项目团队的事。
  对于测试来说,不管是脚本实现,还是测试过程中的网络监测,都需要针对通信协议;常见的HTTP/HTTPS、Socket/WebSocket、WebService (Soap) 等协议运用广泛,自然要熟悉。
  常见难点

  1. 系统硬件资源(CPU、网络、内存、1O) 相互之间的关系及原理;
  2. 选择可靠性能指标及指标之间的关联和判定方法;
  3. 永不宕机的实现原理和常见错误;
  4. 排队系统与延迟及缓存的优化关系;
  5. 优化的成本和性价比;
  6. 业务优化的操作实施;
  7. 多系统串联原理及测试隔离。

1.6.6 自动化/持续集成

  当下流行的持续集成工具有Jenkins、Git/SVN、Maven、Ant等。
  利用Jenkins、Hudson等持续集成工具将我们性能测试搭建环境、执行等时间大幅缩短,无效率工作重复次数也大幅降低。持续集成可以帮助我们自动化代码集成、环境集成、自动化测试执行和储存和整理测试报告。

1.6.7 云计算及虚拟化

  通常基于虚拟化技术,允许一个用户或多个用户共享一个物理服务器。虽然给中小企业带来很多的便利,但是这会引起资源的竞争以及性能测试的难度。架构的不确定性、其他网络等硬件资源的成本限制、云上性能负载机的额外开销等。部分云服务商提供新型云服务收费性能测试工具,我们可以在本地开发测试完毕后,再部署到云上。

本章小结

本章主要讲解了测试职业的困境,测试职业的发展方向。

猜你喜欢

转载自blog.csdn.net/weixin_40734030/article/details/112463947