自動化測試里面有三大利器:
- 語言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了~~~