fixtures不太好翻譯,可看作是夾心餅干最外層的兩片餅干。通常用setup/teardown來表示。它主要用來包裹測試用例,為什么需要這樣的餅干呢?我們以web自動化測試為例,例如,要測試的某系統需要登錄/退出。那么每一條用例執行前都需要登錄,執行完又都需要退出,這樣每條用例重復編寫登錄和退出就很麻煩,當然,你也可以把登錄和退出封裝為方法調用,但是每個用例中都寫調用也很麻煩。有了fixtures就變得簡便很多。
測試函數
創建test_fixtures.py文件
#coding=utf-8
import pytest # 功能函數
def multiply(a,b): return a * b # =====fixtures========
def setup_module(module): print ("\n") print ("setup_module================>") def teardown_module(module): print ("teardown_module=============>") def setup_function(function): print ("setup_function------>") def teardown_function(function): print ("teardown_function--->") # =====測試用例========
def test_numbers_3_4(): print 'test_numbers_3_4'
assert multiply(3,4) == 12
def test_strings_a_3(): print 'test_strings_a_3'
assert multiply('a',3) == 'aaa'
if __name__ == '__main__': pytest.main("-s test_fixtures.py")
運行結果:
============================= test session starts ============================= platform win32 -- Python 2.7.10 -- py-1.4.30 -- pytest-2.7.2 rootdir: D:\pyse\pytest, inifile: plugins: html collected 2 items test_fixtures.py setup_module================> setup_function------> test_numbers_3_4 .teardown_function---> setup_function------> test_strings_a_3 .teardown_function---> teardown_module=============>
========================== 2 passed in 0.01 seconds ===========================
通過執行結果,相信就很容易弄清楚它們的執行順序。
setup_module/teardown_module 在所有測試用例執行之后和之后執行。
setup_function/teardown_function 在每個測試用例之后和之后執行。
測試類
#coding=utf-8
import pytest # 功能函數
def multiply(a,b): return a * b class TestUM: # =====fixtures========
def setup(self): print ("setup----->") def teardown(self): print ("teardown-->") def setup_class(cls): print ("\n") print ("setup_class=========>") def teardown_class(cls): print ("teardown_class=========>") def setup_method(self, method): print ("setup_method----->>") def teardown_method(self, method): print ("teardown_method-->>") # =====測試用例========
def test_numbers_5_6(self): print 'test_numbers_5_6'
assert multiply(5,6) == 30
def test_strings_b_2(self): print 'test_strings_b_2'
assert multiply('b',2) == 'bb'
if __name__ == '__main__': pytest.main("-s test_fixtures.py")
運行結果:
============================= test session starts ============================= platform win32 -- Python 2.7.10 -- py-1.4.30 -- pytest-2.7.2 rootdir: D:\pyse\pytest, inifile: plugins: html collected 2 items test_fixtures.py setup_class=========> setup_method----->> setup-----> test_numbers_5_6 .teardown--> teardown_method-->> setup_method----->> setup-----> test_strings_b_2 .teardown--> teardown_method-->> teardown_class=========>
========================== 2 passed in 0.00 seconds ===========================
setup_class/teardown_class 在當前測試類的開始與結束執行。
setup/treadown 在每個測試方法開始與結束執行。
setup_method/teardown_method 在每個測試方法開始與結束執行,與setup/treadown級別相同。