轉自http://blog.csdn.net/zbyufei/article/details/6574213
一、安裝nose
先用easy_install 安裝 nose,easy_install是一個很好的python工具,可以方便安裝很多的python程式。可以去http://pypi.python.org/pypi/setuptools瞭解一下easy_install。如果懶得去看的,可以直接從這裡下載安裝檔案進行安裝就可以了,注意,這個連結是windows
32位的安裝包。
安裝完easy_install後,在相應版本的Scripts目錄下(例如C:/Python26/Scripts)會有一個easy_install.exe程式,通過這個就可以安裝了。在命令列下轉到Python的Scripts目錄下,執行以下的命令進行安裝:
C:/Python26/Scripts/easy_install nose
上面的 C:/Python26/Scripts 需要根據您的Python的安裝路徑進行修改。 安完畢後,在C:/Python26/Scripts下會有一個nosetests.exe檔案,通過這個exe程式就可以在命令列下運行測試了。最好是把C:/Python26/Scripts加入環境變數,這樣在其它目錄中可以直接引用nosetests.exe。
二、運行測試
在命令列下,直接運行nosetests(注意要把nosetests.exe所在的目錄加入到環境變數Path裡面),它就會自動尋找目前的目錄下包含"Test"字串的目錄和檔案進行測試
這樣我們可以把所有測試case放在一起,然後讓測試自己去運行,我們最後看結果就可以了。我們可以指定具體如何輸出結果,也可以指定如何搜尋檔案和檔案夾,還可以把測試結果輸入到指定的檔案。
三、編寫測試
a)簡單的測試
=======================#### file: test.py ####======================= def Testfunc(): a = 1 b = 2 assert a == b
把上面的檔案儲存到一個目錄下,然後在該目錄下在命令列裡執行nosetests就可以運行測試了。
b)模組的setUp和tearDown
def setUp(): print "function setup"def tearDown(): print "function teardown" def Testfunc1(): print "Testfunc1" assert Truedef Testfunc2(): print "Testfunc2" assert True
nose在檔案中如果找到函數setup, setup_module, setUp 或者setUpModule等,那麼會在該模組的所有測試執行之前執行該函數。如果找到函數 teardown,tearDown, teardown_module或者 tearDownModule 等,那麼會在該模組所有的測試執行完之後執行該函數。
對於上面的代碼,nose實際的執行過程是這樣的:
setUp()->Testfunc1()->Testfunc2()->tearDown()
c)測試函數的setUp和tearDown
可能會想給每個函數單獨指定類似的setUp和tearDown函數,可以如下處理:
def setUp(): print "function setup" def tearDown(): print "function teardown" def func1Start(): print "func1 start" def func1End(): print "func1 end" def func2Start(): print "func2 start" def func2End(): print "func2 end" def Testfunc1(): print "Testfunc1" assert True def Testfunc2(): print "Testfunc2" assert True Testfunc1.setup = func1Start Testfunc1.tearDown = func1End Testfunc2.setup = func2Start Testfunc2.tearDown = func2End
注意最後面的四行,分別指定了Testfunc1和Testfun2的setup和teardown函數。
nose對上面代碼的具體執行順序如下:
setUp()->func1Start()->Testfunc1()->func1End()->func2Start()->Testfunc2()->func2End()->tearDown()
d)測試類別的的setUp和tearDown
看如下的代碼:
class TestClass(): arr1 = 2 arr2 = 2 def setUp(self): self.arr1 = 1 self.arr2 = 3 print "MyTestClass setup" def tearDown(self): print "MyTestClass teardown" def Testfunc1(self): assert self.arr1 == self.arr2 def Testfunc2(self): assert self.arr1 == 2
這裡nose會對每個類的測試方法單獨建立類的執行個體,並且有單獨的setUp和tearDown。nose對上面測試的順序如下:
setUp()->Testfunc1()->TearDown()->setUp()->Testfunc2()->TearDown()
e)package的setUp和tearDown
package的setUp和tearDown方法需要放在__init__.py這個檔案中,整個package只執行一次setUp和一次tearDown。
四、nosetest常用的命令列參數
這裡只重點介紹幾個常用的,其它的參數可以通過nosetests -h進行查看。
a) -w ,指定一個目錄運行測試。目錄可以是相對路徑或絕對路徑。
例如: nosetest -w c:/pythonTests/Test1,只運行目錄c:/pythonTests/Test1下的測試。可以指定多個目錄,例如: nosetest -w c:/pythonTests/Test1 -w c:/pythonTests/Test2。
b)-s,不捕獲輸出,會讓你的程式裡面的一些命令列上的輸出顯示出來。例如print所輸出的內容。
c)-v,查看nose的運行資訊和調試資訊。例如會給出當前正在運行哪個測試。