Pytest跳过执行之@pytest.mark.skip()详解大全
?
一、skip介紹及運(yùn)用
? ? ? 在我們自動(dòng)化測(cè)試過程中,經(jīng)常會(huì)遇到功能阻塞、功能未實(shí)現(xiàn)、環(huán)境等一系列外部因素問題導(dǎo)致的一些用例執(zhí)行不了,這時(shí)我們就可以用到跳過skip用例,如果我們注釋掉或刪除掉,后面還要進(jìn)行恢復(fù)操作。
1、skip跳過成功,標(biāo)識(shí)為s??============================= 2 skipped in 0.04s ==============================
2、pytest.main(['-rs','test01.py']) 用-rs執(zhí)行,跳過原因才會(huì)顯示SKIPPED [1] test01.py:415: 跳過Test類,會(huì)跳過類中所有方法
3、skip跳過,無條件和原因@pytest.mark.skipif()
4、skip跳過,無需滿足條件true、有跳過原因@pytest.mark.skipif(reason='無條件,只有跳過原因')
5、skip跳過,需滿足條件true、且有跳過原因@pytest.mark.skipif(條件1==1,reason='跳過原因')
6、skip賦值變量,多處調(diào)用myskip=pytest.mark.skipif(1==1,reason='skip賦值給變量,可多處調(diào)用')
然后@myskip使用
二、跳過測(cè)試類
@pytest.mark.skip()和@pytest.mark.skipif()兩個(gè)標(biāo)簽,用他們裝飾測(cè)試類
1、被標(biāo)記的類中所有方法測(cè)試用例都會(huì)被跳過
2、被標(biāo)記的類,當(dāng)條件為ture時(shí),會(huì)被跳過,否則不跳過
#skip跳過類import pytest,sys @pytest.mark.skip(reason='跳過Test類,會(huì)跳過類中所有方法') class Test(object):def test_one(self):assert 1==1def test_two(self):print('test_02')assert 1==2 if __name__=='__main__':pytest.main(['-rs','test01.py'])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py ============================= test session starts ============================= platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0 rootdir: C:\Users\wangli\PycharmProjects\Test\test plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0 collected 2 itemstest01.py ss [100%]=========================== short test summary info =========================== SKIPPED [2] test01.py: 跳過Test類,會(huì)跳過類中所有方法 ============================= 2 skipped in 0.07s ==============================Process finished with exit code 0#skip滿足條件,skip跳過類 import pytest,sys @pytest.mark.skipif(1==1,reason='跳過Test類,會(huì)跳過類中所有方法') class Test(object):def test_one(self):assert 1==1def test_two(self):print('test_02')assert 1==2 if __name__=='__main__':pytest.main(['-rs','test01.py'])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py ============================= test session starts ============================= platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0 rootdir: C:\Users\wangli\PycharmProjects\Test\test plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0 collected 2 itemstest01.py ss [100%]=========================== short test summary info =========================== SKIPPED [1] test01.py:415: 跳過Test類,會(huì)跳過類中所有方法 SKIPPED [1] test01.py:417: 跳過Test類,會(huì)跳過類中所有方法 ============================= 2 skipped in 0.04s ==============================Process finished with exit code 0三、跳過方法或測(cè)試用例
我們想要某個(gè)方法或跳過某條用例,在方法上加以下3種都可以
@pytest.mark.skip() #1、跳過方法或用例,未備注原因
@pytest.mark.skip(reason='跳過一個(gè)方法或一個(gè)測(cè)試用例') #2、跳過方法或用例,備注了原因
@pytest.mark.skipif(1==1,reason='跳過一個(gè)方法或一個(gè)測(cè)試用例')? ?#3、當(dāng)條件滿足,跳過方法或用例,備注了原因
1、跳過方法或用例,未備注原因 import pytest,sys class Test(object):@pytest.mark.skip()def test_one(self):assert 1==2def test_two(self):print('test_02')assert 1==1 if __name__=='__main__':pytest.main(['-rs','test01.py'])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py ============================= test session starts ============================= platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0 rootdir: C:\Users\wangli\PycharmProjects\Test\test plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0 collected 2 itemstest01.py s. [100%]=========================== short test summary info =========================== SKIPPED [1] test01.py:414: unconditional skip ======================== 1 passed, 1 skipped in 0.04s =========================Process finished with exit code 02、跳過方法或用例,備注了原因 import pytest,sys class Test(object):@pytest.mark.skip(reason='跳過一個(gè)方法或一個(gè)測(cè)試用例')def test_one(self):assert 1==2def test_two(self):print('test_02')assert 1==1 if __name__=='__main__':pytest.main(['-rs','test01.py'])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py ============================= test session starts ============================= platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0 rootdir: C:\Users\wangli\PycharmProjects\Test\test plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0 collected 2 itemstest01.py s. [100%]=========================== short test summary info =========================== SKIPPED [1] test01.py:414: 跳過一個(gè)方法或一個(gè)測(cè)試用例 ======================== 1 passed, 1 skipped in 0.05s =========================Process finished with exit code 03、當(dāng)條件滿足,跳過方法或用例,備注了原因 import pytest,sys class Test(object):@pytest.mark.skipif(1==1,reason='跳過一個(gè)方法或一個(gè)測(cè)試用例')def test_one(self):assert 1==2def test_two(self):print('test_02')assert 1==1 if __name__=='__main__':pytest.main(['-rs','test01.py'])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py ============================= test session starts ============================= platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0 rootdir: C:\Users\wangli\PycharmProjects\Test\test plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0 collected 2 itemstest01.py s. [100%]=========================== short test summary info =========================== SKIPPED [1] test01.py:414: 跳過一個(gè)方法或一個(gè)測(cè)試用例 ======================== 1 passed, 1 skipped in 0.06s =========================Process finished with exit code 0四、多個(gè)skip時(shí),滿足1個(gè)條件即跳過
我們?cè)陬惡头椒ㄉ戏謩e加了skip,類中滿足條件,方法中未滿足條件,所以生效類中skip
import pytest,sys @pytest.mark.skipif(1==1,reason='多個(gè)條件時(shí),有1個(gè)條件滿足就跳過(類)') class Test(object):@pytest.mark.skipif(1==2, reason='多個(gè)條件時(shí),有1個(gè)條件滿足就跳過(方法)')def test_one(self):assert 1==2def test_two(self):print('test_02')assert 1==1 if __name__=='__main__':pytest.main(['-rs','test01.py'])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py ============================= test session starts ============================= platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0 rootdir: C:\Users\wangli\PycharmProjects\Test\test plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0 collected 2 itemstest01.py ss [100%]=========================== short test summary info =========================== SKIPPED [1] test01.py:418: 多個(gè)條件時(shí),有1個(gè)條件滿足就跳過(類) SKIPPED [1] test01.py:415: 多個(gè)條件時(shí),有1個(gè)條件滿足就跳過(類) ============================= 2 skipped in 0.04s ==============================五、skip賦值給變量,可多出調(diào)用
無論是@pytest.mark.skip()標(biāo)簽還是@pytest.mark.skipif()標(biāo)簽,如果你想在多個(gè)測(cè)試方法上裝飾,依次寫起來很麻煩的話,你可以選擇定義個(gè)變量讓它等于標(biāo)簽,然后在裝飾的時(shí)候用該變量代替標(biāo)簽。這種方法,你還可以通過在其他模塊中導(dǎo)入的變量的方式,在其他模塊中共享標(biāo)簽;如果可以這樣的話,我們?yōu)槭裁床恍陆ㄒ粋€(gè)模塊用來存放標(biāo)簽?zāi)?#xff1f;這樣是不是又方便了許多。
賦值:myskip=pytest.mark.skipif(1==1,reason='skip賦值給變量,可多處調(diào)用')
調(diào)用:@myskip
import pytest,sys myskip=pytest.mark.skipif(1==1,reason='skip賦值給變量,可多處調(diào)用') class Test(object):@myskipdef test_one(self):assert 1==2def test_two(self):print('test_02')assert 1==1 if __name__=='__main__':pytest.main(['-rs','test01.py'])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py ============================= test session starts ============================= platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0 rootdir: C:\Users\wangli\PycharmProjects\Test\test plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0 collected 2 itemstest01.py s. [100%]=========================== short test summary info =========================== SKIPPED [1] test01.py:415: skip賦值給變量,可多處調(diào)用 ======================== 1 passed, 1 skipped in 0.07s =========================Process finished with exit code 0六、pytest.skip()方法內(nèi)跳過
除了通過使用標(biāo)簽的方式,還可以在測(cè)試用例中調(diào)用pytest.skip()方法來實(shí)現(xiàn)跳過,可以選擇傳入msg參數(shù)來說明跳過原因;如果想要通過判斷是否跳過,可以寫在if判斷里(_)
import pytest,sys class Test(object):def test_one(self):pytest.skip(msg='跳過')assert 1==2def test_two(self):print('test_02')assert 1==1 if __name__=='__main__':pytest.main(['-rs','test01.py'])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py ============================= test session starts ============================= platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0 rootdir: C:\Users\wangli\PycharmProjects\Test\test plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0 collected 2 itemstest01.py s. [100%]=========================== short test summary info =========================== SKIPPED [1] c:\users\wangli\pycharmprojects\test\test\test01.py:416: 跳過 ======================== 1 passed, 1 skipped in 0.04s =========================Process finished with exit code 0?
?
總結(jié)
以上是生活随笔為你收集整理的Pytest跳过执行之@pytest.mark.skip()详解大全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python Pytest装饰器@pyt
- 下一篇: android蓝牙设置名称流程,Andr