1. 程式人生 > >Pytest01:pytest預備工作以及熟悉執行測試用例的命令.

Pytest01:pytest預備工作以及熟悉執行測試用例的命令.

今天我開始講解pytest的內容,之所以講解這個框架是因為它的特點就是簡單,
能把複雜的場景簡單化,還有它 有很好的庫支援,提高我們編寫測試用例的效率.
想擴充套件直接安裝第三方外掛.

1.安裝 pytest

  1. 首先自己要有python 環境,具體怎麼安裝python自己去網上找找,
  2. pip也需要自己上網查詢安裝
  3. pytest的安裝特別簡單,直接用pip install pytest 就成功了

2.執行pytest

語法為: pytest 【options】【file_or_dir】【file_or_dir】【…】
options :執行用例命令選項 ,稍後我會介紹.
【file_or_dir】

: 指定要執行的檔案或者資料夾(要有路徑),可以連續指定
檔案或者資料夾 中間用空格隔開.

3.執行pytest

如果不提供任何引數,pytest會在當前目錄以及子目錄下尋找測試檔案,
如果指定資料夾,pytest 會逐個查詢測試檔案.
總結:pytest 實際是用遞迴查詢資料夾>下一層資料夾>下一層檔案.
現在這兩種方式我都用例項演示下.

  1. 現在我們直接在D:\chapter01直接用pytest 執行,看看會有什麼結果:
    執行的目錄

執行結果:
在這裡插入圖片描述
看我紅色圈住的部分,可以得出它是迴圈遍歷它當前目錄和子目錄.其他的資訊我稍後會介紹.

  1. 我們來指定資料夾或者指定檔案 看看效果.

指定用例
我們執行了task01 目錄, 和 task02/test_01.py::test_01 方法 (方法名前面要用::)

4.測試搜尋

定義是: 搜尋測試檔案和測試用例的過程稱為測試搜尋.
想要被搜到,必須遵守pyteset的命名規則:

  1. 測試檔案命名 test_.py or _test.py
  2. 測試函式和類方法 必須是test_
  3. 測試類應當為Test
    為了好記 測試檔案和測試函式必須以 test_開頭,類是Test 開頭.

5.控制檯資訊講解

在這裡插入圖片描述

1. test session starts
這個是每次執行的分割線

2. platform 資訊


1.win32 代表用的是windows ,MAC 顯示的是darwin
2.接著顯示的是Python 和 pytest的版本 , py 和pluggy是pytest包
3.rootdir 當前的起始目錄, inifile是指配置檔案,後邊章節我會詳細講解.
4. collected 9 itemes
一共蒐集了多少測試用例.
5. test_run01.py …
測試檔案後邊的“.” 代表測試通過, F(Fail),E(error),s(skip),X(xpass)>預期失敗但是成功了
x(xfail)>預期失敗執行也失敗了.(下邊我講解具體詳情)
6. 9 passed in 0.06 seconds======
表示通過的數量,沒有通過也會總結數量 ,以及花費得時間.

6.使用命令列選項

有了命令列選項使其操作我們的用例變的非常靈活。Unittest 框架如果想執行復雜的場景
變得很雞肋,這是pytest 優勝Unittest的地方.
以下列舉的是常用的命令列選項,已經可以滿足我們使用,如果個人想擴充套件,可以用

pytest --help 可以查到全部的命令 自己可以嘗試下,在這不截圖了

1.–collect-only
從字面意思我們可以看出是 為了蒐集測試用例,但是不執行。
目的是為了 在執行前 檢視是否是自己預期需要執行的用例。
在這裡插入圖片描述

從圖片可以看出 一共蒐集了12 個測試用例,在執行結果 是 no tests ran 說明只是蒐集並不執行。
2. -k 選項
重要功能是利用你使用的表示式來 指定希望執行的測試用例.
比如: 你用 pytest -k “表示式”
pytest 根據 你輸入的表示式內容進行去匹配 測試用例的名字裡是否有這個表示式內容進行過濾.
然後再執行. 如果想查詢多個內容,可以用 or 進行連線 ,請看下邊的截圖:
在這裡插入圖片描述

 我用的語句是  : pytest  -k "tuple or list"  ,已經查詢到 tuple 和list 的測試用例, 也可以-k 和 --collect-only一起使用,自己嘗試下.

3.-m 選項
m 是marker的縮寫,功能是執行自己標記的測試用例,我先講解如何標記測試用例
如果我們想執行帶有 first_case 怎麼標記呢
請看下邊的例項, 用到了@pytest.mark.first_case, 其中first_case 是裝飾器用於標記的內容.

import pytest
@pytest.mark. first_case 
def test_task01():
    assert  1==1
def test_task02():
    assert  1==1
def test_task03():
    assert  1==1

我再標記第二個case ,看是否能執行兩個
執行結果如下:
在這裡插入圖片描述
從結果看 提示一共搜尋到 12個測試用例,10個沒有選擇 是因為不符合我們的marker 條件.
列出來的list 一共就兩個,說明已經生效.
如何想用多個marker ,可以這麼寫 “marker1 or marker2” 意思是執行 mark1 和mark2所有測試用例
也可以用not 過濾, “marker1 and not marker2” 意思是 執行marker1 並且不包含marker2用例.
4. -x 選項
這個選項是為debug 準備的,正常的流程 是如果斷言失敗,它會繼續執行並不會斷掉.
如果想在第一個斷言失敗我就不讓繼續執行,就可以用-x選項. 遇到斷言失敗就停止執行.
有利於我們查詢原因.
5.–lf 選項 (lf 是 last failed 的縮寫)
這個選項用處很大,直接過濾出 最後一個fail 的測試用例,有利於我們查詢失敗的用例,解決好
我們再執行這個if 選項 ,可以再找出最後一個fail,省了我們再執行成功的用例,節省我們的時間 .
在這裡插入圖片描述

6.–ff (是 failed first)
和 --lf 不同是的是,它優先執行失敗的case ,再把之前執行通過的也要執行. 自己嘗試下,這裡不做演示
7.-v 選項
這個會在控制檯輸出更多的內容,最明顯的區別就是每個檔案中的每個測試用例都佔一行(先前是每個檔案佔一行)
我把這兩種情況都打印出來 你們感受下
在這裡插入圖片描述

8. --tb=style 選項
這個選項用於對失敗輸出資訊的顯示方式,
輸出的資訊一般包括 1. 失敗出現在哪一行2.是什麼失敗 3.怎麼失敗的 這三要素是資訊追溯
我們常用的style 有 short ,no, line
例項如下:
在這裡插入圖片描述

no 遮蔽所有的回溯資訊,只是顯示哪個檔案哪個case 失敗,
line 具體到哪個assert
short 具體到哪個引數,列舉出更詳細的失敗資訊.
實際工作中 -q 和 --tb=line 組合 已經夠用.
9. --version
顯示pytest 版本以及安裝目錄.
在這裡插入圖片描述

總結: 這都是我們初步認識 pytest ,下一個章節 我們介紹  如何編寫測試函式,
如何使用不同的引數呼叫測試函式,如何將測試分發到類,模組和組建包 .

後邊的更精彩.