最近有机会做一些面试工作,主要负责面试软件测试人员招聘的技术面试。
之前一直是应聘者的角色,经历了不少次的面试之后,多少也积累一点面试的经验,现在发生了角色转变。初次的面试就碰到个工作年限比我长的,也没有时间仔细了解对方的简历,再加上应聘者比较“强势”。面试情况是比较糟糕的。
有同学会说,唉!不就失去了一个应聘者嘛。多面几个就好了!这不单单是失去应聘者,面试者对面试官的印象更重要。面试官的能力与表现对于初次面试者来说往往代表的是公司的,更具体点是测试团队的能力。
如果面试官都很“水”,这个水两方面,一是面试不够从容,思路不清晰。二是技术能力水,问半天问不到关键点上。那么身为面试者,对这家公司的印象会打折很多,就算能开得起面试者的期望薪资,面试者还要考虑在你这儿能不能学到什么,工作是否有挑战,是否有发展空间。
所以,面试官的能力与表现对面试是否成功同样重要,毕竟就面试过程而言是一个双向选择的过程嘛。
下面讨论测试人员应该具备的技能。
在这个讨论的过程中,充满了我个人的偏见与喜好。不喜误喷!
上面是我所画的一个体系图,这上面的技能相对比较通用,当然特殊情况下对测试人员的技能要求会有特别要求。
软件测试基本知识:
这一块其实没什么好讨论的,如果你有半年到一年的工作经验的话,对这一块一定有比较清晰的认识,当然,在实际的工作中不需要你对每一种测试方法去寻根求源,知道这些方法的含义与应用场景即可。
编写各种测试文档,对于初学者来说稍有难度。但终究还是谈不上什么技术含量的事情,如果对业务和流程足够熟悉,文档用例自然就会写了。
测试辅助技能:
我发现这两项技能在笔试和面试过程中必考,出现几率超高,但在实际的工作中,有些测试根本碰不到linux ,有些测试不需要去操作数据库。当然,测试嘛,也不能太处于表面了,也需要熟悉熟悉相关测试的表,了解了解系统服务器。
好在这两项技能的要求都不高,linux 大多考几个常用命令,SQL一般考一下增、删、查、改。
自动化技术(UI):
大多同学会在简历必备测试技能里加一个QTP自动化测试工具,当我满怀起到和他聊一聊自动化时,得到的多大回答是这了解和学习过这个工具。这也不能怪测试人员,谁让满大街的招聘要求上都写着“要求熟悉LoadRunner 、QTP等自动化测试工具等。” 其实,他们公司根本就不用。这么多公司都要求,看来还是有必要学一学这个工具的。
对于我而言,我并不太关心工具用得多熟练?对于web应用来说,更在意的是对前端技术了解多少?因为你要自动化的对象就是前端技术所呈现出来的各种功能。都不了解它,如何定位和操作它呢?
UI的自动化不单单是QTP一个工具,如果你掌握了一种语言,做自动化的路就宽广了,你一定知道还有个叫selenium(webdriver)的自动化工具,你不一定知道ruby 有个watir框架也可以做自动,也许你不知道python有个splinter框架也可以做自动化。那么你就更不知道python 有个pywinauto框架可以对windows GUI做自动化。你不知道有自动化工具太多太多了。谈到这些就不得不涉及到编程技术了。相比较而言QTP 不需要太多的编程能力。
对于自动化测试,另一个比较关心的是你对自动化的理解,什么情况下适合做自动化?你的自动化测试用例是怎么写的?什么样的用例适合转成自动化?你是如何来实施的?有什么样的策略来开展自动化工作?你需要自动化在项目中达到一个什么样的预期和效果?只是学学工具,拿个例子练习练习。很难对这些问题有真实的理解。
性能测试:
LoadRuner似乎比QTP名气更大,做测试必玩工具。没摸过LR都不好意思说自己是做测试的。性能测试是必须是要借助工具来实现了。不借助工具如何模拟成百上千的并发?
最大的难点,其它是对系统架构的理解,其实,更多时候并不需要达到架构师水平,甚至不用达到开发的水平,但起码,你要弄清用的什么操作系统,什么数据库,什么开发语言与框架,什么中间件吧!你要知道如何对这些做监控的吧!你要知道叫上开发一块玩吧!
对于性能测试,另一个我更关心的测试流程,你做性能测试的目的是什么?新系统验证?还是旧系统扩容?需要达到一个什么样的预期?在独立的环境可以开展么?压力在哪儿,脚本为什么要这样录制?你的测试结果真的有知道意义么?或对系统性能做出了合理的评估,或为系统有调优做出指导,或为系统扩容做出了依据。如果前因后果弄不清何必去做呢?
编程能力:
编程不局限于语言,大多同学也会在简历的必备技能最下方面写上一条,熟悉C语言或其它某种语言。大多止步于大学C语言水平。工作中没有机会用到。所以,就没机会去进一步提升这方面的能力。这似乎也挺合乎情理的,再说你们招的是测试又不是开发。
不过,我个人偏执的很看重这一点,至于上面的自动化、性能会不会都无所谓,如果在编程能力上略懂一二,我会大力推荐。懂编程和不懂编程的人看系统的深度不一样,一点不懂的只能看出来这是按钮,那是输入框。 懂编程的就知道你的登录是个<from> ,输入框是个<input> ,你的登录提交是用的post 还是get呢?逻辑层就是获取到输入的用户名密码是查数据库做比较嘛。在测试过程中不管功能实现也好,bug也好,都会看得更透彻,从而更容易挖掘出相关的bug。
一般懂编程的我都会让其写一个小程序,例如求素数,递归调用,用星号(*)打印一个梯形,如果测试工作写一些脚本之类的来辅助测试更是大大的亮点。不要觉得让你写程序就是“***难”。平时注意积累这又何难呢?
对新的工作有什么期待?
“我希望能接触一些性能测试、自动化测试等,因为之前的工作一直在做功能。”
大多数测试人员认为提升自已的过程是这样的:
现在有一个性能需求,然后领导找到你说,小张啊,你来研究研究性能测试吧!我们现在的需要迫切需要对系统做一次性能测试,然后,你回去开始研究性能测试,花一个月终于搞懂了,开始对系统做性能测试。最终完成了任务。
但实际的情况是这样的:
现在有一个性能需求,然后领导找到你说,小张啊,你会做性能测试么?答,这个以前没做过,得学习一下。领导说:噢,那这样吧!小王你回去了解一下吧。因为小王虽然也没搞过,但他平时做测试的资历更久,对于新技术更爱钻研。在领导看来,小王能在更短的时间搞定这个问题。如果这个需求迫切或要求更专业,领导会直接招一个专业做性能的。
所以,结论很明了,机会是给有准备的人的。假如,你在某一技能上面持续积累,总会有发光的时候。
面试官更多的时候是在找亮点,我只有一个岗位,在面试的十个人当中,有十个人都能把测试流程什么的说得顺溜(虽然我也只招一个懂测试会流程就行了)。有八个人说自己懂QTP、LR等工具,只有两个人真正的有自动化或性能测试经验,只有一个人编程方面还不错。你说面试官会选谁呢?
亮点也是谈资(谈钱的资本),你和前一个面试者差不多,前一个面试者要5K,你要8K,那我更倾向于前者,如果你有别人没有的亮点,那我更倾向于有亮点者,我更愿意招个牛B的,工资又不是我给你开,最终是否谈拢是你和人事或上级的事儿。
面试是个综合的过程,假如你思路清晰,思维敏捷。假如你和我一样有写博客的习惯。或者谈谈你最近看的两本技术书。让我看到你是个工作很有热情的人,你是个热爱技术的人。这都是和别人不一样的亮点。闪闪发光。到哪儿都发光。