Pytest學習(七) - skip、skipif的使用
阿新 • • 發佈:2020-11-14
## 前言
作為一個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