lsekfe 发表于 2017-9-26 16:20:26

测试女巫教你---用Python实现自动化


王平平简介:
13年软件测试经验,12年测试团队管理经验,5年Python自学及开发经验并带领团队从一个纯黑盒手动测试升级为一个既能测试又能开发的"测试研发团队"。两年的C++自学以及开发经验,对于统计学如何应用到实际工作有独到的见解。并在《51测试天地》连续发表10余篇文章。
为什么学Python篇:1、看到您在个人简介中写花了5年时间,自学Python并带领团队从一个纯黑盒手动测试升级为一个既能测试又能开发的"测试研发团队",这中间是否遇到过哪些难题?又是如何克服的?近期一直在看王阳明的相关书籍,他的一个观点我非常赞同,不管要学习什么一定要立志,立志是非常非常重要的,但是立志前一定要有动机,或者说要有“打击”,那种让你内心感到瓦凉瓦凉的打击!我在软件测试这个行业工作了12年之久,截至5年前,我一直很愉悦地,内心充盈地做着黑盒测试,曾几何时我也觉得最好离“开发”远远的,因为很多人都说:女孩子做测试挺好的~~ 但是,我遇到很一个非常现实而残忍的问题:“裁员”,想想自己也挺奇葩的,在一个公司竟然待了12年之久,在这12年里,因为各种原因,我经历了大大小小的裁员有5次之多,一有裁员需求,老板第一个考虑的就是测试人员。每一次裁员,都是自己团队里的兄弟姐妹,我要亲自告诉他或她,因为公司现在裁员,需要你离开公司,虽然你的工作是合格的,甚至是优秀的~~然后我要鼓起勇气陪着哭泣的他或她去立刻办理离职手续,一刻也不能停留~~你能想象我内心的崩溃吗?每一次我都会问为什么又是我们?每一次老板都会坦率地告诉我,为什么裁员考虑的是我们测试团队:就是因为可取代性太强了!!我真的实实在在意识到了黑盒测试的无力。

公司在寒冬时,需要“蓄积能量”,也就是需要减少开支,老板就要开始衡量,哪类研发人员被裁,后续如果公司渡过难关后补起来比较容易,很不幸,每一次评估下来都是测试人员。有个声音在我脑海里越来越清晰:不能这样,我们团队不能总是做可取代性强的工作!!所以测试的发展方向是什么?我要有什么样的技能才能改观老板对我们的认知??我开始在网上找,当然也在51testing这样专业的网站上找寻,我找寻的结果是:未来的测试应该是以自动化为主,手动测试为辅。所以测试人员必须要学会编程,因为测试是一个无穷尽的工作,如何体现测试人员的价值,就是在单位时间内能有更多的产出,有让老板瞠目结舌的产出!!怎么学习Python在第二类问题中有详细说明,期间遇到的困难实在太多了,首要的问题就是团队的信心不足,我们离开coding实在太久了,这个困难,我只能说,受到的打击越大,越深,信心就会越足,容许我先哭一会~~ 除了这些形而上的困难,当然也有实实在在的困难,我举一个实际且非常具体的问题:电脑1开发的脚本,可以正常运行,移植到电脑2就无法运行?  我们在开发时遇到上述问题,开发者开始一直纠结是电脑环境的问题,问题一直在发散,一直在发散,最后问题越来越复杂,搞到最后不可收拾......,最后他告诉我,这个开发任务无法进行@_@,这个小伙子成功在他的小主管的心里留下了:解决实际问题差的印象......  他的问题在于没有回到问题的本质:Python的作用是定位,操作;就首先回到确认窗口是否定位的思路上(当时他竟然还质疑他的小主管:窗口肯定定位了,因为在他的开发电脑上都是定位的好好的*_*):真的发现窗口没有被成功定位。开发者就很困惑,为什么在电脑1是好的,电脑2就不行。他根本没想到是定位出的问题,所以连简单的确认动作也没做!然后再网上一通乱搜,真的越搜越晕,越搜问题越发散。  使用Spy++发现:窗口的Title在电脑1和电脑2确实发生了变化,所以才会出现这个问题,然后问题解决的就简单了,更改titles字串就可以了。  请不要问,为什么,我也不知道为什么,如果大家有时间,可以慢慢研究,对于外部门嗷嗷待哺的需求,实在没时间研究为什么,首要的问题是先解决问题,后续有时间再慢慢了解为什么。
2、您前面说到未来的测试应该是以自动化为主,手动测试为辅,但现在还有一种说法,"在国外,资深的软件测试人员大多是手动测试,他们厉害之处在于测试用例的设计,但在国内,很多测试人员都把自动化测试当成很厉害的资本"您对此有何看法?这个问题非常有意思,首先我不太认同这种简单粗暴的对比方式,不能只是“国外”,“国内”这样的一元的对比,我认为需要多角度考虑问题:例如不同类型的公司,不同规模的公司,不同的待测物,都会影响对比的结果。还有最近听到一个非常有意思的说法:如果你手里只有一个锤子,那你的眼里只能看到钉子。这句话是什么意思?就是说如果你手里的工具非常有限,你所看到的世界就是非常局限的。所以我们要尽可能的多掌握一些工具,这样我们看到的世界才能使多维的世界,这个多维的世界,才是比较接近真实的世界。所以,为什么纠结是手动测试比较厉害还是自动化测试比较厉害呢?对于资深的测试人员,难道这些不都应该被掌握吗?

说到国外,我最近听一个在美国工作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篇:您之前提到了自学Python的经历,我们有很多会员也是目前正在从事功能测试,想转自动化测试,如果他们现在学习Python,您是否能介绍一些好的学习方法介绍给大家呢?首先明确Python是一个语言,一个脚本语言,所有的语言都是从Hello world开始,就是说首先都要学习它的基本语法,变量;它的数据结构;它的各种语句写法等等,然后对于这些基本语言,写各种对应的代码,目的是帮助我们更好理解这些基础的知识。这部分就像盖房子时搭建房子的框架,无论是什么类型产品的自动化开发,这些框架都是需要的。学习基本语法,真的与学习其它的语言相比并没有什么特殊之处。但是我想强调的是:看一万遍都不如自己实际手动试一遍,实践非常重要(所以千万不要轻视Hello world,它就是开启你美妙人生的钥匙)。网上有很多很多很好的课程,甚至是免费的课程,也有很多资料,免费的资料,这个只能靠自己耐着性子去读,去实践了……,这部分谁也帮不了你,只能靠你自己了。如果一定要我推荐,我建议可以在网上找“超级无敌Python教程”,当然还有很多优 秀的python书籍和教程,可以根据自己的需要进行选择。

基础知识学完了,就可以问问自己学它是为了什么,目的性一定要强,我们总不会为了考试是吗,总归有相关的工作需求你才会想学python,根据你的工作需求确认一下你需要学习什么模块,python是有非常非常丰富的第三方模块,可以帮助你快速完成你所需要的自动化开发工作。这部分就比较让人激情澎湃,这就是你需要偏重的学习的方向,首先要搞清楚你的需求是什么,然后再选择用什么模块,用什么模块学什么模块!接下来就会有实实在在的产出了,哈哈,可以说,接下来是见证奇迹的时刻!!Python有很多模块,这些模块可以帮你实现很多功能,所以千万不要尝试自己写测试库,请先尝试找相关的模块,这些模块可以让你事半功倍!例如手机测试可以用它的Monkeyrunner模块,路由器项目可以用它的selenium模块,需要调用运行在操作系统上的软件可以用pywinauto模块。。当然一个项目需要有自己的架构,连架构Python的模块也帮你解决了:unittest模块,所以Python是个多么贴心的人儿啊~~所以千万千万不要上来就想所有的功能都要靠自己写。
如果您再问,那如何具体用到这些工作中,那就请看我在博为峰上的"Python系列课程"吧,那里有详细的说明,更为重要的是:此课程一直给大家介绍在实践中总结的一套方法,这个方法可以适用于不同类型项目的自动化开发,这套方法可不是你能在网上可以搜到的哦~  另外我还想多说两句:万事开头难,刚开始学习一定会很枯燥痛苦,但是一定要坚持,撑下去,学语言一定要实践,不能看死书,多做小例子,最好把自己看过的内容,用自己的语言写出文档,这样会加深你的认识,另外学语言不能就事论事,一定要扩展,例如你看到资料上有例子,也在编辑器上写了,也正常运行了,就结束了嘛,不,你还要想,这个例子我如果这样改,会怎样?通过不断改例子,会不断加深你的认识,学习起来也不会这样枯燥。
Python自动化实际操作篇:前面聊到了为什么要学习Python和具体学习Python的方法,下面有几个51Testing会员在实际测试工作中应用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,这两个模块就是控制鼠标和键盘的,一定要慎用这两个模块,它们只是上述两个模块的补充。你可以根据自己实际的工作来看你需要实现什么,你的黑盒测试流程是什么,你在执行黑盒测试使用的工具是什么:是网页?是安装在windows的软件?  好的,如果你还是一脸蒙菜,我来举一个实际工作中的例子:  例如:硬件同事需要使用QRCT此工具(熟悉硬件测试的人员应该很熟悉这个软件吧)测试产品,麻烦的是需要将产品放到高低温箱中,测试一夜,需要定期点击这个页面上的两个按钮,那么问题来了:谁能一夜不睡,去做这个无聊且没价值的工作?当然有:Python ^_^,  用到什么模块?Pywinauto,因为QRCT此工具是安装在Windows OS上的软件。废话不多说,直接上代码:http://www.51testing.com/attachments/2017/08/14982672_201708221025251FHrB.jpg 所以应该这个小例子可以震撼到各位看官了吧?要问Python能做什么,需要我们先确认我们需要什么?你的黑盒测试需要控制的对象是什么。Python非常强大,第三方模块也非常丰富,几乎可以满足你的所有需求。它可以应用到软件测试也可以应用到硬件测试,只要明确你在手动测试时使用的工具,然后再确认使用Python的第三方模块或者自带的模块是否可以控制这些工具即可。

5)      Python常用的测试框架有哪些?1) 是的在开发一个相对来说比较复杂完整的项目就要考虑“测试框架”的问题了,在我们实际工作中,使用较多的就是unittest框架了,因为不管是什么类型的测试,都需要搭建测试框架,即test case怎么组成的,怎么执行,最后怎么生成test report。

接下来给大家简单介绍一下unitest框架,首先它是python自带的模块,所以不需要另外安装。它的基本构造是将一个个test case打包成一个个独立的“模块”,然后根据需要再将这些test case使用test suit继续归类,然后再使用test runner运行,可以以模块为单位进行运行,然后再根据Assert方法判断你的每个case的执行结果,最后使用网上开源的免费的模块:HTMLTestRunner.py生成一个漂亮的测试报告http://www.51testing.com/attachments/2017/08/14982672_201708221025252XUyK.jpg虽然你可以查看官网和源代码都可以找到它的基本概念,这里还是简单说明一下,让大家可以对它有个感性的认识:  a. test fixture(测试治具)  表明一些准备工作需要执行一个或者更多的测试用例,和一些需要清除的动作,它是一个概念,使用TestCase,setUp和tearDown这些方法来对于测试治具进行初始化,建立测试用例,以及清除。所以测试治具是被构建的,它是由setup方法,TestCase组件以及tearDown方法组成的。  b. test case  Test case是测试的最小单元。根据特殊的一系列的输入产生特定的回应。  Unittest提供一个基本的类:Test case可以用来创建新的test cases.  c. test suite(测试集)  Test suit是test case的集合,它可以用来整合test cases,使其可以一起进行执行测试。  d. test runner  Test runner是执行测试以及提供测试结果给用户的一个组件,它可以使用图形接口,文字接口或者返回一个特殊值来说明执行测试的结果。  红框就是构建test case,注意一个test case就是一个函数;绿框标出的就是构建test Suit,即将test case进一步分类;紫框标出的就是构造report注意其中调用了HTMLTest Runner这个开源的文件,并执行这个test suit。http://www.51testing.com/attachments/2017/08/14982672_201708221025253GZe5.jpg


6)      在实际项目中Python可以结合哪些测试工具做自动化测试?这个问题,其实很难回答:因为实际上python可以结合很多测试工具,哪怕这些测试工具是你们公司自己独立开发的测试工具,我们也可以将其搭配我们的python进行自动化测试。关键看是什么样的测试工具,因为python主要是靠第三方模块来实现具体的可用于实际工作自动化开发,我们已经学习的第三方模块是:Selenium,可以用于控制浏览器(市面上主流的浏览器均可使用);pywinauto,可以用于控制运行在windows OS上的软件;pykeyboard以及pymouse均是控制鼠标和键盘的模块......如果你的测试工具是通过浏览器可以控制,那就可以用selenium模块来与之合作;如果是运行在windows OS的软件,就可以用pywinauto模块来与之合作,所以我这里不回答具体什么工具可以与python合作做自动化,而是告诉你什么类型的工具可以与python合作做自动化,这样可能更能对你又帮助~

dhdddp 发表于 2017-10-23 16:43:16

自学过,但是缺少实战经验不知道怎么办

谷歌VS黑洞百度 发表于 2017-10-24 15:50:42

我想知道招聘要求中能够自己编写测试框架,这个框架有什么东西?需要怎样做呀
页: [1]
查看完整版本: 测试女巫教你---用Python实现自动化