全栈性能测试修炼宝典 JMeter实战

978-7-115-43722-8
作者: ROAD_TESTING软件测试组 组稿 陈志勇 马利伟 万龙
译者:
编辑: 张涛

图书目录:

详情

在技术上,它不只是全面、深入地讲解了性能测试和性能优化,而且还讲解了安全测试;在工具上,不只是讲解了JMeter,还讲解了受欢迎的开源工具Apache ab;在内容上,不只是讲解了软件测试,还为测试人员的职业规划和发展指明了方向,从某种程度上讲,这比技术更有价值;在实操性上,它绝不是“纸上谈兵”,解决了很多书让读者无法学以致用的弊端,以大企业的真实项目为基础,融技术讲解于项目实战;   

图书摘要

版权信息

书名:全栈性能测试修炼宝典 JMeter实战

ISBN:978-7-115-43722-8

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

• 编  著 陈志勇 马利伟 万 龙 陈坤龙

  责任编辑 张 涛

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

  邮编 100164  电子邮件 315@ptpress.com.cn

  网址 http://www.ptpress.com.cn

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315


本书全面介绍了进行软件性能测试的实战技术和JMeter的应用知识,本书内容分4部分:第一部分基础篇,主要讲解了当前性能测试状况及发展前景、性能测试的基础理论,让读者尽快入门学习;第二部分工具篇,讲解开源负载工具JMeter的体系结构、脚本开发、负载模拟、测试监听等内容,让读者可以从零开始学会使用一个主流的负载工具,此部分是市面上到目前为止对JMeter讲解较全面的内容,掌握其内容即可以进行性能测试脚本开发、性能测试执行等工作;第三和第四部分实践篇、提升篇,详细讲解了性能监控与诊断分析技术,通过项目实践引导读者学会性能测试工作,如诊断问题、分析调优等软件性能测试中的核心技术,并讲解了HTTP、端到端性能监控、性能测试自动化和JMeter常见问题解决等知识。

本书讲解通俗幽默,很适合读者阅读学习,本书适合测试工程师、测试项目负责人、开发工程师、性能测试爱好者阅读,也适合大专院校相关专业师生的学习用书和培训学校的教材。


作为一名软件开发行业的多年从业者,深感应用系统性能的重要性。在当今信息化时代,一个没有高性能的应用系统肯定是没有生命力的。本书以作者多年性能测试经验为背景,从性能测试基本概念、测试工具、测试方法、测试结果分析及系统性能调优等多个角度由浅入深的介绍,非常有利于初学者对应用系统性能测试概念、流程的理解。书中大量实例来源于作者的经验总结,这对于缺乏实践经验的从业人员来说无疑是宝贵的资料。

——上汽通用架构专家 冀晓军

本书不仅仅是目前市面上详细讲解JMeter应用的工具书,更是一本性能测试指导用书。内容涵盖了性能测试理论、脚本开发、性能分析、性能调优等多方面,融汇了作者多年互联网行业性能测试实践经验。本书理论结合实际,针对性强,授人以渔,从业人员值得拥有。

——上汽通用信息部开发测试高级经理 高继文

在互联网时代,更快、更稳定、更安全的系统已成为用户选择应用服务的一个重要因素。这使得更多的公司在产品创新的同时,更加重视应用系统的性能特性。本书是作者在国内大型公司多年一线工作经验的结晶,是性能测试领域最新、最全面的知识整合。不管是初学者,还是经验丰富的工程师,都能从阅读中受益。本书绝对是学习JMeter与性能测试相关知识的不二选择。

——挖财 测试总监 孙金飞

作为一名测试行业资深从业人员,这么多年来历经了这个行业的不断发展和变迁,而性能测试一直以来都是企业应用质量保障至关重要的环节,尤其是当前的互联网环境下,更是不可或缺。性能测试技术覆盖面广,对技术也有着非常高的要求,所以优秀的性能测试人员非常稀缺。同样的,优秀的性能测试书籍也是不可多得。鲁德的MIKE给我推荐了这本书,通读下来,个人认为这是一本实用性很强的技术指导书,一方面,其对性能测试知识体系有完整的理论阐述,使得读者能够快速地掌握基本原理,另一方面,每个部分都会通过对一个个实战案例进行生动和深入浅出地讲解和剖析,把读者从枯燥的技术文字理解中解放出来,全面领略到性能测试的魅力。同时,本书内容丰富详实,每个部分讲解由浅至深,适用于各个层次的读者,本书完全有理由成为每个性能测试从业人员必备的案 头书。

——Testin云测上海地区总经理 王斌

今拜读性能测试大师陈志勇的书,本书是集作者十数载功夫之大成,助测试界有志者共奔大道之作!

——京东方测试总监 袁海松

从工具书的角度来阅读这本书,基本上已经覆盖了性能测试常用知识点的90%以上的内容,你可以查阅到从基础知识到系统理论各个环节的知识点。由点及面,再自行扩展,对于想系统学习性能测试的工程师来说是再好不过的辅助工具了。对想要进入性能测试领域的人来说,本书可以让你从原理到方法,系统地学习性能测试的相关知识点,为以后做性能测试打下良好基础。

认真阅读此书,不管你是测试初学者,还是资深高手,都会有属于你的一份收获,Road出品,必属精品。

——微医集团性能架构团队Leader 陈坤龙(鲁德毕业生)

工作10年,经历过运维、测试、项目管理职业,也看过不少技术和理论书籍以及网页博文,唯鲁德出版的书籍能帮助测试人员集大成,省去了收集整理测试技术的时间和精力,结合实际项目实操展开讲述,摆脱枯燥乏味的纯理论描述,更容易接受和吸收。无论是测试行业什么级别的人员,此书都有相当大的帮助。初学者可以通过项目的分析,快速理解测试理论,特别是性能测试,从全局到技术细节都能照顾到。建议读者在阅读此书的同时,借助一些便利的环境,多动手,勤思考,这本书绝对是性能测试实操教材的优选。

——银联国际事业部项目经理 周明明(鲁德毕业生)

本书针对每个困难的问题或给出了一个很好的答案,或指明了解决思路,内容涉及性能测试方方面面的知识,作者专业独到的经验随处可见,是性能测试领域不可多得的一本好书。

——唯品会 资深测试专家 林伟业(鲁德毕业生)

无论您是一位初级性能测试工程师,或是一位资深性能测试专家,本书都是您桌案上必不可少的工具书。该书详实地介绍了性能测试的全过程,从性能建模到测试脚本开发,从资源监控到采样数据分析,从性能项目立项到报告总结。一位初级性能工程师能凭借这本书对系统进行分析、定位瓶颈,乃至提出优化方案。在赞叹作者精心写作的同时,更对作者的知识深度及广度表示由衷敬佩。即便是同一个数据指标,作者都能运用各种工具、多种命令进行数据采集,互为佐证、定位瓶颈;同时将采集命令与监控工具、采集命令由点到面进行串联,使知识点不再是孤岛。

——网易邮箱高级测试工程师 曹莹(鲁德毕业生)

在高并发时代,大型系统面临着越来越严重的性能压力,本书深入地讲解了性能测试的方法及原理,结合实际从多个角度阐述系统的性能。对于从业性能测试的读者,从书中得到系统化的总结,以及获得更多的启发;对于新入行的读者,通过书中作者大量实践经验的讲解,开阔眼界,快速胜任性能测试工作。本书从调优的角度去剖析性能测试,通过讲解对各种性能问题的定位方式阐述性能测试过程中各个环节,有很高的实战价值,对于任职性能测试的读者来说是手头不可缺少的性能测试书籍。

——返利网 性能测试专家 王跃勇(鲁德毕业生)

此书全面而系统地阐述了性能测试理念与实践操作,内容从多维度、多层次介绍了性能测试工作流程与要点。很适合性能测试工程师阅读,是一位难得的职业“伴侣”。

——上海速邦 测试经理 蒋若旻(鲁德毕业生)

本书从“原理”+“思路分析”+“实例”+“过程分析”+“总结”几个方面逐一讲解,不管是新人还是老手,都能从中找到性能测试的思路。重要的是本书的意境是不光授人以鱼,还授人以渔,大量的实例和思路讲解,并通过总结把关键性知识剖析出来,达到让读者技能提升的目的,能够让读者举一反三地解决工作中的实际问题,这个很关键,强烈推荐本书。

——杭州承道测试开发工程师兼测试技术架构师 余刚(鲁德毕业生)

本书应该是工作在性能测试一线的鲁德各位老师的心血之作,非常全面、系统地介绍了性能测试。这本书不同于以往的性能测试书籍,不仅有工具的介绍,更重要是性能测试思想的体现,这才是这本书的精髓所在。教会读者怎样去做性能测试,怎样进行性能调优,而不仅是讲解工具如何使用,工具是手段,重要的是思想。对于有一定性能测试经验的读者来说,这本书能帮大家梳理思路,答疑解惑,一些章节阅读起来如沐春风,值得反复咀嚼,并应用在工作中。对于想学习性能测试的读者来说,从一开始就了解了测试方向,少走弯路。谢谢鲁德的老师给我们带来“干货”,也向广大的测试同仁推荐此书!

——平安 测试开发工程师 陈曼(鲁德毕业生)

这不仅仅是一本作者十几年工作经验总结的书籍,更是一本性能测试实操细节的完整记录。书里面详细介绍了性能测试的每个环节,从监控、分析到定位,无一不是性能测试的难点,如果想通过一本书快速地掌握一套完整的性能测试方法,那么本书一定是一本很好的教材;如果想通过一本书梳理多年的性能测试工作,理顺那些繁杂的思路,那么这本书就是一盏指路明灯。还犹豫什么,来看看书中的细节,别忘记一边看一边用思维导图去梳理,这样会让你事半功倍!

——北京互信 技术副总监 蔡玉玲(鲁德毕业生)

本书对于想要进入性能测试领域的新人来说,是一本不错的指导书,有很强的实践性,书中的很多内容可以直接应用在实际工作中,书中的小技巧可以让新人在使用过程中少踩雷区。“性能分析调优”这一章对于从事工作(性能测试)时间不长的测试人员来说,能够快速上手性能分析和调优。

—— 杭州医本健康 测试负责人 马仁根(鲁德毕业生)

在我的理解看来,性能测试是一门比较复杂的学问,它需要建立庞大的知识体系,如性能分析知识理论、网络协议、前端页面分析、Database、Linux、计算机语言、测试框架和性能测试工具的使用等。市面上的一些介绍性能测试的书籍,大多数内容倾向于对性能测试工具的介绍和如何使用这些工具的技巧。授人以鱼不如授人以渔,相比会使用这些工具来说,我们更需要的是领悟性能测试的思想和方法。虽然只是试读章节,但是依然能看出作者对此书的用心,细小的知识点都囊括其中,从点入手,由点及面,把整个知识体系融会贯通。不仅适合新手快速吸收,一些资深的性能测试人员也会有恍然大悟的感觉。所以,我只能说:买买买!

——O2O车贷金融 性能测试和自动化测试 朱云峰(鲁德毕业生)

这本书深刻剖析了性能测试的基本概念、测试方法、性能分析的思路以及调优的原理,并且通过使用大量的案例来论证抽象的理论,各个阶段的性能测试人员均能从此书中学习到适合自己的知识,并且为进一步地提高提供了切实可行的方向。

——江苏云柜测试经理 柳宁一(鲁德毕业生)

本书作者结合多年自身实际的项目经验,针对JMeter性能测试工具由浅入深的讲解,并通过实际操作的案例讲解了性能测试从方案到脚本、从脚本到场景、从场景到结果、从结果到分析定位的开展过程,为奋战在性能测试之路上的工程师们“疏通了脉络”,助其更好地理解、消化、掌握性能测试。整本书内容丰富,脉络清晰,行文风趣幽默,是一本不可多得的专业的性能测试书。

——浙江钱运宜网 测试主管 周燕(鲁德毕业生)

一听说作者要出书,我想读的积极性就很高,因为大家都知道作者是一个实战经验丰富,编写代码能力强的性能测试前辈。有幸能读到试读章节,此书由浅入深,分析切中要点,结合大量实例讲解。不仅可作为性能测试初级人员的入门书,也可让资深人员查漏补缺,很值得阅读的一本好书。

——伦杰测试工程师 吴丽娜(鲁德毕业生)

经过鲁德培训和读本书后感想:

(1)自己是个不善总结的人,以前学习时学到的东西有些碎片化。这本书有很强的框架性,把所有的知识点融汇到一起,不仅教会我很多知识,还帮助我知道将来自己学习新技能应该是怎样的思路。

(2)作者是本行业的专家,这本书很有深度。以前我对数据库和系统架构方面都是浅尝辄止,而这本书让我向前迈了一大步。

(3)这本书集合大量的实践案例,帮助我们联系到日常的工作,提供了很多类似的解决方案,而不仅仅是理论上的。

——美国UMB Bank 自动化工程师 Mingpu Yu(鲁德美国毕业生)

目前,软件测试已在IT行业获得更多的认可和接受,越来越多的人进入到这个行业。但今天的软件测试已今非昔比,主要体现在这个行业对从业人员的要求越来越高,特别是性能测试领域,性能测试方案制定、测试脚本开发与增强、场景执行与监控、结果的分析定位与瓶颈的优化越来越受企业重视。拥有性能瓶颈定位与调优经验的工程师将成为企业的“新宠”。本书是讲解性能测试的一部好书,体现了性能测试的精髓,体现了性能测试的流程,更重点突出了性能测试的监控与瓶颈分析定位,从硬件、操作系统、数据库、中间件等各方面结合实际案例进行了讲解。无论你是刚进入性能测试行业还是已在这个领域小有所成,都值得拥有。

湖南软测信息技术有限公司 新梦想软件测试培训中心 CEO 彭立(鲁德毕业生)


当下互联网蓬渤发展,基于互联网的创新模式不断涌现,数据成为企业核心竞争力,在核心竞争力的背后是技术的支撑。作为技术人员,在享受技术带来的红利的同时也经受着技术变更带来的负担;无数的问题不知道什么时候会冒出来,防不胜防,积极一点来说,正是因为技术的新老更替让我们未来充满机遇。作为技术人,学习技术是本分,然而现实是严肃的,我们在工作中会遇到许多问题,如由于网站要处理大量的用户、大量的业务量等一些棘手的性能问题,若处理不好,就会出现如前不久的某二手车网站、某旅游网瘫痪事件,还有很多大家听到的网站服务器瘫痪的消息,这些都是咱们技术人员的痛。

经验告诉我们预防大于维护,系统上线前的性能测试就显得比较重要了。性能测试不仅能够帮我们检查程序性能,还可以进行定位、分析问题。帮助找出系统性能变化的趋势,给解决问题提供数据支撑。最重要的是系统不会在关键时刻“掉链子”,损失利润、失去用户。

性能测试是一个持续改进过程,也是一份充满挑战的工作;在工作中我们会涉及硬件平台、操作系统、数据库、缓存、中间件、应用架构、系统程序等方面的知识。广度与深度并重,这也对从事这项事业的工程师提出了更高的要求。高要求铸就了性能测试工程师的高价值,一时也是“洛阳纸贵,水涨船高”。广大测试工程师都试图转向这一行业,由于技术水平的局限也导致了性能测试工程师的整体水平不高的现象。市面上也好、业内也好,相对开发来说测试的知识传播与分享还是较少。

工欲善其事,必先利其器,性能测试的开展少不了工具的支持。互联网的发展正在颠覆传统的IT流程与技术,开源成为当下的主流,BAT(业界对百度、阿里巴巴和腾讯的简称)已经成长为IT领域的巨无霸,他们正在引领互联网的发展,从技术到平台都在开源化,性能测试工具当然也会顺应这个潮流,开源社区也涌现出了JMeter、Grinder等优秀的负载工具。这些工具的运用节省了不少的时间与精力,使我们可以专注于问题的分析、定位与调整。鉴于上面的种种原因,而个人又是一个喜欢分享的人,刚好又有出版社的朋友相邀,所以促成了此书,通过此书来讲讲我的性能测试技术,讲讲开源负载工具JMeter实战,讲讲性能测试诊断分析与调优,交流一些心得与体会,与大家共勉。

人虽无才,心诚意至!技术人也有情怀,谢谢大家支持!

在此感谢我的家人,感谢Road团队,感谢众多支持我的粉丝!

谢谢你们!谢谢关注我的人!

陈志勇(天胜)

PMP、信息系统项目管理师

ROAD_TESTING 特邀讲师

从事开发、项目管理、性能测试11年

服务过诺亚舟、上汽通用、平安集团等企业


性能测试是测试行业颇具技术含量的工作,也是广大测试工程师不错的发展方向。性能测试工程师的薪水也是一路看涨,一片欣欣向荣的景象,那么到底什么是性能测试呢?

早些年,把录制脚本、制造负载当成是性能测试。近几年,我们把定位、分析问题当成是性能测试的核心技术。现在,我们希望性能测试不仅能够定位、分析问题,还要把握系统性能变化趋势;性能测试工程师能够帮助解决性能问题,搞定测试过程中的各种不合理配置,给出专业的优化建议。

然而现状并不是这样的,由于行业历史原因,从事测试业务的工程师都专注于业务,而忽视了技术。由于性能测试工程师的短缺,不少功能测试人员担当了性能测试工作,因为技术功底问题,直接导致了当前性能测试技术水平不高,从业人员参差不齐的现象。很多性能测试工程师停留在测试脚本的开发上,甚至连测试脚本的开发都成为了一个棘手问题。互联网的飞速发展促进了生产力的进步,同时我们也看到了诸多的性能问题不断暴露,也就是我们并没有在性能方面做得足够好!为什么呢?一方面是重视程度不够,另一方面是技术原因,对性能测试理解不够深入。如某大型电子商城、某旅游在线平台等,大小几十个、几百个子系统,技术复杂度可想而知,性能对于他们来说就是命脉,对于这样庞大系统群当然会做性能测试,那又为什么上线后又“趴下”呢?这有可能是没有进行充分的性能评估,没有做预案,没有进行风险控制。

不安于技术现状是IT人固有的品质,现在是改变这种现状的时候了,众人拾柴火焰高,大家努力起来,把自己培养成一名合格的性能测试工程师,一名性能测试专家,为公司、为个人创造更高的价值。

一、性能测试理论,通过这部分内容,你将对性能测试有深刻认识。

二、学会热门的开源负载工具JMeter,能够利用JMeter进行各种常见协议的性能测试工作,当然你也可以用JMeter进行自动化测试及性能测试自动化。

三、学会全方位(Linux、Windows平台)性能监控,学会性能诊断分析,练就“火眼金睛”,见微知著的性能分析技能及性能问题快速定位。

四、性能调优,学会如何进行调优,了解当前的性能调优手段,学习分布式系统的性能调优手段。

五、实例讲解性能测试整个过程,包括需求分析、测试计划、脚本开发、测试数据制作、测试执行、测试结果诊断分析、性能调优等内容。

六、性能测试自动化,帮助提高生产率。

本书由浅入深讲解性能测试各方面的知识,不同读者可以关注各自关注的内容。

本书读者包括但不限于以下群体:

测试工程师

测试负责人

开发工程师

运维工程师

架构师

性能测试爱好者

本书内容分4部分。

第一部分:基础篇

第1章 性能测试方向职业发展,讲述当前性能测试状况及发展前景。

第2章 性能测试初体验,讲述了性能测试的基础理论,适合初学者了解性能测试。

第二部分:工具篇

讲解开源负载工具JMeter的体系结构、脚本开发、负载模拟、测试监听等内容。让读者可以从零开始学会使用一个主流的负载工具,JMeter不仅可以用来做性能测试也可以用来做自动化测试。此部分应该是市面上到目前为止比较全面的JMeter工具讲解内容。掌握其中部分内容即可以进行性能测试脚本开发、性能测试执行等工作。适合初学者快速上手。

第3章 JMeter结构体系,剖析JMeter结构,讲解 JMeter工具组成及功能。

第4章 JMeter脚本开发,用实例演示如何开发HTTP协议测试脚本。

第5章 JMeter负载与监听,实例讲解如何利用JMeter发生负载,如何进行测试监听。

第6章 JMeter元件详解,讲解JMeter的各种常用与不常用的元件,这部分可以看作是JMeter工具书来进行查阅,并配有实例。

第7章 JMeter常用脚本开发,实例演示讲解各种协议脚本的开发,测试脚本开发不再是问题。

第8章 JMeter开源测试组件,实例讲解第三方JMeter开源组件的运用,让JMeter的功能更加丰富。

第三部分:实践篇

详细讲解了性能监控与诊断分析,并通过实践项目引导读者学习性能测试技术。

第9章 性能监控与诊断,讲解包括Linux平台与Windows平台的监控诊断、中间件及JVM的监控诊断、MySQL的监控诊断,这些是性能诊断的基础。

第10章 性能分析调优,讲解如何分析问题、优化性能问题。讲解的不仅仅是结果,还有方法与思路。

第11章 综合实践之诊断分析与调优,运用实例对整个性能测试过程进行讲解,包括测试计划、测试脚本开发、测试数据制作、测试执行、结果分析、性能调优等内容。

第四部分:提升篇

当前,“Web”“敏捷”“性能”是常见的互联网关键字,从事这方面的性能测试工作需要储备一些技术知识,此部分旨在扩展知识面,提高生产率。

第12章 HTTP协议,讲解HTTP协议的若干知识,当前HTTP协议是主流,做好性能测试之前,学好这方面的知识不可少,深入掌握这方面知识后,进行Web测试脚本开发就很容易了。

第13章 端到端性能监控,讲解前端性能测试,适合当前互联网系统的性能测试与诊断分析。

第14章 性能测试自动化,讲解如何进行性能测试自动化集成,用Jenkins+Ant+JMeter实例演示,其中也有作者自己的扩展开发。

第15章 常见问题,就大家使用JMeter和性能实施过程中经常遇到的问题进行解答,另外也提到了JMeter组件开发。

原计划内容有5000多页,内容包括测试、运维、开发、数据库等知识(全栈测试内容),工程庞大,内容繁杂,惟恐读者难耐。此书从这5000页中的ROAD_TESTING性能教材精选而来。由于本人水平有限,书中内容定有不足之处,恳请各位读者批评指正。

笔者联系方式。

博客地址:http://blog.csdn.net/selingchen

本书脚本下载网站:http://pbook.testroad.org

答疑交流QQ群:257887726。

文件下载:github:https://github.com/selingchen

同时,IT是一个随着新技术变化而变化的领域,性能测试的技术也会随之更新变化,所以本书会逐步更新变化。我们会把最新的技术内容更新在官方微信公众号。

ROAD_TESITNG微信公众号

注意:书中所用脚本或工具操作视频请到ROAD_TESTING官方网站性能测试书籍脚本专栏http://pbook.testroad.org/或者性能技术交流QQ群(257887726)下载。

陈志勇 网络ID 天胜

国际认证项目经理,先后供职于国内著名公司诺亚舟、通用汽车、平安银行等企业。长期从事程序开发、系统设计、性能测试、测试管理及项目管理工作。性能测试资深专家,授课特点理论接合实际,专业性强,知识面广。

 

项目经历:

夏晖冷链物流(麦当劳全球合作伙伴,全球500强,北京奥运会唯一冷链供应商)

宝安集团信息一体化(HRM、CRM、OA、售楼系统)

京基集团信息一体化(HRM、CRM、OA)

通用精益物流(Melos)

通用WMS

通用汽车销售系统

通用移动平台

平安银行众多核心系统

马利伟 网络ID MIKE

Oracle认证专家,先后供职于阿里巴巴和分众传媒等公司,长期担任测试主管、项目经理、BI架构师兼部门经理。性能测试资深专家,授课特点激发学生热情,逻辑清晰,课堂气氛活跃。ROAD_Testing性能测试专业网站性能测试教材主编。

 

项目经历

享乐SNS网站

分众触媒户外广告系统

淘宝订单贷款

蚂蚁金服贷款合营贷款平台

蚂蚁金服网关系统

宝洁中国移动营销平台O2 BI 系统

宝洁中国报表系统

宝洁中国移动访销系统

可口可乐中国实业有限公司CCCIL移动访销系统

汇源果汁移动访销系统

南孚电池移动销售系统

宝洁HFSI IZOOM Interface

mysteel我的钢铁网 手机平台

庄臣SAP系统亚太实施

 

万龙 网络ID LONG

先后任职于江西移动、西门子、诺基亚西门子以及某大型互联网公司,现任淘宝架构师。从业以来,一直从事基于Linux平台的性能或自动化测试开发工作。擅长知识:Linux系统日常操作、优化和维护、企业级持续集成、系统性中间件级别配置、监控、调优分析。

项目经历

中国移动支撑运营平台

中国移动集团信息一体化

诺基亚研发中心产品持续集成平台

诺基亚研发中心产品性能监控平台

诺基亚研发中心产品自动化测试平台

淘宝产品持续集成平台

淘宝大数据分析平台

历时一年多,原稿内容从0到5000多页的积累,又精减到500多页,几经易稿终于完工,如释重负。这么多的内容对我们来说的确是一个不小的挑战,查阅了大量的资源,研读了多遍JMeter源码,做了大量的实验,写作过程中也得到了朋友的大力支持。

下面介绍一下编写团队:

陈志勇(天胜)负责撰写第3、4、5、6、7、8、10、11、14、15及附录章节;

马利伟(Mike)负责撰写第1、2、15章和审阅工作;

万龙(LONG)负责撰写第9章节;

陈霁(云层)负责撰写第13章节;

陈坤龙(CKL)负责撰写第12章节;

周燕、苗杰、李诚诚参与了校对工作。

感谢广大读者对我们的支持,感谢鲁德学员对我们的支持,感谢ROAD_TESTING团队(上海鲁德企业管理咨询有限公司www.testroad.org)的支持,让你们久等了,谢谢你们!

感谢人民邮电出版社的支持!

感谢我们服务过的每一家企业!

感谢我们的家人,辛苦有你们,荣誉也有你们的!

本书编辑联系邮箱为:zhangtao@ptpress.com.cn。

作者



从本章你可以学到:

市场上有各式各样的IT培训,其中门槛低易上手的就是软件测试。就业的学员通常都以功能手工测试为切入点,掌握一些基本测试理论,学会设计测试用例,能够操作缺陷管理工具,熟悉一些业务就可以开始测试工作了。大家觉得这样有技术含量吗?没有技术含量就容易被替代,你的职业就会有危机,有想过如何改变这种困境吗?下面先说说为什么要选择测试行业。 

首要原因是薪水还不错,IT互联网快速发展增长了很多的测试工作岗位,相对其他实体经济行业薪水要高不少,拿一线城市的制造业来说,2年工作经验技术从业人员在相同的体力和脑力的工作强度下,制造业的薪水一般在3000~8000元,而软件测试在6000~18000元,2倍不止。工资回报不错,进入门槛又低,所以越来越多的人涌入这个行业。

其次大量的IT从业人员并不善长做研发或者说没有人聘用你做研发,或者并不想赚研发的辛苦钱,退而求其次选择更轻松点的测试工作。

另外还有一部分来自于开发团队,大齡女员工由开发转测试的不在少数,随着年龄的增加,结婚生子后没有过多的精力集中在研发工作上,转向工作强度轻一点,待遇还不错的测试行业。

当然也有一部分就是工作岗位需要而从事测试工作的,久而久之就停留在这个行业。

就目前国内情况来看,大多数的测试人员并没有开发和运维的技术功底,选择测试这个行业仅仅是因为高薪和入门门槛低。近年来互联网和P2P的神话,快速抬高了测试平均工资,却没能快速提高这个行业的技术水平。在北上广深这些一线城市,从事测试特别是手工测试的从业者长期处在测试职业发展的初期阶段,容易被替代,薪资水平固定。职业生涯基本到尽头。

时常我们也能听到许多测试同学的抱怨:

(1)地位低,不受重视;

(2)待遇差,成就感低;

(3)压力大,加班,提升难;

(4)不稳定。

地位高低在任何行业都是由所掌握的技能或资源的核心价值决定,易替代、无技术含量的职位自然地位低。对于不受重视,大家不妨换位思考下,如果你是餐厅老板,你会重视大厨还是餐厅服务员更多一些呢?

相对于开发来说,测试职位的薪资水平较低,这是由工作产出决定的,工作价值高,自然收获多。但相对于传统产业来说,这个薪水已经不低。由于测试是开发后的附加工作,并没有方便量化可见的产出,自然关注者少;自己也不能左右一个项目或者产品的方向、技术、工期,在项目中并没有里程碑式的贡献,自然成绩很难突出,成就感自然不强。除非你掌握复杂的业务知识,如SAP,如财务知识,能够为项目进程提供有力支持;或者你找到了一些重大的直接影响项目上线进度的缺陷,将会避免一些损失。

工作压力大,经常加班多通常有下面几个原因:

(1)需求难以驾驭

信息社会,唯快不破,产品经理或需求人员需要高超技能与悟性来快速把握用户与客户的需求,但往往并不是这样,所以需求的朝定夕改常有发生,不仅测试工作浪费,开发工作同样浪费。时间压缩,测试无法全覆盖,迫切需要加班赶工,长时间的加班工作效率低,身体也会撑不住,还会担心问题逃逸,自然压力大。

(2)岗位处在工作流末端

软件项目研发的流程:需求调研分析-概要设计-详细设计-编码-测试-软件交付准备-验收。测试流程处在末端,工期会因为需求频繁变动而延误,也会因为开发技术问题或者态度问题而导致缺陷过多,修改过程或多或少占用了测试时间,所以测试时一般很少有充足的时间,在不增加测试资源的情况下加班赶工在所难免,学习自然成为一种奢望,还谈什么提升呢?

前面我们谈到了测试职业的一些困境,其实大可不必悲观,因为测试的可塑性很强,还有很多其他方向可以发展,同样能够创造更高的价值,下面我们谈谈软件测试职业的发展路线。

我们暂且把软件测试职业路线分为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——首席执行官

随着国内软件质量体系的健全,企业逐渐意识到软件测试质量不单单是满足功能流程顺畅就行,测试效率和用人成本的降低也是趋势,更要为软件的稳定和易用性等质量保障来提高产品黏性留住用户。可以这么说,一个成熟的大型产品必须有过关的性能测试把关,这不是一个简单的事情,从需求、架构、硬件、数据库、代码等层面都需要精心设计和测试。

那么如何提高职业技能和核心价值从而赚取更多的劳动报酬?后续测试的职业发展会碰到哪些问题,测试的捷径在哪里?

全栈一般是技术方面的领导者,需要涉猎广?懂得如何解决问题以及对应所需的技术和工具。但具体的细节掌握比不上某个学科精专的。但是他们有强大的学习能力,会较多依赖搜索或即时学习,会根据需求,依托自己扎实的基础功底,把某一项或者二项技能达到接近于专科人员的能力。全栈是学习能力强,总结能力强、不断总结和融会贯通提高实战能力,善于分析因果并找到原因和解决方案的复合人才。

我个人认为全栈测试比纯测试更有未来,因为测试很多时候就是个“万油精”。虽然全栈要掌握的知识点很多,精力不够是其弊端。想要某一项做到专业级,花费的精力更多了。但是顶尖的优秀人员永远是少数,市场的高薪也是为那些20%的人员所留。更为重要的是目前是一个复合人才,跨界人才当家的年代。越来越多从软件测试走到测试总监、技术总监、CTO等高级技术管理类复合人才的比例越来越多。

我们看看除了测试还需要掌握哪些基本功。

1.需求

我们的行业存在的根本在于实现用户的业务需求,客户或者产品的需求变化引起的系统需求的频繁变更,在项目周期本就不宽裕的情况下,间接导致测试人员工作量的增加从而导致测试人员加班现象越来越严重。

在实际的性能需求分析过程中,系统分析师必须清醒地认识到客户很难区分业务需求和用户需求的差别,搞清楚客户背后的真正的业务需求。可以说,软件工程中的“需求分析”就是确定要计算机“做什么”,要达到什么样的效果。可以说性能需求分析是做系统性能测试前必做的,不然就没有方向。

2.代码

在测试过程中懂程序的人更能够深入地把程序测试好,通过走读代码发现逻辑上的缺陷、写法上的繁琐带来的性能问题等,达到事半功倍。系统难免会与数据库打交道,数据库知识也不可少;程序部署在中间件上,中间件知识也是必备的;中间件运行在操作系统上,操作系统及硬件知识也不可少。

3.运维

测试自动化是一个趋势,不仅包括功能测试自动化,也包括性能测试自动化及测试环境自动化(持续集成),掌握运维手段也变成必要。另外,对于系统涉及的中间件、数据库、缓存等产品也要熟练运维。

所以要想在测试行业中脱颖而出的关键还是技术,流行的一句话:测试人员懂开发最好,开发人员懂测试最好,自然更受欢迎,价值更高;也就是技术不错,能够跨界。而测试的各种岗位尤以性能测试涉及的知识面最广,涉及程序开发、数据库、中间件、操作系统、硬件知识等内容,基本是照着全栈测试的模板在培养,突破手工测试选择性能测试是一个好的方向,有了这个技术积累就不仅仅是做性能测试,亦开发,亦测试开发(自动化),亦架构,亦性能测试。

下面我们看一下性能测试及性能架构师/专家的招聘要求就可以知道职位对技术的要求范围与层次。

1.金融行业

案例一 上海 某金融平台性能安全工程师

任职资格:

案例二 深圳某银行支付业务初级性能

任职要求:

精通Java/Python/Scala等其中一门开发/脚本语言,能够参与开源工具的二次开发或独立研发部分测试工具。

案例三 某银行性能测试专家(深圳)技能要求
案例四 证券公司性能测试技能资格要求

2.其他行业

案例五 通信公司性能测试技能要求
案例六 旅游行业某知名旅游公司测试技能资格要求
案例七 某著名游戏公司技能资格要求
案例八 某影视平台测试技能资格要求

从上面的招聘条件可以看到,作为一个高级的性能测试工程师,我们需要掌握的基本技能很多,需要掌握如下知识:

下面细化一下性能测试所要掌握的知识,如图1-1所示。

图1-1 技能树

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

常见难点

 

(1)用户和业务模型分析搭建;

(2)合适的脚本开发(大部分初学者不根据用户和业务模型来开发脚本,认为要回归成功即可);

(3)合适的需求分析转化为场景设计(大部分初学者不知道如何根据需求进行场景设计);

(4)大容量系统的数据生成和使用;

(5)大型系统的性能压力负载和实施;

(6)云计算的负载生成和实施。

性能测试是一门富有挑战的、有深度的、综合性的学科。

很多性能测试初学者总觉得性能测试就是写个脚本,弄几台机器压一压,出个报告就行了。通常关注“并发多少”“响应时间多少”“能跑通吗”这些问题。认为并发越大,响应时间越快,那性能一定就越好。

性能测试不仅仅是录制脚本或者编写程序,基本的性能理论、性能执行的原则还是要了解的。同样的脚本,不同的人员执行,不同的针对点,测试结果会大相径庭。

实际上我们需要对系统进行一系列复杂的需求分析,以及一系列性能测试计划和设计的工作才能开始性能测试执行。经过N次回归,找到瓶颈的具体原因,并优化。掌握性能理论基础才能驾驭那些性能测试工具等,没有掌握性能理论基础直接操作好比开车找不到目标,盲目原地打转或离目标越来越远。

自动化测试的目的是为了提高工作效率,目前,功能测试与性能测试都朝着这个方向发展,这些都是持续集成的一分子。

鉴于目前行业内普遍项目时间紧,性能测试架构师在公司担任性能测试、自动化测试等多种角色,那么减少加班和追求高效益和高成就是我们全栈性能测试工作者的追求了。

有时候测试工具并不能够解决测试脚本问题,比如现在流行的SOA架构封装的RPC协议,就需要写代码来解决脚本问题。业内比较有名的比如Dubbo、Dubbox,笔者也碰到过这一类的测试,鉴于工作的重复性,为了节省时间提高效率,ROADTESTING 团队在为某企业团队性能测试内训时对JMeter进行二次开发测试元件(如图1-2所示),专门用来测试Dubbo、Dubbox协议的接口,这样我们功能测试人员都可以直接选择测试的项目与接口就可以、直接无脚本编程来做性能测试执行,大大提高了脚本开发效率。

图1-2 Dubbo 测试组件

常见难点

 

(1)评估需求;

(2)负载建模(用户与业务模型);

(3)性能压力生成的原理和并发等之间的关系;

(4)性能测试用例;

(5)新系统需求分析;

(6)容量规划;

(7)性能测试策略。

作为IT部门的一员不可避免地要和开发代码打交道,了解编程知识既能提高测试内涵,还能提高交流沟通的效果。更重要的是,做自动化测试、单元测试、性能测试、安全测试都离不开代码。所以我们还是要掌握一些普及率高的编程语言和脚本语言。这里我们推荐Java、Python等。

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,目前也是国内公司使用的相对普及的语言。

Python具有丰富和强大的库。它常被称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。Python是目前国内测试行业比较热门的一门语言,很容易上手,也可以搜索公共库的代码来缩减自己写代码的工作量和时间。

不管我们的程序如何高大上,不管我们用什么语言实现,最终还是要依赖服务器硬件,依赖数字信号,依赖模拟电路。服务器硬件是性能之本,所有性能都会反映到硬件指标上来,我们想要分析性能,服务器知识少不得。服务器几大件,如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、SQLServer、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)数据库配置优化?

面对一个性能不佳且复杂的系统,我们做的是建立性能数据分析模型、收集相关资源和指标信息、分析这些数据背后可能的原因。很多人说性能测试最难的就是定位性能瓶颈,笔者赞同这种看法。这需要扎实的全栈IT技术基础和业务敏感度以及解决经验。

另外性能优化是一个系统工程,内容涉及系统各方面,从上到下有软件产品(项目)、中间件、虚拟机、操作系统、硬件。软件产品有系统架构、业务设计、代码实现、数据库物理设计及数据库各种配置等。所以想要做好性能调优,不仅仅是一个人的事,而是整个项目团队的事。

对于测试来说,不管是脚本实现,还是测试过程中的网络监测,都需要针对通信协议;常见的HTTP/HTTPS、Socket/WebSocket、WebService(Soap)等协议运用广泛,自然要熟悉。

具体请看后面性能优化章节。

常见难点

 

(1)系统硬件资源(CPU、网络、内存、IO)相互之间的关系及原理;

(2)选择可靠性能指标及指标之间的关联和判定方法;

(3)永不宕机的实现原理和常见错误;

(4)排队系统与延迟及缓存的优化关系;

(5)优化的成本和性价比;

(6)业务优化的操作实施;

(7)多系统串联原理及测试隔离。

当下流行的持续集成工具有Jenkins、Git/SVN、Maven、Ant等

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

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

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

科技是第一生产力,选择技术方向的从业者来说技术是第一生产力,不妨朝着全栈测试行进,可以先从性能测试入手,目前对性能测试工程师的要求就是全栈的要求,可以看到性能测试的招聘条件中往往都包含了测试开发,自动化开发要求,这充分说明了这个岗位对于测试的重要性。这样的技术要求决定了你在整个测试团队中必须是高能力者,至于工作回报自然丰厚。

同时IT是一个随着市场技术需求变化而变化的科目,性能测试的技术也是随之更新变化所以本书会逐步更新变化。我们会把最新的内容更新在官方微信公众号。

ROADTESITNG公众微信号

注意:本书中所用脚本或工具操作视频请到ROADTESTING官方网站性能测试书籍脚本专栏http://pbook.testroad.org/或者性能技术交流QQ群(257887726)下载。


相关图书

现代软件测试技术之美
现代软件测试技术之美
渗透测试技术
渗透测试技术
JUnit实战(第3版)
JUnit实战(第3版)
深入理解软件性能——一种动态视角
深入理解软件性能——一种动态视角
云原生测试实战
云原生测试实战
Android自动化测试实战:Python+Appium +unittest
Android自动化测试实战:Python+Appium +unittest

相关文章

相关课程