《pytest測試實戰》筆記:一

1. 安裝pytest及Pycharm

1.pip install pytest
2.Pycharm下載地址:https://www.jetbrains.com/pycharm/download/#section=mac

2. 第一個測試Demo

以簡單的加法運算來開啓我們的pytest學習之旅~

test_add.py
import pytest

def add(num1, num2):
    return num1 + num2

testdata_add = [(1, 2, 3)]

# 執行時會根據數據的數量執行對應條數的用例
@pytest.mark.parametrize("num1, num2, expect", testdata_add)
def test_add(num1, num2, expect):  # 接收的變量名要和parametrize的一致

    result = add(num1, num2)
    assert result == expect

2.1 運行pytest

在這裏插入圖片描述
pytest會遞歸遍歷每個目錄及其子目錄,我們可以在pytest中指定需要測試的文件名或目錄,或者先切換到需要運行的目錄。
pytest主要的命名規則(默認的測試搜索規則是可以修改的):

  • 測試文件應當命名爲test_xxx.py或者xxx_test.py
  • 測試函數、測試類方法應當命名爲test_xxx
  • 測試類應當命名爲Testxxx

2.2 控制檯信息

  • session
    pytest爲每段測試會話session做了明確的分隔,一段會話就是一次pytest的調用,它可能包括多個目錄下被執行的測試用例。
  • platform darwin – Python 3.8.2, pytest-5.4.1, py-1.8.1, pluggy-0.13.1
    platform表示運行平臺,我的電腦是Mac,顯示爲darwin。後面依次顯示爲 Python、 pytest以及 pytest包的版本。
  • rootdir
    當前起始目錄,是pytest搜索測試代碼時最常使用的目錄。
  • collected 1 item
    搜索範圍內找到一個測試條目。
  • test_add.py .
    test_add.py表示測試文件,每個文件的測試情況只佔據一行,一個點號表示一個用例已通過。
  • 1 passed in 0.01s
    表示測試通過的數量以及這段會話耗費的時間。

2.3 運行結果

  • PASSED(.)
    測試通過。
  • FAILED(F)
    測試失敗。
  • SKIPPED(s)
    測試未被執行。
  • xfail(x)
    預期測試失敗,並且確實失敗了。
  • XPASS(X)
    預期測試失敗,但實際上運行通過,不符合預期。
  • ERROR(E)
    測試用例之外的代碼觸發了異常,可能由fixture引起,也可能由hook函數引起。

3 常用的命令行選項

可以通過’pytest --help’查看所有的選項。
在這裏插入圖片描述

3.1 --collect-only

使用–collect-only可以展示在給定的配置下哪些測試用例會被執行,可以在測試運行之前,檢查選中的測試用例是否符合預期。
在這裏插入圖片描述

3.2 -k

使用-k可以指定希望運行的測試用例。如果某測試名是唯一的,或者多個測試名的前綴或後綴相同,那麼可以使用表達式快速定位。
在原本代碼的基礎上,新增一條關於減法的測試用例


def minus(num1, num2):
    return num1 - num2

testdata_minus = [(5, 2, 3)]

@pytest.mark.parametrize("num1, num2, expect", testdata_minus)
def test_minus(num1, num2, expect):

    result = minus(num1, num2)
    assert result == expect

先利用–collect-only查看一下:

pytest --collect-only

在這裏插入圖片描述
利用-k來指定有關減法的測試用例:

pytest -k "minus"

在這裏插入圖片描述
利用-k來指定有關減法和加法的測試用例:

pytest -k "add or minus"

在這裏插入圖片描述

ps:未防止歧義,將文件名由test_add.py改爲test_cal.py

3.3 -m

可以標記測試並分組,需要預先做好標記。如:給加法及減法的測試用例均添加標記爲@pytest.mark.run_cal

pytest -m run_cal

在這裏插入圖片描述
也可以使用關係連接符來指定多個標記名

pytest -m mark1 and mark2
pytest -m mark1 and not mark2
pytest -m mark1 or mark2

3.4 -x

正常情況下,pytest會運行每一個搜索到的測試用例。如果某個測試函數被斷言失敗,或者觸發來外部異常,則該測試用例的運行就會到此爲止,pytest將其標記爲失敗後會繼續運行下一個測試用例。
使用-x可以設定遇到失敗時立即停止整個會話。
增加加法測試用例的測試數據如下,第二條測試數據爲失敗:

testdata_add = [(1, 2, 3), (3, 1, 5), (3, 1, 4)]
 pytest -k "add"

在這裏插入圖片描述

pytest -x -k "add"

在這裏插入圖片描述

3.5 --maxfail=num

-x選項是一旦遇到測試失敗,就會全局停止。–maxfail可以設定pytest失敗幾次後再停止。
再次調整加法測試用例的測試數據,共存在4組失敗的數據:

testdata_add = [(1, 2, 3), (3, 1, 5), (3, 1, 4), (3, 1, 5), (3, 1, 5), (3, 1, 5), (3, 2, 5)]
 pytest --maxfail=3 -k "add"

在這裏插入圖片描述

3.6 -s、–capture=method

-s選項允許終端在測試運行時輸出某些結果,包括任何符合標準的輸出流信息。-s等價於–capture=no。正常情況下,所有的測試輸出都會被捕獲。
信息捕獲的方法還有:

  • –capture=fd:若文件描述符file descriptor爲1或2時,則會被輸出到臨時文件中
  • –capture=sys:sys.stdout/stderr將會被輸出至內存

3.7 --lf(–last-failed)

當一個或多個測試失敗時,lf能夠定位到最後一個失敗的測試用例並重新運行。

pytest -lf

在這裏插入圖片描述

3.8 --ff(–failed-first)

–ff選項與–lf選項的功能基本相同,不同之處在於–ff會運行完剩餘的測試用例。

pytest --ff

在這裏插入圖片描述

3.9 -v(–verbose)

使用-v(–verbose)選項,輸出的信息會更詳細。

pytest -v

在這裏插入圖片描述

3.10 -q(–quiet)

-q(–quiet)作用與-v(–verbose)相反,簡化輸出信息。

pytest -q

在這裏插入圖片描述

3.11 -l(–showlocals)

使用-l選項,失敗的測試用例由於被堆棧追蹤,所以局部變量及其值都會顯示出來。

pytest -l

在這裏插入圖片描述

3.12 --tb=style

–tb=stylex選項決定捕捉到失敗時輸出信息的顯示方式。

  • short:僅輸出assert的一行及系統判定內容,不顯示上下文。
pytest --tb=short

在這裏插入圖片描述

  • line:只用一行輸出顯示所有的錯誤信息。
pytest --tb=line

在這裏插入圖片描述

  • no:屏蔽全部回溯信息。
pytest --tb=no

在這裏插入圖片描述

  • long:輸出最爲詳細的回溯信息。
  • auto:默認值,如果有多個測試用例失敗,僅打印第一個和最後一個用例的回溯信息。
  • native:只輸出Python標準庫的回溯信息,不顯示額外信息。

3.13 --durations=N

–duration=N選項可以加快測試節奏,它會顯示最慢的N個階段,耗時越長越靠前。如果使用–durations=0,則會將所有階段按耗時從長到短排序後顯示。
每個測試用例大體上都包含三個階段:call、setup、teardown,call、teardown也稱爲fixture。

3.14 --version

顯示當前的pytest版本及安裝目錄。

pytest --version

3.15 -h(–help)

pytest -h

在這裏插入圖片描述
末尾顯示:shown according to specified file_or_dir or current dir if not specified,Pytes允許你在conftest.py和測試文件中自定義測試行爲,其作用域僅是某個項目,甚至只是某個項目的測試子集。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章