以前看到fixture函數能夠經過添加,params參數來實現參數化,後續看到了悠悠 的博客,能夠經過**@pytest.mark.parametrize**來實現,如今作一個總結 ##實現方式一html
經過params函數實現fixture的參數化函數
import pytest @pytest.fixture(params=[1,2,3]) def fixture_param(request): request.param print("\033[31;1m我是fixture_param,這是第%s次打印\033[0m"%request.param) return request.param def test_fixture_param(fixture_param): print("我是test_fixture_param函數") # print("我fixture_param如今是:%s"%fixture_param) if __name__ == '__main__': pytest.main(["-s",'test_fixture_params.py'])
###結果 輸出的結果是這樣的 你們都知道,使用fixture函數有兩種方法測試
第一種是:直接將fixture函數的名字當作參數傳入url
另外一種是:使用裝飾器@pytest.mark.usefixtures("fixture函數名") 因爲這種不能同過parametrize來傳參,這裏不作贅述.net
##實現方法二3d
@pytest.fixture(params=[1,2,3]) def fixture_param(request): request.param print("\033[31;1m我是fixture_param,這是第%s次打印\033[0m"%request.param) return request.param @pytest.mark.parametrize("fixture_param",["a","b"],indirect=True) @pytest.mark.parametrize("a,b",[(1,6),(2,7),(3,8),(4,9)]) def test_fixture_param_and_parametrize(a,b,fixture_param): print("我是測試函數test_fixture_param_and_parametrize,參數a是%s,b是%s"%(a,b)) # print("我fixture_param如今是:%s"%fixture_param) if __name__ == '__main__': pytest.main(["-s",'test_fixture_params.py'])
注意:這個參數indirect=True,必定不能少,要不就會直接把 fixture_param當成測試函數的一個參數來用,加上indirect=True這個參數,纔會在fixture的函數中查找htm
###結果 結果是這樣子的,從圖中咱們能夠就看到,fixture中的params參數在這個test_fixture_param_and_parametrize函數中被覆蓋了,並且不影響它在別的函數中的使用blog
剛剛,還想到了裝飾器執行順序的問題,不顧好像對於參數化測試沒多大影響,反正執行結果都是 ?*?的都執行到了 可能,在功能開發過程當中,須要用到這個順序開發
##執行順序 ###fixture的執行順序 上圖就行了 調整一下上下和左右順序 以上是執行結果
能夠看出越接近函數名的裝飾器或者參數,越早執行,好了,姑且這樣子,反正我懂了
###parametrize執行順序 上圖就行了
上圖能夠看出,越遠的裝飾器,越早遍歷完*,能夠看作下圖
加上參數化fixture也是同樣