天天看點

利用Python架構unittest做自動化測試,學習了!

rf 的全稱是 robotframework,它是第三方的架構,使用它必須先安裝。rf 架構的優點在于對程式設計新手比較友好,支援關鍵字驅動。

rf 架構通常的适用場景是用一位有程式設計功力的自動化工程師搭建好架構,封裝好常用的關鍵字,然後由不同的功能業務部門的測試人員調用關鍵字進行自動化測試腳本的編寫。編寫人員可以對程式設計沒什麼基礎甚至零基礎,因為調用的固定功能都已經封裝好了。是以,對于程式設計新手而已,這個架構更像一個工具,我們往裡面堆砌步驟就可以完成。

利用Python架構unittest做自動化測試,學習了!

如果有需要資料的,可以打開你的微信掃一掃,好友申請寫“資料”,就能擷取學習資料,更好的學習python!

但是對于有程式設計基礎的同學來說,一昧的調用關鍵字對我們的技術沒有太大的提升,python 入門了後,我們就要拿來用了,語言本來就是工具,多用用才能更加熟練。是以,今天我想分享的架構是 python 自帶的 unittest 架構,這個架構擴充性也比較強,可以做 web 和 app 的自動化,擴充性強。

搭建環境

剛說過,unittest 架構是 python 自帶的,是以隻要你安裝了 python,在編輯器中直接調用即可,非常友善。

利用Python架構unittest做自動化測試,學習了!

架構結構

導入包後直接就能用了,再用這個架構之前我們先看看它的結構。

利用Python架構unittest做自動化測試,學習了!

我們舉一個小栗子吧,我們寫兩條測試案例:

1、我們打開百度,輸入一個詞 python,點選查詢,驗證頁面元素;

2、輸入 go,點選查詢,驗證頁面元素。

測試類繼承

我們先建立自己的測試類,建立的測試類繼承 unittest 中的 testcase 類,這樣我們就能繼承 testcase 類中的方法了。

結構分析

接着我們看到類下面有一些固定結構,這些固定結構我稱它為「瞻前顧後」,這裡我把這個詞當褒義詞來用,為什麼這麼說呢,我們一一來看。

setupclass 方法

這個方法的作用寫在是以案例運作前要做的工作,比如上面舉的例子中,所有案例運作前需要準備的工作是什麼?那就是打開浏覽器,輸入百度網址。

那我們就可以把這個前期工作放在這個方法裡面,有一點需要注意下,這個方法必須要用上 classmethod 裝飾器,不加上會報錯,至于這個裝飾器什麼作用,這裡暫時不做分析。如果你還不懂什麼是裝飾器,可以看看我之前分享過的一篇文章 python裝飾器

開始敲代碼,開始工作我做了三件事:定義一個驅動、打開一個位址、浏覽器視窗最大化。

利用Python架構unittest做自動化測試,學習了!

setup 方法

這個方法名稱看起來和上面的差不多,其實功能也是差不多,也是準備工作,它的作用是每條案例運作前做的工作。還是上面的例子,每條案例運作前我希望先清空輸入框裡面的文本,再輸入我想輸入的文本。不然當我第一次輸入 python 後,再輸入 go 時,如果不清空的話,第二次輸入框的文本就是 pythongo 了。

開始敲代碼,例子中這一步比較簡單了,用 clear 方法清空輸入框,一行代碼搞定。

利用Python架構unittest做自動化測試,學習了!

測試案例

準備工作做好後,我們就可以大幹一場寫測試案例了。一個方法就是一條案例,方法名稱需要注意下,一定要以 test 開頭。unittest 架構運作時會去方法裡識别 test 開頭的方法并運作。

例子中兩條案例比較簡單,通過 id 去定位輸入框然後輸入文本,再通過 id 定位查詢按鈕并點選。

利用Python架構unittest做自動化測試,學習了!

利用python架構unittest做自動化測試,學習了!

案例中我用了 assertin 方法來斷言頁面元素,校驗文字「百度為您找到相關結果約」是否存在目前頁面的源碼中,page_source 是來擷取目前頁面源碼的。

這樣,例子中的兩條案例就完成了。

teardown 方法

既然有案例開始前做準備工作的方法,對應也有每條測試案例執行結束後的方法,就是 teardown 方法。當然,我的例子中沒用上這個方法,這個方法就不用寫了。是以,這些方法根據自己的需求調用就好,屬于架構封裝好的一部分。

teardownclass 方法

teardownclass 方法和上面的 setupclass 方法相呼應,它是在所有案例執行結束後做的工作,例子中的工作就是退出浏覽器。當然,這個和 setupclass 方法也是一樣,必須要調用 classmethod 裝飾器才能使用。

利用Python架構unittest做自動化測試,學習了!

最後,我們運作所有案例就行。

利用Python架構unittest做自動化測試,學習了!

運作效果圖如下:

利用Python架構unittest做自動化測試,學習了!

運作特定案例

還有一種情景,假如我寫了兩套環境的案例,我現在隻想運作其中一個環境的案例,比如例子中,我隻想運作 test1 案例,這是我們需要建立一個測試套件 suite,把需要執行的案例放進套件,用 texttestrunner 運作套件裡的案例。

利用Python架構unittest做自動化測試,學習了!

運作時我們發現隻運作 test1 案例。

當然我們還有一種方法,就是把不想運作運作的方法前加上 @unittest.skip(),這時這條案例會無條件的跳過,不執行。skip 也可以加入判斷條件 @unittest.skipif(reason),reason 條件為真時,這條案例跳過執行。

測試報告

上面案例執行完成後,我們發現報告資訊太過簡單。

利用Python架構unittest做自動化測試,學習了!

能生成生動一點的報告嗎?有的,我們需要下載下傳一個 htmltestrunner 的 py 檔案,我用的 python3,是以我下載下傳是 htmltestrunner 對應的版本是和 python 相關的,需要的在我公衆号裡 回複「架構」擷取。

下載下傳後放在 python 安裝根目錄下,在編輯器中導入。

import htmltestrunner

然後調用 htmltestrunner 方法生成報告,報告沒有指定儲存目錄的話就預設儲存在代碼的同一路徑下。

利用Python架構unittest做自動化測試,學習了!

這裡我把兩條案例都加到 test_suite 裡面了,我們打開報告看看。

利用Python架構unittest做自動化測試,學習了!

細心的讀者應該發現了,上面兩條案例點選查詢按鈕後,我設定了等待時間,防止頁面元素還沒有完全加載出來而導緻斷言失敗。這種加 sleep 強制等待時間的方法在實際項目中是不可取的,因為每次執行時的加載的時間可能不同,強制時間太長的話太浪費時間,太短的話又怕加載時間不夠。是以,我們得有一個智能等待的方法,這就要用到顯式等待和隐式等待的方法。

還有,當我們測試案例基本類似的時候,發現代碼差不多,比如登入功能,我們設計了好幾條案例,這時我們會用到資料驅動的思想,從 excel 檔案中讀取資料,循環執行。

上面說的兩個知識點後續會慢慢給大家分享,今天重點分享了 unittest 這個架構的基本用法,下次我們在慢慢唠。

技術行業,一定要提升技術功底,豐富自動化項目實戰經驗,這對于你未來幾年職業規劃,以及測試技術掌握的深度非常有幫助。

金九銀十面試季,跳槽季,整理面試題已經成了我多年的習慣!下面有我近幾年的收集和整理,整體是圍繞着【軟體測試】來進行整理的,主體内容包含:python自動化測試專屬視訊、python自動化詳細資料、全套面試題等知識内容。

利用Python架構unittest做自動化測試,學習了!

對于軟體測試的的朋友來說應該是最全面最完整的面試備戰倉庫,為了更好地整理每個子產品,我也參考了很多網上的優質博文和項目,力求不漏掉每一個知識點,很多朋友靠着這些内容進行複習,拿到了batj等大廠的offer,這個倉庫也已經幫助了很多的軟體測試的學習者,希望也能幫助到你!

願你我相遇,皆有所獲! 歡迎關注微信公衆号:【傷心的辣條】 免費領取一份216頁軟體測試工程師面試寶典文檔資料。以及相對應的視訊學習教程免費分享!