前言:时隔一年,又开始在网上写写学习笔记博客,其实前段时间一直记录在本地,有道云、印象笔记,总是觉得没有特别好用的笔记记录。现在继续想在网上写笔记,其实觉得应该是要写下自己的成长笔记,和大家分享,也许这种更像是一种监督,这样才能坚持下去。加油!
这篇学习笔记,是阅读【全栈性能测试修炼宝典】开始的。将会包括 【原理+实战】!
2019/09/22
性能测试:早些年,是把录制脚本、造成负载当成性能测试。
近年来,把定位、分析问题当成性能测试的核心技术。
现在,不仅要能定位、分析问题,还要把握性能变化趋势。
性能测试工程师能够帮助解决性能问题、搞定测试中的各种不合理配置,给出专业的优化建议。
现状:行业历史原因导致从事测试业务的工程师专注于业务,忽略了技术。所以立志学好性能测试,需要更加刻苦和坚持、自律和高效、专心了。
PS:目前本人是测试菜鸟一只,刚毕业快三个月,只希望能够一步一步加油,专心一个方向再一个方向。加油吧!还要和我一样的人儿!嘻嘻
扯淡这么久,其实是我每次看一本书都会看前言啥的给自己打打鸡血!好咯。进入笔记部分。希望是干货!
第一部分:基础篇(启蒙篇、废话篇)
第一章:性能测试方向职业发展方向
1.1为啥选择软件测试(我们要成为不可替代)
没有技术含量的可代替的软件测试会有危机感的。所以学习就是为了让自己无可替代。。。
1.2软件测试的痛楚
软件测试人员技术一般,没有开发和运维的技术功底(很不服气hhh、‘但不得不承认)
技术上带来的问题:地位、重视度、待遇、成就感、压力、加班、提升、稳定性(原因:不是很核心价值)
软件项目研发的流程:需求调研分析-概要设计-详细设计-编码-测试-软件交付准备-验收。(测试位于末端,工期会被前面的占用,所以测试时候一般回很少有充足的时间,在不增加测试资源的情况下加班赶工在所难免,学习自然成为一种奢望,还提啥提升技术呢?)
1.3软件测试发展线路(划重点)
困境 !==悲观,软件测试的发展路线还是很广的。
暂时分为以下发展线路:
3个方向:业务路线、技术路线、管理路线
4个象限:执行层、中层、中高层过渡、高层。
1、业务路线:职位 QA经理、业务专家、产品经理、产品总监、行业咨询顾问等
2、技术路线:自动化测试工程师(编程+业务)、性能测试工程师、软件开发工程师、安全测试工程师、系统分析师、测试总监、研发总监等
3、管理路线:积累业务知识或提高技术储备,能够出色完成完成本职工作,负责带领团队;岗位一般有测试Leader、测试主管、测试经理及测试总监等。
执行层:
(1)软件测试--功能(初级--专职过渡阶段)
(2)软件测试--性能(专职)
(3)软件测试--自动化(专职)
(4)软件测试--安全(专职)
(5)软件测试--白盒(专职)
(6)软件测试--业务(专职)
(7)软件测试--小组长、主管(管理路线)
(8)软件开发(专职)
(9)质量保证工程师SQA(专职--业务线)
中层,中级执行管理领导:
(1)测试分析师(专职--领导过渡阶段)
(2)测试架构师初级(专职--领导过渡阶段)
(3)测试经理(执行领导--管理路线)
(4)QA经理(执行领导--业务路线)
(5)产品经理(执行领导--业务线)
(6)项目经理(执行领导--技术路线)
(7)系统分析师
(8)测试培训师
中高层过渡:
(1)测试总监(执行领导--高级领导)
(2)产品总监(业务路线)
(3)行业咨询顾问(业务路线)
(4)研发总监(技术路线)
(5)项目总监(技术路线)
高层:
(1)CQO--首席质量高
(2)CTO--首席技术官
(3)CIO--首席信息官
(4)CEO--首席执行官
1.4不仅仅是性能测试
全栈一般是技术方面的领导者。题目强大的学习功力,比较依赖搜索或者即时学习,根据需求和自己扎实的基本功,把一项或者某二项技能达到接近专科人员的能力。全栈是学习能力强、总结能力强、不断总结和融会贯通提升实战能力,善于分析因果找到问题和解决方案的复合型人才。
作者认为全栈测试比纯测试更加有未来。要成为复合型人才,是越来越多软件测试者走上测试总监、技术总监、CTO等高级技术管理类岗位上必须要成为的。
软件测试成为复合型人才除了测试还需要的基本功:(1)需求 (2)代码:代码逻辑、数据库、程序部署在的中间件知识、操作系统、硬件 (3)运维:测试自动化趋势(功能自动化、性能自动化、测试环境自动化也就是持续集成),对系统涉及的中间件、数据库、缓存等产品也要熟练运维。
在测试行业想脱颖而出的话还是一个技术为关键。测试人员懂开发最好,自然价值更高。测试开发(自动化)兼具。
测试岗位中,尤其是以性能测试岗位需要具备的知识面最广,涉及程序开发、数据库、中间件、操作系统、硬件知识等,基本就是照着全栈测试的模板在培养了,突破手工测试选择性能测试是一个好的方向,有了这个的积累就不仅仅能做性能测试、也可做开发、测试开发(自动化)、架构等多种都行。
1.5招聘要求看岗位价值(需求决定价值)
广州某公司-高级性能测试工程师(2-2.5w/月)
- 计算机或相关专业本科及以上学历;
- 3年以上性能测试工作经验,项目用户群十万级,日活跃度十万级,并发数近千;有金融项目性能测试经验优先;
- 熟练使用至少一种商业性能测试工具和开源性能测试工具,如LoadRunner;
- 具备一定的设计编码能力,能熟练进行性能测试脚本编写;
- 熟练掌握数据库(Oracle或Mysql)各项性能参数设置、监控及优化;
- 熟练Java,熟悉C/S、B/S及其三层结构的开发模式;
- 熟悉常用的应用服务器的配置调优;
- 具有较强的业务分析能力,沟通表达能力和综合协调能力,工作积极主动。
深圳某公司-性能测试工程师(1.4-1.8w/月)
岗位要求:
- 熟悉性能测试流程
- 熟悉常用中间件配置及调优,熟悉linux操作系统
- 熟悉mysql,DB2等数据库
- 熟悉java编程语言,熟悉常用的web框
- 熟悉jmeter、loadrunner等性能压测工具的使用
有一定的抗压能力,学习能力强
任职资格:
- 计算机相关专业本科学历(特别优秀者可放宽至大专);
- 至少2年以上性能测试经验,1年金融从业经验
- 有银行相关项目经验,熟悉银行信息系统架构,精通消费金融类业务系统优先
- 有信用卡相关开发或测试经验优先
上海某公司-性能测试工程师(0.9-1.3w/月)
岗位职责:
- 根据业务场景制定性能测试计划及用例,收集并整理性能测试需求;
- 测试脚本执行并收集监视数据;
- 协助高级人员进行性能优化;
- 根据测试数据进行分析并编写测试报告;
- 有强烈的责任心,工作态度严谨,独立思考,具备良好的沟通能力和团队合作精神。
任职要求:
- 大专及以上学历,至少1年及以上性能测试经验;
- 熟悉LoadRunner,jmeter,fiddler等性能测试工具,能够执行性能测试;
- 至少掌握1种常用编程语言(C、JAVA等);
- 熟悉至少一种关系数据库基础知识;
- 具备较强的沟通能力,团队精神好,责任心强,有较强的抗压能力。
1.6性能测试技能树
1、测试工具
工具使用了节省时间的,当然有时候还需要自己编写程序来实现测试简本。并且这两个性能测试工具其实不止能做性能,还可以做功能自动化回归、API和UI测试等都可以实现。并不非 要Selenium、WebDriver才能做自动自动化测试。
2、测试基础
3、代码:Java:目前国内相对普及
python:胶水语言,测试行业中比较热门的一门语言
4、服务器性能诊断知识
Linux:性能测试从业者必须掌握的系统之一,搭建环境、性能诊断都离不开。
Windows Server:服务器操作系统,中小公司用的多
数据库:关系型数据库(DB2、Oracle、SQLServer、MySQL等),NoSQL数据库泛指非关系型数据库
非关系型临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase)Hadoop等
5、性能调优技能
性能测试最难的就是定位性能测试瓶颈。
性能调优:一是建立性能数据分析模型,收集相关资源和指标信息、分析背后的原因;二是从系统工程,产品的上上下下涉及的所有方面进行优化,包括软件产品、中间件、虚拟机、操作系统、硬件等。软件产品包括系统架构、业务涉及、代码实现、数据库物理设计以及数据库各种配置。
对于测试来说:不管是脚本实现还是测试过程中的网络监控,都需要针对通信协议(见上图),自然要熟悉这些。
6、自动化/持续集成(工具见上图)
理用Jenkins和Hudson等持续集成工具将我们性能测试搭建环境、执行等时间大幅度缩短。持续集成帮助我们自动化代码集成、环境集成、自动化测试执行和存储和整理测试报告。
7、云计算和虚拟化
1.7小结
持续加油,高度自律,严格要求。全栈测试,我们可以先朝着性能测试出发。且目前对性能测试工程师的要求就是全栈的要求。加油吧!
2019-09-23 00:27:01
2019/09/23
第二章:性能测试初体验
前言(回顾):认识性能测试。性能测试是一项综合性的工作,致力于暴露性能问题,评估系统性能趋势。性能测试工作实质上是利用工具去模拟大量用户操作来验证系统能够承受的负载情况,找出潜在的性能问题,分析并且解决;找出系统性能的变化趋势,为后续的扩展提供参考。并不是简单的录制脚本。本章降带你进入性测试的领域,体验性能测试的大致格局和重点。
2.1性能测试的价值
案例出真知【双十一】【12306抢票】等,做好性能测试多么重要,直接和辣么多白花花银子相关啊,动不动几百亿的双十一啊。
总结:要应对大规模的用户共同使用一套系统,就必须要有相对应的强壮性能的系统。性能测试是系统的保障,上线前对系统进行性能测试是必不可少的。
软件测试分类:性能测试真的占很大比,内容中占了8个左右。性能测试是保障系统性能,提供良好的用户体验。
2.2性能测试流程
先上图(性能测试流程):性能测试应该符合项目管理流程。
(1)业务学习:查看文档,手工操作,了解系统功能。
(2)需求分析:分析系统非功能性需求,圈定性能测试范围,了解性能指标。
(3)工作评估:分解、评估、资源投入
(4)设计模型:圈定范围之后,把业务模型映射成测试模型
(5)计划编写
(6)脚本开发
(7)测试环境准备:性能测试环境包括服务器和负载机
(8)测试数据准备
(9)测试执行
(10)缺陷管理
(11)性能分析
(12)性能调优
(13)测试报告:测试工作的重要交付件,对测试结果进行报告,常见的指标说明(TPS、RT、CPU Using),发现的问题等
主要交付件:测试计划、测试脚本、测试程序、测试报告或者阶段性测试报告。
(14)评审
2.3性能测试成功与失败因素
掌握性能测试工具只是性能测试的万里长征第一步,没有一定的需求、开发和运维的专业能力,往往会吃一些苦头。
性能测试的几个难点:(1)需求分析(2)场景设计(3)性能诊断调优(4)环境搭建和模拟
性能测试的重要关注点讲解:
(1)评估系统,需求分析
(2)场景设计,用例设计
(3)测试执行、是否通过
执行时常见的关注指标:响应时间(RT)、吞吐量(TPS)、事务成功率、硬件指标(CPU、内存、存储、网络)、稳定性、内存是否泄露、其他(数据库、中间件、缓存、JVM)
(4)性能诊断调优
要具备跨领域知识,例如开发、运维、数据库、缓存等。
2.4不同角色看性能
2.5性能测试工具的选择
性能测试需要大量负载,这就需要工具的帮忙。但是工具并不似性能测试的核心,只是起到辅助。
常见性能测试工具:HP的LR、Apache JMeter(开源)、Grinder(开源)、CompuWare公司的QALoad、Microsoft的WAS、RadView的Webload、IBM的RPT、OPENSTA等
2.6性能测试相关术语
(1)负载
(2)性能测试
模拟用户负载来测试系统在负载的 情况i昂下,系统的响应时间、吞吐量等指标能够满足性能需求
(3)负载测试
一定软硬件环境下,不断加大负载(不同虚拟用户数)来确定在满足性能指标情况下能够承受的最大用户数。简单说,就是帮我们对系统进行定容定量,找到系统性能的拐点,给与生产环境规划建议。性能指标包括TPS、RT、CPU Using、Mem Using等软硬件指标。操作层面说,负载测试也是一种性能测试阶段。
(4)配置测试
(5)压力/强度测试
一定软硬件环境下,通过高负载的手段来使用服务器的资源(强调服务器资源、硬件资源)处于极限状态,测试系统在极限状态下长时间运行是否稳定,确定是否稳定的指标包括TPS、RT、CPU Using、Mem Using等。
(6)稳定性测试
一定软硬件环境下,长时间运行一定负载,确定系统在满足性能指标前提下是否运行稳定。这里并不强调负载处于极限状态,这就是同上面压力测试不一样的地方。稳定性测试着重的是满足性能指标,系统的稳定性。
(7)TPS
每秒完成事务数。通常指每秒成功的事务数。
(8)RT/ART
响应时间/平均响应时间,指一个事务会花费多长时间完成。
(9)PV
每秒用户访问页面的次数。用来分析平均每秒有多少用户访问页面
(10)Vuser虚拟用户
(11)Concurrency并发,分为狭义和广义
狭义并发强调的是对系统的请求操作是完全相同的,多使用于性能测试、负载测试、压力测试、稳定性测试场景。
广义并发不限制对系统的请求操作,多适用于混合场景、稳定性测试场景。
(12)场景
(13)思考时间
(14)标准差:标准差小,波动小,系统越稳定。包括响应时间标准差、TPS标准差等
2.7性能测试通过标准
性能测试通过的标准包括服务端性能、前端性能和用户体验性能。
2.8性能测试的趋势
性能测试的深度“云”计算化
持续集成将会更好集成性能测试部分。目前已经有公司在用docker来做集成测试
性能测试一部分并入devops(基于云计算)
2.9总结
性能测试工作中要注意的关键点比较多,首先要做好性能测试需求分析(因为不充足的性能测试分析将会导致性能工作的失败),接下来要做好用例和场景设计,尽可能复现实际负载,这样执行的操作才是可信赖和可参考的。执行过程中要做好性能监控工作,为问题分析提供数据支撑。
2019-09-25 23:44:15
2019/09/25
第三章:JMeter体系结构
3.1JMeter简介
JMeter的作用:一款开源桌面应用软件,用来模拟用户负载完成性能测试工作。企业能够以更低的成本使用JMeter进行性能测试构建工作。
JMeter的测试范畴:可以对Web进行测试,提供web录制功能;另外还指出Java请求、JMS、EJB、WebService、JDBC、FTP、LDAP、SMTP、Junit、Mail、MongoDB、JSR223等的测试。方便扩张JMeter功能满足特定的测试需求。JMeter也支持Socket协议测试。JMeter也很方便进行性能测试自动化。总之,JMeter就是一款非常百变的性能测试工具。
本章内容:JMeter体系结构、JMeter运行原理、JMeter运行环境。
2019-10-08 22:29:51 国庆假期加上节前比较忙,现在重新更新。求不打。。。
3.2JMeter体系结构
名称统一:
第二部分:工具篇
第四章:JMeter脚本开发
4.1JMeter工作区介绍
1、目录树:存放测试计划中设计的元件,执行过程中默认从根节点开始顺序遍历树上的元件。3.0后就好像没有工作台了。在目录树区域中添加进来的都是元件。
2、测试计划编辑区
3、菜单栏
4.2 JMeter Http协议录制
1、BadBoy第三方工具录制
BadBoy就是一个浏览器模拟工具,支持录制回放功能,还可以调试。
作用:可以用来做自动化的测试(因为有捕获表单数据功能)、也可以进行对Web页面进行诊断,诊断系统响应快慢和响应数据的大小。
这里关注的是BadBoy的录制功能。
录制的脚本直接导出生成.jmx格式的文件,正式JMeter的脚本保存格式,实际上就是一个XML格式的文件。
录制方式两种:一种是Request方式(模仿浏览器发哦那个表单信息到服务器,每一个资源都将作为请求发送),一种是Navigation方式(记录用户鼠标操作。类似QTP,回放时模拟一个点击)。工具菜单栏上点击 ‘N’可以换成Navigation格式。基于Jmeter脚本要求,选用request方式录制
BadBoy的录制总结:
(1)打开BadBoy,初始界面默认开启了Request的录制模式,默认是录制状态。
(2)地址栏输入请求的页面,回车或者点击工具栏➡开始进行录制
(3)BodBoy脚本目录结构:Test Suite 1:默认的根节点,类似JMeter中测试计划根节点。
Test1:测试活动的根节点,理解成一个业务功能的脚本存放在此目录中
Step1:测试活动的步骤,当业务功能比较长,可以划分多步骤。
(4)导出导成jxm格式
2、自身HTTP代理方式录制
原理:解析网络数据包,按照HTTP协议包装成HTTP Request、HTTP Response等对象,这些对象就是我们能识别的东西。
第五章:JMeter负载和监听
...