专栏名称: 51Testing软件测试网
51Testing软件测试网,人气最旺的软件测试技术门户,提供软件测试社区交流,软件测试博客,人才服务,测试沙龙,测试杂志,测试资料下载等全方位信息服务,是国内最专业的软件测试就业培训、企业服务供应商...
目录
相关文章推荐
51好读  ›  专栏  ›  51Testing软件测试网

如何将Python应用到实际测试工作中?

51Testing软件测试网  · 公众号  · 测试  · 2017-05-26 17:33

正文

51Testing13周年庆直播活动已经举办了6场了,不知道大家是否听得过瘾?不过瘾的朋友,可以看看我们的文字解答哦,今天我们就邀请了王平平老师,对《如何将Python应用到实际测试工作中?》这个主题下提出的问题进行解答!

  基础问题(学员的问题)

  学员问题第一类"Python的应用"

  (1)如何将Python运用到实际测试工作中,Python自动化能做哪些方面的自动化

  (2)怎么利用python进行自动化测试python如何运用到实际测试中,现在公司以功能测试占绝大部分。

  (3)请问你们的python自动化测试主要做哪些哪方面?

  要回答上面的两个问题首先明确一个基本概念:Python首先是一个脚本语言,所以当然需要学习语言的语法,但是更为重要的是Python有各种模块,每个模块有自己的功能,有的模块是Python自带的,有的模块是第三方模块,必须自己另外安装,根据我的经验,第三方模块非常重要,一个模块可以解决一个方向的自动化测试。

  有了上面的基本概念,我来继续说明

  a. 基于网页的测试的项目,例如路由器测试的自动化,用到的模块Selenium

  (说人话:就是你在做黑盒测试的项目,需要打开浏览器,需要测试的功能都是在网页上。)而我们这个Selenium这个模块提供了很多用于控制网页以及网页上各种控件的函数,所以在有了一定的Python的基础上再结合Selenium模块就可以达到我们的目的(说人话:对于Python的基本语法有了解,做过简单的Python的项目即可,不需要太深入的了解,要问为什么,因为你只有函数没有其它代码如何将这些函数组织起来,实现你想实现的功能呢?)

  b. 基于运行在Windows OS上的程序的自动化,例如硬件的测试需要控制,用到的模块Pywinauto(说人话:就是不管是我们软件测试还是硬件测试,只要用到运行在windows系统上应用软件,就可以通过控制这个软件进而实现自动化)我们这个Pywinauto这个模块提供了很多控制应用软件以及应用软件上各个控件的函数。

  c. 补充模块:Pymouse和Pykeyboard,这两个模块就是控制鼠标和键盘的,一定要慎用这两个模块,它们只是上述两个模块的补充。

  你可以根据自己实际的工作来看你需要实现什么,你的黑盒测试流程是什么,你在执行黑盒测试使用的工具是什么:是网页?是安装在windows的软件?

  例如:硬件同事需要使用QRCT此工具(熟悉硬件测试的人员应该很熟悉这个软件吧)

  测试产品,麻烦的是需要将产品放到高低温箱中,测试一夜,需要定期点击这个页面上的两个按钮

  问题来了:谁能一夜不睡,去做这个无聊且没价值的工作?当然有:Python ^_^,用到什么模块?Pywinauto,因为QRCT此工具是安装在Windows OS上的软件。废话不多说,直接上代码:

  所以应该能回答了各位的问题了吧?要问Python能做什么,需要我们先确认我们需要什么?你的黑盒测试需要控制的对象是什么。Python非常强大,第三方模块也非常丰富,几乎可以满足你的所有需求。它可以应用到软件测试也可以应用到硬件测试,只要明确你在手动测试时使用的工具,然后再确认使用Python的第三方模块或者自带的模块是否可以控制这些工具即可。

  2. 学员问题第类二"Python的学习方法"

  (1)如何从黑盒测试升级到自动化测试,学习Python的方法?

  (2)你好,我从事软件测试6年时间了,但是绝大多数都是黑盒测试,在培训机构学习过编程,想使自己能力有质的提升,请帮忙指点该学习哪方面的知识使自己能有足够竞争力,另外即将担任五人测试团队的test leader,非常感谢。

  (3)问下,你是如何从一个纯黑盒手动测试发展为一个全能测试的?还有一个问题就是Python怎么用到移动自动化测试中?谢谢

  (4)我想自学Python ,现在的工作中又用不到,不知道有没有什么好的学习方法,谢谢。

  以上问题我总结为询问Python的学习方法,我学习Python已经5年了,为什么学习Python是因为当时公司在做智能手机,希望可以对手机一些测试项目实现自动化,找到了Monkeyrunner这个模块,所以才进一步接触到了Python这个语言。学习语言,真的方法很无聊,需要学习语法,写属于自己的第一个hello world程序。

  真的与学习其它的语言相比并没有什么特殊之处。但是我想强调的是:看一万遍都不如自己实际手动试一遍,实践非常重要,学习要有目的性。我建议学习Python不能预订的目标就不能仅仅是我要学习Python,Python只是一个工具,这个工具、就只是辅助你实现你想实现的功能,Python的模块非常之多,你无法穷尽的将这些模块一一全部学习一遍,所以学习Python你首先要明确你学习它的目的是什么?你希望通过它帮助你实现什么功能。这个非常重要,然后我们再返回来将Python的基本语法知识快速扫过一遍,再次我建议可以看"超级无敌Python教程"此本电子书。但是请记住看这些电子书只是让你快速了解一下Python的基本语法,然后再根据你的需求找寻模块,根据我的经验,大部分是第三方模块,然后就要学习这些第三方模块,主要就是学习这些模块中各个函数的用法。然后就可以尽快动手实践了,当然在学习基本语法和第三方模块时,也要动手写一些小程序,不能只是动眼不动手。如果你问我,这些第三方模块怎么学?那么请你看博为峰网校上的"Python系列课程",其中有详细的讲解。而Python语法怎么学,哇塞,这个问题有点无言以对,因为网上有很多很多很好的课程,甚至是免费的课程,也有很多资料,免费的资料,这个只能靠自己耐着性子去读,去实践了……

  学员问题第三"类Python的框架"

  1、使用python做自动化主要使用是的哪些工具和框架?

  这个问题非常好,框架是个非常好的东西,大家在搭建自己的测试体系时,要先在网上尝试寻找有没有已经框架,因为框架这个东西是一个可以大大加快你的开发进度的非常非常好的东西,举个例子,对于自动化测试系统,都是执行一个个Case,不可能一个case一个脚本,我们需要将这些脚本组织起来,而且需要执行一个大功能块的test case,并需要有一个整体的报告产出。这个需求就需要用到Unittest此框架。如果需要了解详细内容可以查看博为峰网校上的"Python系列课程",其中有详细的讲解。

  如果你想做"云"这个高大上的后端开发,就需要用到Django此框架,这个框架是我下半年要学习的内容,在此无法给各位更为专业的指导。

  综上,你想到使用框架,就是一个非常值得赞赏的想法,因为使用框架进行开发,就像站在巨人的肩膀上,可以的大大提高你的开发效率,至于到底需要什么框架,就要看你的工作需求了,我目前用的最多的是unittest。

  讲师提出的问题(实际开发中遇到的问题):

  在电脑1开发的脚本,可以正常运行,移植到电脑2就无法运行?

  我们在开发时遇到上述问题,开发者开始一直纠结是电脑环境的问题,问题一直在发散,一直在发散,最后问题越来越复杂,搞到最后不可收拾......,最后他告诉我,这个开发任务无法进行@_@,这个小伙子成功在他的小主管的心里留下了:解决实际问题差的印象......

  他的问题在于没有回到问题的本质:Python的作用是定位,操作;

  我帮他理清问题就首先回到确认窗口是否定位的思路上(当时他竟然还质疑他的小主管:窗口肯定定位了,因为在他的开发电脑上都是定位的好好的*_*):真的发现窗口没有被成功定位。开发者就很困惑,为什么在电脑1是好的,电脑2就不行。他根本没想到是定位出的问题,所以连简单的确认动作也没做!然后再网上一通乱搜,真的越搜越晕,越搜问题越发散。

  使用Spy++发现:窗口的Title在电脑1和电脑2确实发生了变化,所以才会出现这个问题,然后问题解决的就简单了,更改titles字串就可以了。

  请不要问,为什么,我也不知道为什么,如果各位学员有时间,可以慢慢研究,对于外部门嗷嗷待哺的需求,实在没时间研究为什么,首要的问题是先解决问题,后续有时间再慢慢了解为什么。

  2.对于Pywinauto此模块在使用Spy++查到的title这个属性来定位窗口,一直出错,该怎么办?

  按照我们的Python系列课程,不是说定位应用程序以及窗口,都是使用Spy++这个工具吗?

  查看这个工具的属性:多用Class或者Title这两个属性,就可以了吗?但是有时就是不能定位,一直有错误信息跳出来,怎么办?

  要静下心看错误信息,才能慢慢靠近问题本质,千万不能一出问题,不管三七二十一就到网上一通乱搜,越搜越糊涂,要相信自己可以慢慢厘清。

  例如:

  app=application.Application().connect_(title_re='?Torrent 3.2')

  执行后得到错误信息

  从以上错误信息有充足的理由怀疑'?'出了问题,应该不是单纯的英文单词,因为错误信息打印出来的?竟然是一个中文字前面加u转化为UTF格式试试,成功了。(如果要问我,你怎么知道要加u,我告诉你,因为错误信息说明是编码的问题,这个正常人都能想到,然后再在网上搜有关字符串编码的问题,就很容易找到u这个方法)

  app=application.Application().connect_(title_re=u'?Torrent 3.2')

  所以不管title是不是中文,前面统统加u转化格式,一般这样就不会有这样的问题出现。


如果大家还有问题,

欢迎留言提问!

王平平

13年软件测试经验,12年测试团队管理经验,5年Python自学及开发经验并带领团队从一个纯黑盒手动测试升级为一个既能测试又能开发的“测试研发团队”。