pytest測試框架基本使用

pytest測試框架 執行方式

以函數的方式簡單執行

先了解一下Pytest的執行的方式

test_pytest.py

import pytest
def test_001():
    print("test_01")


def test_002():
    print("test_02")

if __name__ == '__main__':
    #main方法第一個參數-v打印詳細信息, 第二個執行的模塊名稱
    pytest.main(['-v',"test_pytest.py"])

看一下輸出結果 上面劃紅線的是執行了多少個測試用例 中間的是執行的測試模塊 下面的是有幾個是通過的以及時間

在這裏插入圖片描述

函數或方法名的命名規範

函數名或類的方法名須以test爲開頭否則無法執行 現在演示一下

import pytest
def test_001():
    print("test_01")

def test_002():
    print("test_02")

def add_test():
    print("add_test")
if __name__ == '__main__':
    pytest.main(['-v',"test_pytest.py"])

看一下到底能否運行

可以看到還是兩個方法 add_test並沒有運行

在這裏插入圖片描述

DOS命令執行

切換到當前項目的路徑下 輸入pytest -v test_pytest.py 執行

在這裏插入圖片描述

斷言方法

pytest 斷言使用python的原生斷言方法 assert

assert幾種斷言方法

1、 == 內容和類型必須同時滿足相等

2 、in 實際結果包含預期結果

3、 is 斷言前後兩個值 相等

assert ==斷言

斷言 x + y相加後 實際結果是否等於預期結果

def add(x,y):
   return x + x

def test_add():
    assert add(1,1) == 2

執行後 在控制檯上的顯示

在這裏插入圖片描述

如果把預期結果故意改錯 看看 控制檯會顯示什麼

這個錯誤 很明顯了
在這裏插入圖片描述

assert in 包含斷言

斷言str1字符串中是否包含GO

str1 = "python GO  PHP   JAVA "
def test_in():
    assert "GO" in str1

assert is 斷言前後的值相等

判斷兩個字符串是否相等

str1 = "admin"
str2 ="admin"
def test_is():
    assert str2 is str1

用== 也是一樣的

str1 = "admin"
str2 ="admin"
def test_is():
    assert str2 == str1

pytest 常用命令詳解

1、-v輸出詳細的信息

2、-s 輸出測試函數或測試方法print內容

3、-k 按分類執行測試點

4、-m 進行分組執行

5、-x 執行失敗立刻停止

6、–maxfail執行失敗的最大次數

7、–tb=line 錯誤信息在一行展示

pytest -v輸出詳細的信息

這個命令前面已經展示後很多次了 所以這裏把-v去掉看看執行後 會顯示什麼 做個對比

上面的是去掉-v後 下面是加上-v 參數執行 有-v的可以顯示具體那個函數方法執行成功或失敗
在這裏插入圖片描述

pytest -s輸出測試函數或測試方法print內容

輸入print語句內容 比如說要打印查看一下 用戶的id

def test_id():
    userid =1234
    print(userid)

在這裏插入圖片描述

pytest -k 按分類執行測試點

如果有十個測試用例 現在有需求只需要執行5個用例 那麼可以用裝飾器給用例分成兩個分類 分別執行

@python.mark 是固定寫法 後面的是自己起的名字 現在分了兩個類 run和stop

import pytest
@pytest.mark.run
def test_001():
    print("test_01")
@pytest.mark.run
def test_002():
    print("test_02")
@pytest.mark.run
def test_03():
    print("add_test")

def add(x,y):
   return x + x
@pytest.mark.stop
def test_add():
    assert add(1,1) == 2
@pytest.mark.stop
def test_id():
    userid =1234
    print(userid)

現在只執行run分類的方法或函數

pytest -v -k “run” test_pytest.py 執行
在這裏插入圖片描述
執行多個測試分類

在這裏插入圖片描述

-m 進行分組執行

-m 和-k 執行起來 區別就是 分類不需要帶引號 其他都差不多

在這裏插入圖片描述

-x 執行失敗立刻停止

不加-x 與加上-x的前後對比 沒有-x 執行失敗後 後面的會繼續執行 帶上-x後 執行失敗後 後面的不會繼續執行
在這裏插入圖片描述

–maxfail執行失敗的最大次數

如果設定最大失敗的次數是2 那麼如果兩個用例執行失敗 後面的會停止執行 如果是2次以下會繼續執行
在這裏插入圖片描述

–tb=line 錯誤信息在一行展示

沒有這個命令的話 如果有大量的用例執行錯誤 那麼 查看報錯信息就很費勁了

在這裏插入圖片描述

pytest API測試實戰

以登錄接口爲例

import pytest
import requests

def test_login():
    r = requests.post(
        url="http://127.0.0.1:5000/login/",
        data={
            "phone":1232432241,
            "password":123456
              },
         headers =
         {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
        }
    )
    print(r.text)
    assert r.json()['data']['id'] == 28239 and r.json()['msg'] == "登錄成功"

if __name__ == '__main__':
    pytest.main(["-v","test_pytest.py"])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章