自动化测试里面有三大利器:
- 语言Python
- UI自动化工具Selenium
- 验收测试框架RobotFramework
巧的是三个利器都有2.x和3.x的版本。本文打算就这个话题来做个小结。
Python
Python 2
Python 2 发布于 2000 年年底,意味着较之先前版本,这是一种更加清晰和更具包容性的语言开发过程。而先前版本的 Python 应用的是 PEP (Python 增强协议),这种技术规范能向 Python 社区成员提供信息或描述这种语言的新特性。据说2020年也是Python2的终结之年。
Python 3
Python 3 被视为 Python 的未来,是目前正在开发中的语言版本。(最新开发版本为3.7),Python 3 于 2008 年年末发布,重点是清理代码库并删除冗余,清晰地表明只能用一种方式来执行给定的任务。
差别1:Print
在 Python 2 中, print 被视为一个语句而不是一个函数,这是一个典型的容易弄混的地方,因为在 Python 中的许多操作都需要括号内的参数来执行。如果在 Python 2 中你想要你的控制台输出 ”Winter Is Coming”,你应该写下这样的 print 语句:
print "Winter Is Coming"
在使用 Python 3 时,print()会被显式地视为一个函数,因此要输出上面相同的字符串,你可以使用这种非常简单且易于使用的函数语法:
print('Winter Is Coming')
这种改变使得 Python 的语法更加一致,并且在不同的 print 函数之间进行切换更加容易。就方便性而言,print()语法也与 Python 2.7 向后兼容,因此您的 Python 3 print()函数可以在任一版本中运行。
差别2:支持 Unicode
还是上面那一个例子,如果你在Python2里想输出“凛冬已至”,当直接使用print时,
print '凛冬已至'
会遇到类似于以下的异常:
Non-ASCII character '\xe5' in file D:/Python/Demo/2.1.1.py on line 2, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
这是因为Python 2 默认使用 ASCII 字母表,因此当您输入“凛冬已至”时, Python 2 将以 ASCII 格式处理字符串。被限定为在多种扩展形式上的数百个字符,用ASCII 进行字符编码并不是一种非常灵活的方法,特别是使用非英语字符时。
要使用更通用和更强大的Unicode字符编码,这种编码支持超过128,000个跨越现今和历史的脚本和符号集的字符,你必须输入
u“凛冬已至”
, 前缀 u 代表 Unicode。
Python 3 默认使用 Unicode,这节省了程序员多余的开发时间,并且您可以轻松地在程序中直接键入和显示更多的字符。因为 Unicode 支持更强大的语言字符多样性以及 emoji 的显示,所以将它作为默认字符编码来使用,能确保全球的移动设备在您的开发项目中都能得到支持。
至于是为什么会使用 asscii 作为默认编码,原因在于 Python 2 出来的时候还没出现 Unicode。
另外可以使用到Built-in里面的另外两个函数:decode和encode
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。
Python2和3在一些函数或者库的处理上还有很多不一样的地方,大家可以继续慢慢摸索,放一个网上传的Python2和3区别的神图(最好无限放大来查看):
Selenium
Selenium是一组web自动化测试工具集,它由以下几个部分构成:
Selenium IDE(Integrated Development Environment) 这是Firefox浏览器的一个插件,用于录制和回放selenium测试脚本。
WebDriver和RC 它提供了各种编程语言API的支持,例如java、python、ruby、php、.net等等,能够与不同的浏览器进行交互,驱动浏览器进行自动化测试。
Grid 它提供了分布式测试和并行测试的能力,能够帮助我们大幅的减少测试的执行时间。
Selenium2和Selenium3的关系其实用下面的一张图就可以说清楚:
相比较于Selenium2来说,Selenium 3.0(2016年7月左右发布)有了更新的特性加入,尤其是对Edge和safari原生驱动的支持,Edge驱动由MS提供,safari原生驱动由Apple提供。
具体来说,Selenium3.0的更新内容包括以下:
去掉了对selenium rc的支持。
全面拥抱java 8。
支持macOS (Sierra or later),支持官方的safaridriver。
通过ms官方的webdriver server支持Edge浏览器。又是一个官方的版本,ms表示坚决支持webdriver协议的内容,这也意味着以前性能及稳定性都很差劲的ie driver应该逐渐被淘汰掉了。
只支持ie 9.0版本以上。
通过Mozilla官方的geckodriver来支持firefox。
总而言之,selenium 3.0在支持的原生驱动方面更为丰富,在2.0的基础上有了更多的改进。对于各位写自动化测试脚本的大家来说,最直观的感受应该就是2.0的时候支持不同的浏览器需要下载不同的浏览器驱动程序,3.0的时候只用下载一个geckodriver就搞定了。
RobotFramework
RobotFramework3.0.2(目前Pypi上的最新版本)的发布声明上声称:
Starting from Robot Framework 3.0, tests are executed from the command line using the robot script or by executing the robot module directly like python -m robot or jython -m robot. Older Robot Framework versions have Python interpreter specific pybot, jybot and ipybot scripts that still work but will be deprecated and removed in the future.
可以看出来RF3对测试脚本的执行上方式上有了微妙的更改,更大的变化是RF3是可以支持Python3编写的脚本。只是因为wxPython工具底层还未支持Python3的原因,RIDE目前还是只能在Python2的环境下运行。
RF上对于Selenium库的依赖以前有一段时间是Robotframework-Selenium2Library来支持,不过从最新的发布来看, SeleniumLibrary重新夺回了主动权:
SeleniumLibrary works with Selenium 2.53.6 or newer, including Selenium 3. It supports Python 2.7 as well as Python 3.3 or newer. In addition to the normal Python interpreter, it works also with PyPy and Jython.
综上所述,目前的自动化测试的环境可以用以下的三驾马车来搭:
Python 3.x + Selenium 3.x +Robotframework 3.x
欢迎来到3字头的时代,终于不用再2了~~~