為了更好地讓讀者理解快速學習新框架的思路,筆者接下來會繼續介紹另一個名為 Robot 的自動化測試框架,希望讀者能參考筆者從零開始講解一個開發/測試框架的流程,從中總結出適合於自己的快速學習方法。
與 Selenium 框架相比,Robot 框架是一款更為通用的、可延伸的自動化測試框架,它最大的特點是支援關鍵字驅動的測試方法。這意味著,測試人員可以先基於該框架的擴充套件規則來引入其他用 Python 或 Java 實現的第三方測試擴充套件(包括 Selenium),並將這些擴充套件的住處編寫成 HTML、TXT 等格式的關鍵字檔案,就可以獲得一款強大的測試工具了。之後,只需再以關鍵字的形式編寫測試用例即可進行測試。總體而言,掌握 Robot 框架的學習重點就是要切實地理解關鍵字驅動的自動化測試方法,下面就來具體介紹一下這一測試方法及其背後的工作原理。
在測試方法中,關鍵字驅動測試的主要構想是將程式設計師編寫的自動化測試程式碼進行兩次分離:第一次先將該測試程式碼中使用的具體測試資料剝離出來;第二次再從已剝離了資料的程式碼中將模仿人類行為的部分剝離出來。然後在工作時反過來基於具體的測試資料與指定的行為來生成對應的自動化測試程式碼。這樣做將有利於人們更加便捷地進行自動化測試程式碼的管理,提高這些程式碼的複用性,讓自動化測試的工具更容易被普通人理解並使用。
考慮到上述理論說明有些複雜,下面來舉個簡單的例子。如果讀者編寫了一個用於測試「使用者登入」功能的自動化指令碼,那麼該指令碼程式碼中用於測試的每一組使用者名稱和密碼都屬於具體的測試資料,在設計基於關鍵字驅動的測試方法中,它們應該首先被剝離出去。然後在剩下的程式碼中,有包含「輸入使用者名稱和密碼」、「點選登入按鈕」等模仿人類操作的行為部分,也有「檢查輸入是否有效」、「檢查登入是否成功」等執行目標程式流程的測試部分,而我們第二次分離工作要做到就是將模仿人類操作的行為部分從中剝離出來,並儲存為與相應測試功能相關聯的關鍵字。這樣一來,我們在後續工作中就可以拿一組使用者資料,加上指定的關鍵字讓 Robot 這樣的自動化工具自動生成測試程式碼了,譬如像表 1 中所描述的這樣。
具體測試資料 | 關鍵字 | 生成的測試程式碼 |
---|---|---|
使用者張三(使用者名稱,密碼) | 輸入使用者名稱和密碼 | 檢查輸入是否有效的測試程式碼 |
使用者張三(使用者名稱,密碼) | 點選登入按鈕 | 檢查登入動作是否成功的測試程式碼 |
表 1:資料+關鍵字驅動的測試
從上述例子可以看出,關鍵字驅動測試的核心思路就是將自動化測試指令碼中用於模仿人類操作的行為部分提取出來,作為一個以關鍵字形式存在的固定測試動作。這樣就之後只需要提供具體的測試資料,就可以實現對於相應測試動作相應的自動化程式碼了。而這個提取行為部分的過程,在專業術語中被稱之為「關鍵字封裝」。
在理解了 Robot 框架的基本工作原理之後,讀者就可以開始學習如何在具體專案中引入該框架,並設定好使用該框架進行自動化測試所需要的相關工具了。對於一個新的開發框架,程式設計師們對它的上手過程基本都是從這一步開始的。
正如之前所說,Robot 框架可以利用其擴充套件性引入 Selenium 框架一起搭配使用,因此在接下來的演示中,筆者會選擇繼續在之前設定了 Selenium 框架的環境中介紹 Robot 框架的安裝與設定方法,其具體步驟如下。
確認當前計算機裝置中已經安裝了 Selenium 框架,以及與 Web 瀏覽器相匹配的 WebDriver 元件。
在當前計算機裝置中開啟 Powershell 這樣的命令列終端環境,並在其中執行pip install robotframework
命令來安裝 Robot 框架。在這篇筆記中,筆者安裝的是 Robot Framework 6.0.2,如圖 1 所示。
圖 1:安裝 Robot 框架
待上述安裝過程順利完成之後,接下來要做的就是根據自己安裝的框架版本來設定使用該框架的自動化測試環境了。
為了更便捷地使用 Robot 框架,人們通常還會選擇為其設定一款名叫 RIDE 的整合式開發環境,這是一款基於 Python 語言實現的,專門面向 Robot 框架編寫測試用例的軟體。它的安裝方式非常簡單,讀者只需繼續在之前開啟的命令列終端環境中執行pip install robotframwork-ride
命令即可。在這裡需要特別提醒的是:如果讀者使用的是最新版本的 Python 執行時環境,其對應的 RIDE 版本可能還未被更新到 Pip 包管理器的軟體倉庫中。為了解決這一問題,讀者可前往 GitHub 網站中搜尋 robotframework/RIDE 專案,並根據其官方說明來安裝該軟體。總而言之,待該軟體的安裝過程完成之後,當前計算機的 Windows 桌面上就會出現一個如圖 2 所示的圖示。
圖 2:RIDE 的圖示
如果讀者想驗證 Robot 框架及其整合環境的安裝是否成功,接下來可以通過試用 RIDE 來初步體驗一下這個框架的功能,其具體步驟如下。
在當前計算機的 Windows 桌面上用滑鼠雙擊如圖 2 所示的圖示,稍等片刻就會開啟 RIDE 的主介面,該介面的初始狀態如圖 18 所示。
圖 3:RIDE 的初始介面
在如圖 3 所示介面的選單欄中,通過依次用滑鼠單擊「File」→ 「New Project」選單項,建立一個名為HelloRobot
的新專案,儲存目錄為examples
目錄,如圖 4 所示。
圖 4:在 RIDE 中建立新專案
在選擇工程型別時,如果讀者想建立的是一個多檔案的專案,就選擇「Directory」,否則就保持預設選項即可。
待上述專案建立之後,讀者就會在如圖 5 所示的主介面中看到這個新專案了。在該介面中,除了頂部的選單欄和工具列之外,其工作區主要由三個窗格組成。左側上半部的「Files」窗格可被視為是當前計算機裝置的資源管理器,其中顯示的是當前檔案所在的目錄;左側下半部的「Test Suites」窗格可被視為是專案管理器,其中顯示的是我們使用 RIDE 建立的專案及其相關資源;最後,右側佔大部分割區域的窗格就是當前專案的主工作區。
圖 5:RIDE 中的專案管理介面
在 RIDE 中,下面的管理單元分為專案、測試套件和測試用例三個級別。因此讀者接下來要做的就是在圖 5 所示介面左側的「Test Suites」窗格中用滑鼠右鍵單擊之前建立的03_HelloRobot
專案,並在彈出的選單中選擇「New Suite」選單項來新建一個新的測試套件。在這裡,筆者將該套件命名為testOpenBaidu
,如圖 6 所示。
圖 6:在 RIDE 中建立測試套件
繼續在「Test Suites」窗格中用滑鼠右鍵單擊之前建立的testOpenBaidu
測試套件,並在彈出的選單中選擇「New Test Case」選單項來新建一個新的測試用例。在這裡,筆者將該測試用例命名為openBaiduCase
,如圖 7 所示。
圖 7:在 RIDE 中建立測試用例
在上述步驟完成之後,讀者就會在 RIDE 的主介面中看到如圖 8 所示的專案資訊了。此刻,主介面右側工作區呈現的就是當前測試用例的編輯介面。接下來,讀者就需要在該介面中進行測試用例的具體設計了。
圖 8:RIDE 的用例編輯介面
作為在 Robot 框架設計測試用例的第一步,讀者首先要做的就是將 Selenium 框架作為第三方擴充套件引入到當前專案中。具體操作是:首先開啟命令列終端環境並在其中執行pip install robotframework-selenium2library
命令安裝對應的外掛。然後回到 RIDE 中,並在「Test Suites」窗格中用滑鼠左鍵單擊之前建立的testOpenBaidu
測試套件,並在右側主工作區中用滑鼠左鍵單擊「Add Import」欄下面的「Library」按鈕,如圖 9 所示。
圖 9:RIDE 的套件編輯介面
在彈出的如圖 10 所示對話方塊中填寫要匯入的擴充套件為「Selenium2Library」(注意區分大小寫),並用滑鼠左鍵單擊「OK」即可完成 Selenium 框架的匯入。
圖 10:匯入 Selenium 擴充套件
待擴充套件新增完成之後,我們就可以在如圖 11 所示介面中看到該擴充套件了。如果該擴充套件的名稱為黑色,即證明該擴充套件已經被成功匯入。如果為紅色,可能就遇到了一些路徑問題,最直接的解決方法就是找到該擴充套件的安裝目錄(該目錄通常位於[Python安裝目錄]\lib\site-packages\
目錄下),並在其中建立一個名為GLOBAL_VARIABLES.py
的空檔案即可。
圖 11:RIDE 中的擴充套件列表
在「Test Suites」窗格中用滑鼠左鍵單擊之前建立的testOpenBaidu
測試用例,回到 RIDE 的用例編輯介面中,使用 Robot 框架的內建關鍵字編寫如下測試劇本(在編寫過程中,讀者可以使用「Alt+Ctrl+Space」快捷鍵來檢視當前可用的關鍵字),具體如圖 12 所示。
圖 12:使用關鍵字編寫測試用例
在 RIDE 頂部的選單欄中依次選擇「Tools」→「Run Tests」即可啟動當前的測試用例了。待測試用例執行完成之後,RIDE 右側的主工作區中將會自動報告測試的結果,如圖 13 所示。
圖 13:測試用例的執行報告
至此,讀者就完整地體驗了在 RIDE 整合環境中基於 Robot+Selenium 框架,使用關鍵字編寫測試用例的基本流程。從該流程中,我們可以明確地感受到關鍵字驅動的測試方法所能帶來的便利性,以及整個測試過程的自動化程度。但這也帶出了下一個要解決的問題:測試人員在使用 Robot 框架編寫測試用例時,究竟可以使用哪些關鍵字呢?這就來到了程式設計師們快速學習一個新框架的最後一個步驟。
對於測試人員來說,學習使用 Robot 框架進自動化測試工作的第一步是掌握該框架提供的內建關鍵字。而想要了解這些內建關鍵字,最便捷的方法就是查閱 Robot 框架的官方檔案,其步驟具體如下。
在 Google、百度這樣的搜尋引擎中輸入「robot framework」關鍵字,就可以快速找到並存取 Robot 框架提供的官方網站,如圖 14 所示。
圖 14:Robot 框架的官方網站
在圖 14 所示頁面的頂部導航欄中找到帶有「DOCS」字樣的連結,並在展開的選單中選擇「BuitIn Library」連結即可跳轉到 Robot 框架的內建關鍵字檔案首頁了,如圖 15 所示。
圖 15:Robot 框架的內建關鍵字檔案
從圖 15 所示的檔案中,讀者可以看到 Robot 提供了 106 個內建關鍵字,這些關鍵字主要用於變數定義、迴圈控制、資料計算、進位制轉換、斷言判斷、紀錄檔輸入/輸出等基本測試功能。例如,如果讀者想知道「Call Method」關鍵字的作用,以及使用時需要指定哪些引數,就可以使用該檔案頁面中的搜尋功能來檢視該關鍵字的詳細說明,如圖 16 所示。
圖 16:Call Method 關鍵字的檔案
在掌握了 Robot 框架的內建關鍵字之後,接下來該框架的標準庫中提供的關鍵字。如果讀者想查閱這部分關鍵字的檔案,可在圖 19 所示頁面的頂部導航欄中找到帶有「DOCS」字樣的連結,並在展開的選單中選擇「Standard Library」連結即可跳轉到 Robot 框架標準庫中的關鍵字檔案首頁了,如圖 17 所示。
圖 17:標準關鍵字檔案
上述 11 個分組的關鍵字涵蓋了程式設計師們在日常程式設計時會需要用到的測試功能。例如:Collections 組的關鍵字主要用於執行與列表、字典等與集合類操作相關的測試;DateTime 組的關鍵字主要用於與日期、時鐘型別資料相關的測試等,讀者可以根據自己的需要用滑鼠單擊相應的「view」連結,並查閱相關的檔案。
如果讀者還想要對更復雜的功能進行測試,那就需要專門學習經由第三方擴充套件匯入的關鍵字了,而這需要查閱這些擴充套件提供的官方檔案。例如,讀者之前所使用的「Open Browser」、「Input Text」等關鍵字,都是藉由 Selenium2Library 這個第三方擴充套件匯入的、專用於 Web 前端測試的關鍵字。如果讀者想查閱該擴充套件提供的關鍵字檔案,可執行如下步驟。
在 Google、百度這樣的搜尋引擎中輸入「robot framework selenium2library」關鍵字,就可以快速找到並存取 Selenium2Library 專案提供的官方網站,如圖 18 所示。
圖 18:Selenium2Library 專案的官方網站
在圖 18 所示頁面中找到帶有「Latest keyword documentation」字樣的連結並用滑鼠單擊它,即可跳轉到 Selenium2Library 擴充套件提供的關鍵字檔案首頁了,如圖 19 所示。
圖 19:Selenium2Library 的關鍵字檔案
在圖 19 所示的檔案介面中,讀者可以用滑鼠左鍵單擊其底部的放大鏡按鈕,並使用其搜尋功能快速定位到自己要查閱的關鍵字。例如,下面的圖 20 中顯示的就是「Open Browser」這個關鍵字的使用說明。
圖 20:Open Browser 關鍵字的使用說明
最後,在某些特殊情況下,讀者也可以通過建立使用者關鍵字的方式將自己編寫的程式碼封裝成可供 Robot 框架呼叫關鍵字。關於這部分的內容,讀者也在 Robot 框架的官方網站上找到帶有「DOCS」字樣的連結,並在展開的選單中選擇「User Guide」連結,查閱其 2.7 節與使用者關鍵字部分的內容,然後進行相關練習。例如,假設讀者在這裡需要將之前編寫的testGeckoDriver.py
指令碼封裝成一個名為「Test Geckodriver」的關鍵字,可執行以下步驟。
回到 RIDE 中,並在「Test Suites」窗格中用滑鼠左鍵單擊之前建立的testOpenBaidu
測試套件,並在右側主工作區中用滑鼠左鍵單擊「Add Import」欄下面的「Library」按鈕,然後再彈出的對話方塊中單擊「Browse」,然後將之前編寫的testGeckoDriver.py
指令碼作為擴充套件匯入到當前測試套件中,其結果如圖 21 所示。
圖 21:在 RIDE 中匯入自定義指令碼
繼續在「Test Suites」窗格中用滑鼠右鍵鍵單擊之前建立的testOpenBaidu
測試套件,並在彈出的選單中選擇「New User Keyword」選單項來新建一個新的自定義關鍵字。在這裡,筆者將該關鍵字命名為Test Geckodriver
,並指定它有一個名為${Url}
的引數,如圖 22 所示。
圖 22:在 RIDE 中建立自定義關鍵字
在「Test Suites」窗格中用滑鼠左鍵單擊剛建立的Test Geckodriver
關鍵字,進入到該關鍵字的編輯介面中,然後在其中呼叫之前在testGeckoDriver.py
指令碼定義的函數,並設定其引數就是關鍵字接收到的引數:${Url}
,如圖 23 所示。
圖 23:在 RIDE 中編輯自定義關鍵字
只要上述操作順利,自定義關鍵字的操作就完成了。如果讀者想驗證一下該關鍵字是否可用,可繼續在「Test Suites」窗格中用滑鼠右鍵單擊之前建立的testOpenBaidu
測試套件,並在彈出的選單中選擇「New Test Case」選單項,新建一個名為helloSeleniumCase
的測試用例,並在該測試用例的編輯介面中呼叫Test Geckodriver
關鍵字,併為其指定要存取的 URL 引數,如圖 24 所示。
圖 24:在 RIDE 中呼叫自定義關鍵字
最後只需在 RIDE 左側的「Test Suites」窗格勾選helloSeleniumCase
測試用例,並在其頂部的選單欄中依次選擇「Tools」→「Run Tests」即可啟動該測試用例了,其測試報告如圖 25 所示。
圖 25:驗證自定義關鍵字的使用
關於上述內容的更詳細說明,讀者也在 Robot 框架的官方網站上找到帶有「DOCS」字樣的連結,並在展開的選單中選擇「User Guide」連結,查閱其 2.7 節與使用者關鍵字部分的內容,然後進行相關練習。
需要再次強調的是,我們在這裡雖然花了很多篇幅介紹了在 Web 前端測試領域較為流行的自動化測試框架及其使用方法,但筆者主要聚焦的是可持續的自主學習能力。畢竟,在如今的軟體開發活與測試動中,程式設計師們可以選擇的開發/測試框架不僅琳琅滿目,選擇眾多,而且新陳代謝得極為快速。這意味著,即使筆者很完善地介紹了當前最為流行的框架及其使用方法,很有可能等到它最終出版之時,人們已經有了更好的選擇。所以授之以魚,不如授之以漁,學習本章內容的真正目的應該是要培養讀者「快速學習新框架」的能力,這需要掌握如何找到並查閱這些框架本身提供的官方檔案,以便自行去了解這些框架的設計思路,並理解為什麼決定開放那些介面給使用者,為什麼對使用者隱藏那些實現。這就需要讀者自己具備開發框架的能力。換句話說,雖然不必重複發明輪子,但一個優秀的工程師或設計師應該瞭解輪子是如何被髮明的,這樣才能清楚在怎麼樣的輪子上構建怎麼樣的車。
總而言之,對於如今的項軟體工程師來說,在一個月內快速掌握某個新框架的能力遠比之前已經掌握了多少個框架重要得多,例如當開發團隊的管理員在面試新成員時,如果這位面試者有五年 A 框架的使用經驗,那固然是很好,但團隊中很多人都有,未必需要再多一個同型別的人才、但如果該面試者能在一個禮拜快速上手基於 Python 開發的任意一種框架,那麼這位人才的重要性就會被凸顯出來。