來自APP Android端自動化測試初學(xué)者的筆記,寫的不對的地方大家多多指教哦殉挽。
在我們自動化測試過程中植影,經(jīng)常會遇到功能阻塞裳擎、功能未實現(xiàn)、環(huán)境等一系列外部因素問題導(dǎo)致的一些用例執(zhí)行不了思币,這時我們就可以用到跳過skip用例鹿响,如果我們注釋掉或刪除掉,后面還要進行恢復(fù)操作谷饿。
一惶我、跳過測試類
該方法用于需要跳過的測試類,在測試類前面添加裝飾器:@pytest.mark.skip()各墨。
1.skip():被標記的類中所有方法測試用例都會被跳過
import pytest
@pytest.mark.skip()
class TestPhoneLogin:
def test_error_phone_format(self):
assert 1 == 1
def test_error_phone_longer(self):
assert 1 == 1
def test_error_phone_shorter(self):
assert 1 == 1
def test_error_write_verification_code(self):
assert 1 == 1
執(zhí)行結(jié)果如下圖所示:
2.skip(reason=''):被標記的測試類在執(zhí)行過程中會直接跳過,結(jié)果會顯示reason启涯。
import pytest
@pytest.mark.skip(reason='該類不需要執(zhí)行測試')
class TestPhoneLogin:
def test_error_phone_format(self):
assert 1 == 1
def test_error_phone_longer(self):
assert 1 == 1
def test_error_phone_shorter(self):
assert 1 == 1
def test_error_write_verification_code(self):
assert 1 == 1
在執(zhí)行時使用”pytest -v -rs“贬堵,結(jié)果才會顯示reason。若不添加“-rs“结洼,則只顯示跳過的數(shù)量(同1)黎做,不顯示reason。
3.skipif(條件, reason=''):被標記的測試類在滿足條件的情況下會跳過松忍,不滿足條件的情況下會執(zhí)行測試類中的測試函數(shù)蒸殿。
a.滿足條件:跳過測試類中的所有測試用例。
import pytest
@pytest.mark.skipif(1 == 1, reason='該類不需要執(zhí)行測試')
class TestPhoneLogin:
def test_error_phone_format(self):
assert 1 == 1
......
b.不滿足條件:執(zhí)行測試類中的所有測試用例鸣峭。測試結(jié)果同2
import pytest
@pytest.mark.skipif(1 == 2, reason='該類不需要執(zhí)行測試')
class TestPhoneLogin:
def test_error_phone_format(self):
assert 1 == 1
......
二宏所、跳過測試函數(shù)
該方法用于需要跳過的測試用例,在測試用例前面添加裝飾器:@pytest.mark.skip()摊溶。
1.skip():被標記的測試用例函數(shù)在執(zhí)行過程中會直接跳過爬骤。
import pytest
class TestPhoneLogin:
@pytest.mark.skip()
def test_error_phone_format(self):
assert 1 == 1
......
結(jié)果顯示:
2.skip(reason=''):被標記的測試用例函數(shù)在執(zhí)行過程中會直接跳過,結(jié)果會顯示reason莫换,
在執(zhí)行時使用”pytest -v -rs“霞玄,結(jié)果才會顯示reason。若不添加“-rs“拉岁,則只顯示跳過的數(shù)量(同1)坷剧,不顯示reason。
import pytest
class TestPhoneLogin:
@pytest.mark.skip(reason='該類不需要執(zhí)行測試')
def test_error_phone_format(self):
assert 1 == 1
......
3.skipif():被標記的測試函數(shù)在滿足條件的情況下會跳過喊暖,不滿足條件的情況下會測試函數(shù)惫企。有條件地跳過。
a.滿足條件:跳過測試類中的所有測試用例陵叽。
import pytest
class TestPhoneLogin:
@pytest.mark.skipif(1 == 1, reason='該類不需要執(zhí)行測試')
def test_error_phone_format(self):
assert 1 == 1
......
b.不滿足條件:執(zhí)行測試類中的所有測試用例雅任。測試結(jié)果同2
import pytest
class TestPhoneLogin:
@pytest.mark.skipif(1 == 2, reason='該類不需要執(zhí)行測試')
def test_error_phone_format(self):
assert 1 == 1
......
三风范、skip賦值給變量,可多處
無論是@pytest.mark.skip()標簽還是@pytest.mark.skipif()標簽沪么,如果你想在多個測試方法上裝飾硼婿,依次寫起來很麻煩的話,你可以選擇定義個變量讓它等于標簽禽车,然后在裝飾的時候用該變量代替標簽寇漫。這種方法,你還可以通過在其他模塊中導(dǎo)入的變量的方式殉摔,在其他模塊中共享標簽州胳。
賦值:myskip=pytest.mark.skipif(1==1,reason='skip賦值給變量,可多處調(diào)用')
調(diào)用:@myskip
import pytest
my_skip = pytest.mark.skipif(1 == 1, reason=**reason='**skip賦值給變量逸月,可多處調(diào)用**'**)
class TestPhoneLogin:
@my_skip
def test_error_phone_format(self):
assert 1 == 1
......
四栓撞、Xfail-期望測試失敗
1.xfail
您可以使用xfail標記來指示您期望測試失敗。一個常見的用例是當你發(fā)現(xiàn)在你的軟件中的錯誤碗硬,你編寫一個測試文檔軟件如何應(yīng)該的行為瓤湘。在修復(fù)該錯誤之前,該測試當然會失敗恩尾。為避免測試失敗弛说,請將測試標記為xfail。修復(fù)錯誤后翰意,請刪除xfail標記并進行回歸測試木人,以確保該錯誤不會再次發(fā)生。
import pytest
class TestPhoneLogin:
@pytest.mark.xfail()
def test_error_phone_format(self):
assert 1 == 2
......
擁有xfail標記仍然可以運行測試冀偶,但是一旦失敗就不會報告回溯醒第。相反,終端報告將在“預(yù)期失敗”(XFAIL)部分列出該報告进鸠。如果測試沒有失敗淘讥,它將報告為“意外通過”(XPASS)。
import pytest
class TestPhoneLogin:
@pytest.mark.xfail()
def test_error_phone_format(self):
assert 1 == 1
......
2.strict參數(shù)
將strict參數(shù)設(shè)置為True堤如,即strict=True蒲列,若在執(zhí)行測試用例時結(jié)果為xpass,那么設(shè)置該參數(shù)后會使測試記錄為失敗搀罢,原因是如果您按照xfail預(yù)期的實際失敗標記了測試蝗岖。如果它突然通過,也許有人修復(fù)了該錯誤榔至,或者說明測試沒有按照您的想法進行抵赢。
import pytest
class TestPhoneLogin:
@pytest.mark.xfail(strict=True)
def test_error_phone_format(self):
assert 1 == 1
......
雖然測試用例是正確的,但由于設(shè)置了strict參數(shù)為True,所以在最后執(zhí)行結(jié)果中仍然為Failed铅鲤。若將strict參數(shù)設(shè)置為False划提,那么最后的執(zhí)行結(jié)果為xpass。
3.reason 參數(shù)
如果需要說明期望測試失敗的理由邢享,可以添加reason參數(shù)
import pytest
class TestPhoneLogin:
@pytest.mark.xfail(reason='期望失敗的理由')
def test_error_phone_format(self):
assert 1 == 2
......
4.raises 參數(shù)
如果要更具體地說明測試失敗的原因鹏往,可以在設(shè)置raises 參數(shù)。設(shè)置該參數(shù)后骇塘,如果執(zhí)行失敗伊履,則標記為常規(guī)Fail,除非是出現(xiàn)raises設(shè)置的錯誤款违,才會顯示xfail唐瀑。
import pytest
class TestPhoneLogin:
@pytest.mark.xfail(raises=AttributeError)
def test_error_phone_format(self):
assert 1 == 2
......
若出現(xiàn)AttributeError錯誤時,才會顯示為xfail插爹,出現(xiàn)其它錯誤均顯示為Failed