1. 程式人生 > 其它 >『德不孤』Pytest框架 — 3、Pytest的基礎說明

『德不孤』Pytest框架 — 3、Pytest的基礎說明

目錄

1、Pytest引數介紹

  • -v:列印用例執行的詳細過程。
  • -q:只顯示整體測試結果。(顯示簡略過程)
  • -s:用於顯示輸出除錯資訊,包括測試函式中print()函式輸出的資訊。
  • -x--exitfirst:在第一個錯誤或測試失敗時立即退出。
    示例:在第N個用例失敗以後,結束測試執行。
    第1次失敗,就停止測試:pytest -x ./test_a.py
  • --maxfail=num:表示出現幾個用例失敗就停止執行測試。
    出現兩個失敗就終止測試:pytest --maxfail=2 ./test_a.py
  • -h:幫助。
  • -n:支援多執行緒或者分散式執行測試用例。
    例如:pytest -vs /testcase/test_login.py -n 2
    -n 2表示支援分散式執行測試用例,並且分配兩個執行緒來執行。
    或者pytest.main(['-vs','test_a.py'],'-n=2')
  • --reruns NUM:失敗用例重跑。
    示例:
    pytest.main(['-vs','test_a.py'],'--reruns=2')
    表示如果一個用例測試失敗了,再重新執行兩次,也就是一共執行三次該用例。
  • -k args:根據測試用例的名字,搜尋匹配字串,來執行匹配上的測試用例。
    例如:pytest -vs ./test_a.py -k "ao"
  • --collect-only :收集將要執行的用例,但不會執行用例。
    例如:pytest --collcet-onty
  • -r option:生成簡略的指定需求的報告。

提示:

以上功能直接帶引數執行啟動命令就能夠實現,而且還是很多其他的引數,以後在實際工作中好好總結,這裡就不一一演示了。

前提要安裝好前面提到的Pytest外掛要安裝好。

  • pytest-rerunfailures:失敗case重複執行。
  • pytest-xdist:測試用例分散式執行,也可以說是多CPU分發。

2、Pytest框架用例命名規則

Pytest可以在不同的函式中、包中發現用例,發現的規則如下:

  • 測試檔名以 test_’
    開頭,以 _test’結尾.py檔案。(必須有下劃線)
  • test_開頭的函式。(以下有沒有下劃線都可以)
  • test_開頭的方法。
  • 測試類以 Test 開頭,並且類中不能帶有init方法。

要注意的是所有的包必須要有init.py檔案,在使用PyCharm編輯器時會自動生成。

3、Pytest Exit Code說明

  • Exit Code 0:所有用例執行完畢,全部通過。
  • Exit Code 1:所有用例執行完畢,存在Failed的測試用例。
  • Exit Code 2:使用者中斷測試執行。
  • Exit Code 3:測試執行過程中發生了內部錯誤。
  • Exit Code 4:Pytest命令列使用錯誤。
  • Exit Code 5:未採集到可用測試用例檔案。

提示:

Exit Code是公共API的一部分,可以使用以下方法直接匯入和訪問:

也就是在編寫測試用例的時候,我們也可以通過列舉的方式獲取Exit Code進行判斷或者斷言。

步驟1:匯入

from pytest import ExitCode

步驟2:呼叫(都是常量)

pytest.ExitCode.OK

4、pytest.ini全域性配置檔案

通過全域性的配置檔案執行測試用例,這種方式才是在實際企業自動化中的應用方式。(前面三種方式是自己測試的時候使用)

pytest.ini檔案是Pytest的主配置檔案,可以改變Pytest的執行方式,pytest.ini檔案的名字是固定的,不能改動。

pytest.ini檔案可以改變Pytest測試框架預設的行為(查詢執行測試用例的行為),Pytest會讀取pytest.ini檔案中配置資訊,按指定的方式去執行測試用例。

pytest.ini檔案要注意:

  1. 存放位置:一般放在專案的根目錄(即當前專案的頂級資料夾下)。
  2. 編碼格式:必須是ANSI編碼格式,可以使用notpad++修改編碼格式。
  3. pytest.ini檔案中不能使用任何中文符號(也可以用,最好少用)。
  4. 配置了pytest.ini檔案後,不管是主函式模式執行用例,還是命令列模式執行用例,都會去讀取pytest.ini配置檔案中的內容。
  5. CMD命令列中執行pytest -h命令,可以檢視pytest.ini的設定選項。

下面是最基礎的pytest.ini檔案的編寫,如下:

[pytest]
# 命令列的引數,用空格分隔
addopts = -s --alluredir report
# 測試用例的路徑
testpaths = scripts
# 模組名的規則
python_files = test_parametrize.py
# 類名的規則
python_classes = Test*
# 方法名的規則
python_functions = test*

提示:用的時候把中文全部刪除掉。

5、Pytest執行測試用例的順序

Unittest測試框架,預設是以用例名的ascll大小,來決定測試用例的執行的順序。

Pytest測試框架:預設從上到下順序執行測試用例,也就是檔案中先寫的誰,誰就先執行。

我們可以通過函式裝飾器的方式,標記被測試函式來決定用例執行的順序。

需要使用pytest-ordering外掛。

安裝⽅式:pip install pytest-ordering

使用方法:

  1. 標記於被測試函式之上,@pytest.mark.run(order=x)
  2. 根據order傳入的引數來解決執行順序。
  3. order值全為正數或全為負數時,執行順序:值越小,優先順序越高。
  4. 正數和負數同時存在:正數優先順序高。

示例:

"""
1.學習目標
    掌握pytest中用例執行順序的控制
2.操作步驟
    pytest框架下用例執行的預設順序: 是按照書寫順序從上到下執行
    控制測試用例執行順序,需要安裝pytest-ordering庫(外掛)
        pip install pytest-ordering

    控制用例執行順序方法:
        在測試用例前新增一個裝飾
        @pytest.mark.run(order=數字)

    執行順序問題:order=數字
        0 > 較小的正數 > 較大正數 > 不使用order > 較小負數 > 較大負數

3.需求
"""
# 1.匯入pytest
import pytest


# 2.編寫測試用例
@pytest.mark.run(order=2)
def test_login():
    """登入用例"""
    print("登入步驟")
    assert "abcd" in "abcdefg"

@pytest.mark.run(order=1)
def test_register():
    """註冊用例"""
    print("註冊步驟")
    assert True

@pytest.mark.run(order=4)
def test_shopping():
    """購物下單"""
    print("購物流程")
    assert True

@pytest.mark.run(order=3)
def test_cart():
    """購物車用例"""
    print("購物車流程")
    assert True


if __name__ == '__main__':
    pytest.main()


"""
執行結果:
test_order.py::test_register PASSED                                      [ 25%]註冊步驟

test_order.py::test_login PASSED                                         [ 50%]登入步驟

test_order.py::test_cart PASSED                                          [ 75%]購物車流程

test_order.py::test_shopping PASSED                                      [100%]購物流程


============================== 4 passed in 0.06s ==============================

Process finished with exit code 0
"""