python pytest接口自動化框架搭建(一)


1.首先安裝pytest

pip install pytest

2.編寫單測用例

在pytest框架中,有如下約束:

  • 所有的單測文件名都需要滿足test_*.py格式或*_test.py格式。
  • 在單測文件中,可以包含test_開頭的函數,也可以包含Test開頭的類。
  • 在單測類中,可以包含一個或多個test_開頭的函數。

此時,在執行pytest命令時,會自動從當前目錄及子目錄中尋找符合上述約束的測試函數來執行。

import pytest

# content of test_sample.py
def func(x):
    return x + 1
def test_answer():
    assert func(3) == 5

運行 pytest  或 指定特定文件 pytest -q test_sample.py

2.1 運行pytest 則遍歷當前目錄及子目錄

看紅色圈住的部分,可以得出它是循環遍歷它當前目錄和子目錄

2.2 pytest -q test_class.py 指定文件運行

3.測試用例搜索

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

  

  • 所有的單測文件名都需要滿足test_*.py格式或*_test.py格式。
  • 在單測文件中,可以包含test_開頭的函數,也可以包含Test開頭的類。
  • 在單測類中,可以包含一個或多個test_開頭的函數。

為了好記,測試文件和測試函數必須以 test_開頭,類是Test 開頭.

4.控制台信息講解

 

4.1. test session starts
  這個是每次運行的分割線

4.2. platform 信息

  1.win32 代表用的是windows ,MAC 顯示的是darwin

  2.接着顯示的是Python 和 pytest的版本 , py 和pluggy是pytest包

  3.rootdir 當前的起始目錄, inifile是指配置文件,后邊章節我會詳細講解.

  4. collected 5 itemes    一共搜集了多少測試用例.

  5. test_run01.py …
    測試文件后邊的“.” 代表測試通過, F(Fail),E(error),s(skip),X(xpass)>預期失敗但是成功了
    x(xfail)>預期失敗執行也失敗了.(下邊我講解具體詳情)
  6. 4 fail,1passed in 0.06 seconds======
    表示通過的數量,沒有通過也會總結數量 ,以及花費得時間.

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

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

5.1 -–collect-only

從圖片可以看出 一共搜集了5 個測試用例,在執行結果 是 no tests ran 說明只是搜集並不執行。

5.2. -k 選項
重要功能是利用你使用的表達式來 指定希望運行的測試用例.
比如: 你用 pytest -k “表達式”
pytest 根據 你輸入的表達式內容進行去匹配 測試用例的名字里是否有這個表達式內容進行過濾.
然后再運行. 如果想查找多個內容,可以用 or 進行連接 ,請看下邊的截圖:

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

import pytest


def inc(x):
    return x + 1


def test_answer():
    assert inc(3) == 5


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


def test_task02():
    assert 1 == 1


def test_task03():
    assert 1 == 1

pytest -m "first_case" --collect-only 或者

pytest -m "first_case" 

PS E:\Python_Web\pytest-requests-allure> pytest -m "first_case" --collect-only
================================================= test session starts =================================================
platform win32 -- Python 3.7.2, pytest-4.5.0, py-1.8.0, pluggy-0.12.0
rootdir: E:\Python_Web\pytest-requests-allure
plugins: allure-pytest-2.6.3, html-1.20.0, metadata-1.8.0
collected 8 items / 6 deselected / 2 selected
<Module test_module.py>
  <Function test_task01>
  <Function test_task02>

================================================== warnings summary ===================================================
d:\software\python\python37\lib\site-packages\_pytest\mark\structures.py:324
  d:\software\python\python37\lib\site-packages\_pytest\mark\structures.py:324: PytestUnknownMarkWarning: Unknown pytest.mark.first_case - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/latest/mark.html
    PytestUnknownMarkWarning,

-- Docs: https://docs.pytest.org/en/latest/warnings.html
====================================== 6 deselected, 1 warnings in 0.11 seconds =======================================

如果想用多個marker ,可以這么寫 “marker1 or marker2” 意思是執行 mark1 和mark2所有測試用例
也可以用not 過濾, “marker1 and not marker2” 意思是 執行marker1 並且不包含marker2用例.

 6. -x 選項

這個選項是為debug 准備的,正常的流程 是如果斷言失敗,它會繼續執行並不會斷掉.如果想在第一個斷言失敗我就不讓繼續執行,就可以用-x選項. 遇到斷言失敗就停止執行.有利於我們查找原因.

7.–lf 選項 (lf 是 last failed 的縮寫)

這個選項用處很大,直接過濾出最后一個fail 的測試用例,有利於我們查找失敗的用例,解決好,我們再運行這個if 選項 ,可以再找出最后一個fail,省了我們再執行成功的用例,節省我們的時間 .

8.–ff (是 failed first)
和 --lf 不同是的是,它優先運行失敗的case ,再把之前運行通過的也要運行. 自己嘗試下,這里不做演示
9.-v 選項
這個會在控制台輸出更多的內容,最明顯的區別就是每個文件中的每個測試用例都占一行(先前是每個文件占一行)

我把這兩種情況都打印出來,看下

 

 

 10  --tb=style 選項
這個選項用於對失敗輸出信息的顯示方式,
輸出的信息一般包括 1. 失敗出現在哪一行2.是什么失敗 3.怎么失敗的 這三要素是信息追溯
我們常用的style 有 short ,no, line
實例如下:

no 屏蔽所有的回溯信息,只是顯示哪個文件哪個case 失敗,
line 具體到哪個assert
short 具體到哪個參數,列舉出更詳細的失敗信息.
實際工作中 -q 和 --tb=line 組合 已經夠用.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM