摘要:
现代的软件系统是复杂的,每个性能需求都充满了唯一性。这样导致,系统与系统之间用到的测试方法可能是完全不同的。这篇文章,庄军(Jun Zhang)讲述了如何开始你的性能测试生涯,有效的时间管理办法,以及除测试工具之外拥有广博知识的必要性。
人们因为各种原因而做性能测试,有的人随着时间的推移变得非常擅长,而有的人一直保持着平庸。尽管最优秀的测试员他们通常有着不同的背景,但他们也有着相同的优点,那就是他们拥有广博的计算机工程技术知识,有着强烈的求知欲和好奇心,以及学习新东西的狂热追求。如果你才进入这个领域,且希望快速成长,我这里有些建议。
避免从零开始
任何版本发布时,我们都想知道新增的代码是否对性能产生影响。在我们着手实际的测试之前,我们通常需要收集信息来决定测试所要覆盖的范围,要执行的场景,以及负载和性能的验收标准等。
但对于缺乏经验的测试员来说,普遍的问题是他们不知道问哪些问题来获取最有用的信息。最重要的是,如果开发人员之前从来没有参与过性能测试,这并不罕见,他不可能知道该提供哪些信息给你有效的找出性能问题。结合这两个因素,经常导致遗漏应测试的区域或者花过多的时间在不重要的区域上。
这就是为什么,如果可能的话,一个初级性能测试员跟随一个老鸟一段时间非常的关键。在老鸟正确的建议下,他将检测的更快,并且避免一些常见的陷阱。更重要的是,他将建立以正确的心态来对待从一个任务开始走近性能测试的一般化过程。这比学习使用一款工具更重要。
其它好处包括学习使用工具的技巧,弄清楚如何解释测试结果(如,一个事务响应时间降低,是否真的意味着性能提升?),帮助定位瓶颈,且在测试设计上越加熟练。
在这里,我想强调是,我提到一个初级性能测试人员应该跟随一个老鸟,我认为的老鸟是他(她)有做过性能测试需求分析,测试计划,测试设计,脚本编写,脚本执行以及问题解决等相当长一段时间。这个人必须能严格控制整个测试过程,而仅仅录制运行脚本多年也是不能让人更具有经验的。
我怎么尽可能做所有工作
在敏捷开发已经被广泛采纳的今天,并不是所有公司能为每一个Scum(开发模型中最敏捷开发的一种)团队配备一个专业的性能测试人员。至少,我工作过的环境是这样,我总是要服务于多个团队。如果我参加他们的所有会议,那不会有很多时间留给我做测试。我们通常采用的策略是:
- 获得开发人员的支持,在提交代码给QA之前做好捕获性能问题的工作,如单元测试和Code reviews。
- 当需要性能测试员参与的时候,所有团队都应积极协助。
- 当研发团队工作到关键性区域,或者预先知道性能测试需要,我们会将更频繁的参与他们的会议。
- 尽可能的高效产出。
- 尽可能了解被测系统,这样我们才知道哪些地方需要注意。
这些策略在大部分时间都能起作用,但有时我们不得不去争取最后期限,当一个性能问题冒出来后需要我们投入大量时间。同时,值得注意的是在敏捷开发环境下,资源共享绝不是获得成功的处方。它会被尽可能的弱化。
除了以上策略,最好更合理的管理你的时间。试着做计划,尽可能的早的执行,在计划中算入不可意料的投入,对你工作排优先级,把业务关键区域和经常点击的区域(可能的瓶颈点)放在测试最前面。
试着去了解一切,至少一点
功能和性能测试主要的区别是,功能测试主要考虑应用是否能成功的做某事,而性能测试考虑的是在负载下应用能运行的如何。
现代系统典型由许多部分构成,每个部分都可能影响性能。拿一个非常简单的(软件)系统来说,它可能包含一个数据库,一个应用,一个代理服务,伴有网络、操作系统以及防火墙。错误可能出现在任何地方,如低效的代码,硬件,网络带宽,内存管理,数据库表索引,或者并发线程,等等。在之前,你对各部分是如何相互作用的了解的越多,你就越能设计出有效的测试帮助诊断出问题。
我曾同一个对系统知识的了解远超测试范畴的功能测试员共事,她对这块的了解甚至超出多大多数开发人员。当她后来做性能测试时,知识大大弥补了她缺乏的性能测试经验。
经常我们必须抛开系统残余部分以便测试其它部分,因为残余的部分仍在开发或者无法测试。如果你有很强的编程背景,不是等待剩余部分开发完成,而是自己编写,你或许能测试的更快。
关于SQL?性能测试通常需要合适的模拟一些不同数量的数据以便使结果尽可能的真实。准备数据最快和高效的做法是直接向数据库插入记录。如果你能自己编写SQL脚本,而不是等其他人来帮你,这不是很美妙?
我这里想说的是,拥有广博的计算机工程技术知识,能使性能测试的每个阶段变得更容易:Perl和Shelll脚本能方便的进行数据分析,网络知识能帮助诊断性能问题,数据库知识能帮助分析测试结果,等等。你没有必要成为所有涉及技术领域的专家,你只需要在你需要的时候学习它。
如果我必须在有十年性能测试经验,但除了测试工具外在其它方面没什么了解的测试人员,和一个拥有较少的经验但对其它所涉及领域都知道一点的人之间做选择,我可能会选择后者。事实上,据我所知大部分优秀的性能测试员他们都有着除测试领域之外的广博知识背景。
总结
现代系统是复杂的,每个性能需求都充满了唯一性。这样导致,系统与系统之间用到的测试方法可能是完全不同的。这儿没有什么灵丹妙药来快速提高性能测试效率和质量。总之,在我所从事的公司执行了这些建议,并产生了可见的积极影响。我希望你也能做到。
本文出自Jun Zhuang的《How to Become a Better Performance Tester 101》一文,由www.51ste.com翻译。转载时请标明出处:软件测试部落(www.51ste.com)