Python實戰之unittest使用詳解

來源:互聯網
上載者:User

標籤:python   unittest   

一 unittest是什嗎?
unittest是python內建的單元測試架構,具備編寫用例、組織用例、執行用例、輸出報告等自動化架構的條件。使用unittest前需要瞭解該架構的五個概念:即test case,test suite,testLoader,test runner,test fixture。
test case  :一個完整的測試單元,執行該測試單元可以完成對某一個問題的驗證,完整體現在:               測試前環境準備(setUp),執行測試代碼(run),以及測試後環境還原(tearDown);test suite  :多個測試案例的集合,測試套件或測試計劃;testLoader  :載入TestCase到TestSuite中的,其中loadTestsFrom__()方法用於尋找TestCase,               並建立它們的執行個體,然後添加到TestSuite中,返回TestSuite執行個體;test runner :執行測試案例,並將測試結果儲存到TextTestResult執行個體中,包括運行了多少測試案例,               成功了多少,失敗了多少等資訊;test fixture:一個測試案例的初始化準備及環境還原,主要是setUp() 和 setDown()方法;


二 unitest的工作原理
通過unittest類調用分析,可將架構的工作流程概況如下:
編寫TestCase,由TestLoader載入TestCase到TestSuite,然後由TextTestRunner來運行TestSuite,最後將啟動並執行結果儲存在TextTestResult中。
三 unittest實戰舉例
瞭解了unittest架構的五大概念和工作流程後,接下來舉例如何使用該架構對模組進行單元測試。
3.1 待測模組myfunc
myfunc包含三個函數:isprime(),add(),divide(),如下:


3.2 unitest編寫測試案例
使用unittest對myfunc進行單元測試,首先需要匯入unitest架構和待測模組myfunc,定義的測試案例方法類需要繼承unittest.TestCase,且測試案例方法是以test開頭作為標識,用例的執行結果以assetxxx斷言結果決定,如果斷言返回為false,將拋出assetError異常。測試案例代碼如下:

一些常用的斷言方法如下,更多斷言方法請查看unittest內建文檔:

從上面的設計的測試案例執行結果及對自動化測試的要求,需要考慮以下4個問題,及給出unitest架構中的解決方案。
3.3 架構如何解決自動化需求的4個問題
3.3.1 問題1: 如何控制用例執行順序
在unittest中,用例是以test開頭的方法定義的,預設執行順序是根據用例名稱升序進行,如上面的用例,實際執行順序為:test_add-->test_divide-->test_is_prime,而不是用例定義的先後順序。在unittest中解決用例執行順序的問題是使用TestSuite,代碼如下:

3.3.2 問題2:如何讓多個用例共用setup、teardown
unittest的setup、teardown會在每個用例執行前後執行一次,如上面測試案例類中有3個測試案例,那麼每個用例執行前會執行setup,執行後會執行teardown,即setup、teardown總共會調用三次,但考慮實際自動化測試情境,多個用例只需執行一次setup,全部用例執行完成後,執行一次teardown,針對該種情境,unittest的處理方法是使用setupclass、teardownclass,注意@classmethod的使用,如下:

3.3.3 問題3:如何跳過用例
在自動化測試中,經常會遇到挑選用例的情況,在unittest中的解決方案是使用skip裝飾器,其中skip裝飾器主要有3種:unittest.skip(reason)、unittest.skipIf(condition,reason)、unittest.skipUnless(condition,reason),即在滿足condition條件下跳過該用例,reason用於描述跳過的原因,執行個體代碼如下:

3.3.4  問題4:如何產生html格式的測試報告
Unittest中預設產生的報告格式為txt,如果想產生html格式的報告,可以使用HtmlTestRunner模組,安裝後匯入該模組,使用HTMLTestRunner代替預設的TextTestRunner()執行測試案例即可。執行個體代碼如下:


其他資源:

關於python unittest單元架構的視頻講解,請參看:http://i.youku.com/weiworld521 第 23 節。


Python實戰之unittest使用詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.