pytest的一些實用插件實踐

前言

關于pytest就不多做介紹了,目前很多公司都在用的框架,選用該框架的理由很多啦,比如:

  • 容易上手,入門簡單,文檔豐富,支持的第三方插件很多,文檔中示例也很詳細
  • 支持運行node/unittest編寫的測試腳本
  • 支持失敗重跑
  • 支持參數(shù)化
  • 執(zhí)行指定執(zhí)行某些case
    等等

這次主要記錄一些比較實用的插件實踐操作。
關于pytest的第三方插件,截止寫下這些文字時,一共579個,詳情可見plugins。

plugins.png

實用的插件介紹

1.pytest安裝

pip install -U pytest

個人比較建議安裝3.8.0版本。

2.多重校驗 pytest-assume

簡單的校驗assert,雖然可以寫多個assert

    def test_add1(self):
        assert add(2,3)==5
        assert add(1,3)==3
        assert add(2,5)==7

由于第二個斷言失敗,那么下面的斷言就不會執(zhí)行。
所以如果需要多個斷言,都執(zhí)行就需要第三方插件 pytest-assume
安裝命令:

pip install pytest-assume

示例:

    def test_add2(self):
        pytest.assume(add(1,2)==3)
        pytest.assume(add(1,4)==3)
        pytest.assume(add(2,2)==4)

這邊即使第二個斷言失敗了,第三個斷言還是會繼續(xù)執(zhí)行。

3.設定執(zhí)行順序 pytest-ordering

對于一些上下文依賴的,有時候可能需要設定一些特定執(zhí)行順序,pytest的ordering插件,就很好的解決了這個問題
安裝命令

pip  install  pytest-ordering

示例腳本如下:

def test_order1():
    print ("first test")
    assert True

def test_order2():
    print ("second test")
    assert True

沒有加上ordering,執(zhí)行順序是 test_order1----test_order2,如圖:


before.png

加上順序之后

@pytest.mark.run(order=2)
def test_order1():
    print ("first test")
    assert True
@pytest.mark.run(order=1)
def test_order2():
    print ("second test")
    assert True

結(jié)果如下:


after.png

對比可以看出,執(zhí)行順序發(fā)生了變化

4.失敗重跑 pytest-rerunfailures

失敗用例重跑,個人覺得這個是非常實用的插件。
舉個例子:
在做UI自動化,如selenuim或者appium時,遇到某些元素未能及時顯示,導致點擊失敗,如果加上重跑,那么將有效提高報告的準確性。
安裝命令:

pip install pytest-rerunfailures 

示例腳本

class TestRerun():

    @pytest.mark.run(order=2)
    @pytest.mark.flaky(reruns=5)
    def test_random(self):
        print(1)
        pytest.assume((random.randint(0,4)+3)==5)

    @pytest.mark.run(order=3)
    def test_random2(self):
        '''
        不加mark 命令行中
        pytest -sq demo_rerun.py --reruns 5
        :return:
        '''
        print(2)
        pytest.assume((random.randint(0,4)+3)==5)

    @pytest.mark.run(order=1)
    @pytest.mark.flaky(reruns=6, reruns_delay=2)
    def test_example(self):
        print(3)
        assert random.choice([True, False])

詳細的可以參考Github
執(zhí)行命令:

pytest -sq demo_rerun.py --reruns 5
pytest -sq demo_rerun.py --reruns 5  --reruns-delay 1

二者的區(qū)別是,下面在每次重跑之前會等待 1 s
同時也可以在腳本中指定定義重跑的次數(shù),這個時候在運行的時候,就無需加上 --reruns 這個參數(shù)

@pytest.mark.flaky(reruns=6, reruns_delay=2)
    def test_example(self):
        print(3)
        assert random.choice([True, False])
result.png

5.顯示進度條 pytest-sugar

個人覺得功能上這個插件,并沒有什么作用,可能更大的作用是心理上的,在調(diào)試的時候,可以顯示執(zhí)行的進度。
安裝命令

pip install pytest-sugar

運行的時候無需其他的參數(shù),會自動顯示整體的進度


sugar.png

5.覆蓋率 pytest-cov

單元測試過程中,有一個很重要的指標:行覆蓋率
pytest-cov 這個插件就很好顯示覆蓋率
安裝命令:

pip install pytest-cov

執(zhí)行命令

pytest --cov=../../xpinyin  demo_cov.py

其中--cov 后面帶上需要檢查覆蓋率的路徑
結(jié)果為:


cov.png

以上所有實踐demo可以參考github

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容