如何用 Python实现自动化测试近期一直在看王阳明的相关书籍,他的一个观点我非常赞同,不管要学习什么一定要立志,立志是非常非常重要的,但是立志前一定要有动机,或者说要有"打击",那种让你内心感到瓦凉瓦凉的打击!我在软件测试这个行业工作了12年之久,截至5年前,我一直很愉悦地,内心充盈地做着黑盒测试,曾几何时我也觉得最好离"开发"远远的,因为很多人都说:女孩子做测试挺好的~~ 但是,我遇到很一个非常现实而残忍的问题:"裁员",想想自己也挺奇葩的,在一个公司竟然待了12年之久,在这12年里,因为各种原因,我经历了大大小小的裁员有5次之多,一有裁员需求,老板第一个考虑的就是测试人员。
每一次裁员,都是自己团队里的兄弟姐妹,我要亲自告诉他或她,因为公司现在裁员,需要你离开公司,虽然你的工作是合格的,甚至是优秀的~~然后我要鼓起勇气陪着哭泣的他或她去立刻办理离职手续,一刻也不能停留~~你能想象我内心的崩溃吗?每一次我都会问为什么又是我们?每一次老板都会坦率地告诉我,为什么裁员考虑的是我们测试团队:就是因为可取代性太强了!!我真的实实在在意识到了黑盒测试的无力。
公司在寒冬时,需要"蓄积能量",也就是需要减少开支,老板就要开始衡量,哪类研发人员被裁,后续如果公司渡过难关后补起来比较容易,很不幸,每一次评估下来都是测试人员。
有个声音在我脑海里越来越清晰:不能这样,我们团队不能总是做可取代性强的工作!!所以测试的发展方向是什么?我要有什么样的技能才能改观老板对我们的认知??我开始在网上找,当然也在51testing这样专业的网站上找寻,我找寻的结果是:未来的测试应该是以自动化为主,手动测试为辅。
所以测试人员必须要学会编程,因为测试是一个无穷尽的工作,如何体现测试人员的价值,就是在单位时间内能有更多的产出,有让老板瞠目结舌的产出!!怎么学习Python在第二类问题中有详细说明,期间遇到的困难实在太多了,首要的问题就是团队的信心不足,我们离开coding实在太久了,这个困难,我只能说,受到的打击越大,越深,信心就会越足,容许我先哭一会~~ 除了这些形而上的困难,当然也有实实在在的困难,我举一个实际且非常具体的问题:电脑1开发的脚本,可以正常运行,移植到电脑2就无法运行?我们在开发时遇到上述问题,开发者开始一直纠结是电脑环境的问题,问题一直在发散,一直在发散,最后问题越来越复杂,搞到最后不可收拾......,最后他告诉我,这个开发任务无法进行@_@,这个小伙子成功在他的小主管的心里留下了:解决实际问题差的印象......他的问题在于没有回到问题的本质:Python的作用是定位,操作;就首先回到确认窗口是否定位的思路上(当时他竟然还质疑他的小主管:窗口肯定定位了,因为在他的开发电脑上都是定位的好好的*_*):真的发现窗口没有被成功定位。
开发者就很困惑,为什么在电脑1是好的,电脑2就不行。
他根本没想到是定位出的问题,所以连简单的确认动作也没做!然后再网上一通乱搜,真的越搜越晕,越搜问题越发散。
使用Spy++发现:窗口的Title在电脑1和电脑2确实发生了变化,所以才会出现这个问题,然后问题解决的就简单了,更改titles字串就可以了。
请不要问,为什么,我也不知道为什么,如果大家有时间,可以慢慢研究,对于外部门嗷嗷待哺的需求,实在没时间研究为什么,首要的问题是先解决问题,后续有时间再慢慢了解为什么。
未来的测试应该是以自动化为主,手动测试为辅,但现在还有一种说法,"在国外,资深的软件测试人员大多是手动测试,他们厉害之处在于测试用例的设计,但在国内,很多测试人员都把自动化测试当成很厉害的资本这个问题非常有意思,首先我不太认同这种简单粗暴的对比方式,不能只是"国外","国内"这样的一元的对比,我认为需要多角度考虑问题:例如不同类型的公司,不同规模的公司,不同的待测物,都会影响对比的结果。
还有最近听到一个非常有意思的说法:如果你手里只有一个锤子,那你的眼里只能看到钉子。
这句话是什么意思?就是说如果你手里的工具非常有限,你所看到的世界就是非常局限的。
所以我们要尽可能的多掌握一些工具,这样我们看到的世界才能使多维的世界,这个多维的世界,才是比较接近真实的世界。
所以,为什么纠结是手动测试比较厉害还是自动化测试比较厉害呢?对于资深的测试人员,难道这些不都应该被掌握吗?说到国外,我最近听一个在美国工作10多年的主管跟我讲他所见到的非常厉害的测试团队,他之前所负责的项目是由一个15个人左右的测试团队测试了2-3个月的全面测试当然期间也会与开发团队配合进行debug,而且期间经常加班,工作得非常辛苦,就这样辛苦了2-3个月最后剩下大概30多个已知bug,项目团队经过商议,这些bug隐藏较深,应该不影响认证。
然后他信心满满地拿着这个产品到这个国外的认证实验室进行测试,他发现这个实验室整整一栋楼只有4个测试工程师,这4个测试工程师都是工作很多年的资深人员。
一栋楼除了这4个测试工程师剩下的就是很多很多的仪器以及很多电脑搭起来的各种各样的测试环境,所有的测试工作,都是由这个4个测试工程师将测试环境搭建起来,自动化执行,测试结果也是自动化产生(也就是说测试环境搭建起来后,测试工程师就可以坐下来喝杯咖啡,聊会天了~)不到一个星期,结果出来了,发现了60多个bug!!然后,这位老板,长大了嘴巴,拿着测试报告,回公司,继续带领着团队努力奋战~~~~这个经历对他的震撼太大了,这就是差别!!15个人的测试团队对抗4个人的测试团队,而且是15个人*3个月的人力对抗4*1周的人力,结果是:完败!!我觉得不需要纠结手动测试厉害还是自动化测试厉害。
对于公司来说,性价比才是要考虑的问题!我们需要发展的方向就是我们要渐渐成为那4个测试工程师的一员,而不是15个测试工程的一员!首先明确Python是一个语言,一个脚本语言,所有的语言都是从Hello world开始,就是说首先都要学习它的基本语法,变量;它的数据结构;它的各种语句写法等等,然后对于这些基本语言,写各种对应的代码,目的是帮助我们更好理解这些基础的知识。
这部分就像盖房子时搭建房子的框架,无论是什么类型产品的自动化开发,这些框架都是需要的。
学习基本语法,真的与学习其它的语言相比并没有什么特殊之处。
但是我想强调的是:看一万遍都不如自己实际手动试一遍,实践非常重要(所以千万不要轻视Hello world,它就是开启你美妙人生的钥匙)。
网上有很多很多很好的课程,甚至是免费的课程,也有很多资料,免费的资料,这个只能靠自己耐着性子去读,去实践了……,这部分谁也帮不了你,只能靠你自己了。
如果一定要我推荐,我建议可以在网上找"超级无敌Python教程",当然还有很多优秀的python书籍和教程,可以根据自己的需要进行选择。
基础知识学完了,就可以问问自己学它是为了什么,目的性一定要强,我们总不会为了考试是吗,总归有相关的工作需求你才会想学python,根据你的工作需求确认一下你需要学习什么模块,python是有非常非常丰富的第三方模块,可以帮助你快速完成你所需要的自动化开发工作。
这部分就比较让人激情澎湃,这就是你需要偏重的学习的方向,首先要搞清楚你的需求是什么,然后再选择用什么模块,用什么模块学什么模块!接下来就会有实实在在的产出了,哈哈,可以说,接下来是见证奇迹的时刻!!Python有很多模块,这些模块可以帮你实现很多功能,所以千万不要尝试自己写测试库,请先尝试找相关的模块,这些模块可以让你事半功倍!例如手机测试可以用它的Monkeyrunner模块,路由器项目可以用它的selenium模块,需要调用运行在操作系统上的软件可以用pywinauto模块。
当然一个项目需要有自己的架构,连架构Python的模块也帮你解决了:unittest模块,所以Python是个多么贴心的人儿啊~~所以千万千万不要上来就想所有的功能都要靠自己写。
如果您再问,那如何具体用到这些工作中,那就请看我在博为峰上的"Python系列课程"吧,那里有详细的说明,更为重要的是:此课程一直给大家介绍在实践中总结的一套方法,这个方法可以适用于不同类型项目的自动化开发,这套方法可不是你能在网上可以搜到的哦~另外我还想多说两句:万事开头难,刚开始学习一定会很枯燥痛苦,但是一定要坚持,撑下去,学语言一定要实践,不能看死书,多做小例子,最好把自己看过的内容,用自己的语言写出文档,这样会加深你的认识,另外学语言不能就事论事,一定要扩展,例如你看到资料上有例子,也在编辑器上写了,也正常运行了,就结束了嘛,不,你还要想,这个例子我如果这样改,会怎样?通过不断改例子,会不断加深你的认识,学习起来也不会这样枯燥。
1)Python如何实现对系统的API接口功能实现自动化测试?2)如何对Python写的程序进行 GUI 自动化测试?3)Python用于工业控制自动化测试怎么样?4)移动APP的UI和接口自动化测试怎么进行?就像上面的4个问题,其实可以参考我在网校上的"Python系列课程",这个课程就是解答了不同类型的产品需要使用哪些第三方模块,课程是根据我在工作中的实际的项目进行讲解,并给大家总结了一套方法,供大家在自己的工作进行应用。
如果真的感兴趣的童鞋,可以去看一下这个课程。
这里我简单讲解一下常用的几个第三方模块:a. 基于网页的测试的项目,例如路由器测试的自动化,用到的模块Selenium(说人话:就是你在做黑盒测试的项目,需要打开浏览器,需要测试的功能都是在网页上。
)而我们这个Selenium这个模块提供了很多用于控制网页以及网页上各种控件的函数,所以在有了一定的Python的基础上再结合Selenium模块就可以达到我们的目的(说人话:对于Python的基本语法有了解,做过简单的Python的项目即可,不需要太深入的了解,要问为什么,因为你只有函数没有其它代码如何将这些函数组织起来,实现你想实现的功能呢?)b. 基于运行在Windows OS上的程序的自动化,例如硬件的测试需要控制,用到的模块Pywinauto(说人话:就是不管是我们软件测试还是硬件测试,只要用到运行在windows系统上应用软件,就可以通过控制这个软件进而实现自动化)我们这个Pywinauto这个模块提供了很多控制应用软件以及应用软件上各个控件的函数。
c. 补充模块:Pymouse和Pykeyboard,这两个模块就是控制鼠标和键盘的,一定要慎用这两个模块,它们只是上述两个模块的补充。