nosetest

  • Offical site
  • nose继承自unittest,且比unittest更容易使用。

  • 由於nose是自動收集測試用例的,只有nose執行的測試目錄下的原始程式碼檔、包名、子目錄名跟規則運算式匹配成功後,才能被收集。而且代碼是樹級層次顯示的話,nose會逐級向下查找子目錄下的匹配的測試用例。

    • 配的規則運算式預設值為:((?:^|[\\b_\\.-])[Tt]est.所以最好是以Test開頭,或者test開頭。當然也可以修改默認的匹配的規則運算式。
    • 因此建議為project單獨建一個test package,裡面按專案模組分子包,最後以及為 “test_”開頭的測試用例原始檔案。
  • 簡單的測試

    • 把檔案保存到一個目錄下,然後在該目錄下在命令列裡執行nosetests就可以運行測試了。
=======================
#### file: test.py ####
=======================
def Testfunc():
    a = 1
    b = 2
    assert a == b
  • 模組的setUp和tearDown
    • nose在檔中如果找到函數setup, setup_module, setUp 或者setUpModule等,那麼會在該模組的所有測試執行之前執行該函數。
    • 如果找到函數 teardown,tearDown, teardown_module或者 tearDownModule 等,那麼會在該模組所有的測試執行完之後執行該函數。
    • 對於以下的的代碼,nose實際的執行過程是這樣的:setUp()->Testfunc1()->Testfunc2()->tearDown()
def setUp():
    print "function setup"

def tearDown():
    print "function teardown"

def Testfunc1():
    print "Testfunc1"
    assert True

def Testfunc2():
    print "Testfunc2"
    assert True
  • 測試函數的setUp和tearDown
    • 可能會想給每個函數單獨指定類似的setUp和tearDown函數,可以如下處理
    • nose對代碼的具體執行順序如下: setUp()->func1Start()->Testfunc1()->func1End()->func2Start()->Testfunc2()->func2End()->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

# 指定方法1
Testfunc1.setup = func1Start
Testfunc1.tearDown = func1End
Testfunc2.setup = func2Start
Testfunc2.tearDown = func2End

# 指定方法2
@with_setup(func1Start, func1End)
def Testfunc1():
     print "Testfunc1"
     assert True

@with_setup(func2Start, func2End)
def Testfunc2():
     print "Testfunc2"
     assert True

測試類的的setUp和tearDown

  • 這裡nose會對每個類的測試方法單獨創建類的實例,並且有單獨的setUp和tearDown。nose測試的順序如下
    • setUp()->Testfunc1()->TearDown()->setUp()->Testfunc2()->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

package的setUp和tearDown

  • package的setUp和tearDown方法需要放在init.py這個檔中,整個package只執行一次setUp和一次tearDown。

參考資料

results matching ""

    No results matching ""