1. 程式人生 > >Pytest學習(七) - skip、skipif的使用

Pytest學習(七) - skip、skipif的使用

## 前言 作為一個java黨,我還是覺得pytest和testng很像,有時候真的會感覺到程式碼語言在某種程度上是相通的,那麼今天來說說這兩個知識點。 **skip**和**skipif**,見名知意,就是跳過測試唄,直白的說就是用於不想執行的程式碼,標記後,標記的程式碼不執行。 ## skip的用法 使用示例:@pytest.mark.skip(reason="不想執行的原因,執行時會輸出reason內容") ### 1、標記在函式方法上 示例程式碼如下: ```python # 標記在函式上 @pytest.mark.skip(reason="標記在函式上,被標記函式不會被執行!!") def test_case2(): print("我是測試用例2,但我不會執行") ``` 執行結果如下: ![](https://img2020.cnblogs.com/blog/718867/202011/718867-20201112210339358-1713335826.png) ### 2、標記在類中的函式方法上 示例程式碼如下: ```python class TestClass1(object): def test_case3(self): print("我是用例3") # 標記在類中的函式上 @pytest.mark.skip(reason="標記在類中的函式上,同樣也不會執行哦!") def test_case4(self): print("我是測試用例4,但我不會執行") ``` 執行結果如下: ![](https://img2020.cnblogs.com/blog/718867/202011/718867-20201112210714622-2127158281.png) ### 3、標記在類上 示例程式碼如下: ```python @pytest.mark.skip(reason="標記在類上,整個類及類中的方法都不會執行!") class TestClass2(object): def test_case5(self): print("我是用例5") ``` 執行結果如下: ![](https://img2020.cnblogs.com/blog/718867/202011/718867-20201112210856626-1630403013.png) **小結:** - @pytest.mark.skip 可以加在函式上,類上,類方法上 - 如果加在類上面,類裡面的所有測試用例都不會執行 ### 4、在測試用例執行期間強制跳過 以簡單的for迴圈為例,執行到第三個的時候,跳出,示例程式碼如下: ```python def test_case6(): for i in range(50): print(f"輸出第 【{i}】個數") if i == 3: pytest.skip("我跑不動了,不輸出了") ``` 執行結果如下: ![](https://img2020.cnblogs.com/blog/718867/202011/718867-20201112215152272-1795231173.png) **總結:** 可以理解為這時的跳過測試就和迴圈的break一樣,這時不再用註解的形式了。 ### 5、在模組級別跳過測試 語法:pytest.skip(msg="",allow_module_level=False),當 allow_module_level=True 時,可以設定在模組級別跳過整個模組,示例程式碼如下: ```python # -*- coding: utf-8 -*- # @Time : 2020/11/12 20:30 # @Author : longrong.lang # @FileName: test_skip.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang import sys import pytest if sys.platform.startswith("win"): pytest.skip("當 allow_module_level=True 時,可以設定在模組級別跳過整個模組",allow_module_level=True) @pytest.fixture(autouse=True) def dataTable(): print("資料初始化成功") def test_case1(): print("我是用例1") ``` 執行結果如下: ![](https://img2020.cnblogs.com/blog/718867/202011/718867-20201113201537646-2064520702.png) ### 6、希望有條件地跳過某些測試用例 語法:@pytest.mark.skipif(條件表示式, reason="") 示例程式碼如下: ```python @pytest.mark.skip(sys.platform.startswith("win"),reason="windows系統不執行哦") def test_case7(): print("我是用例6") ``` 執行結果如下: ![](https://img2020.cnblogs.com/blog/718867/202011/718867-20201113202256294-1100435068.png) ### 7、跳過標記的使用 **好處** - 方便用例的統一管理維護 - 可在不同模組標記 需要將 pytest.mark.skip 和 pytest.mark.skipif 賦值給一個標記變數,用變數(註解變數)進行標記,示例程式碼如下: ```python skip = pytest.mark.skip("skip的標記變數,標記的函式或類不執行") skipif = pytest.mark.skipif("skipif的標記變數,標記的函式或類不執行") @skip def test_case8(): print("測試用例8") class TestClass(object): @skipif def test_case9(self): print("測試用例9") ``` 執行結果如下: ![](https://img2020.cnblogs.com/blog/718867/202011/718867-20201113204605830-796998149.png) ### 8、缺少某些匯入跳過的測試 語法:pytest.importorskip( modname: str, minversion: Optional[str] = None, reason: Optional[str] = None ) **引數列表** - modname:模組名 - minversion:版本號 - reasone:跳過原因,預設不給也行 示例程式碼如下: ```python importskip = pytest.importorskip("importskip", minversion="0.3",reason="此處是匯入失敗,跳過的測試") @importskip def test_10(): print('測試用例10') ``` 執行結果如下: ![](https://img2020.cnblogs.com/blog/718867/202011/718867-20201113210114293-1682473734.png) 系列參考文章: https://www.cnblogs.com/poloyy/category/1690