一、pytest是什麼
Pytest-s是一個Python的單元測試框架,基於unittest框架的一個替代方案。其代碼量較小且易於學習使用。
它支持參數化測試、fixture和測試運行的自定義等功能。此外,Pytest-s還支持其他插件,如allure報告、mypy靜態類型檢查以及pytest-xdist並行執行等。
下面我們將結合實例來介紹Pytest-s的用法和技巧。
二、pytest-s是運維良心
Pytest-s適合於在Devops流程中使用,其輕量、投入成本低的特性與Devops實踐完美契合。同時,Pytest-s 的parametrize功能使得測試用例可以在多個環境中運行,而無需對代碼進行修改。這為代碼移植和部署提供了便利。
例如,我們可以通過下面的代碼展示Pytest-s的parametrize功能:
import pytest
@pytest.mark.parametrize("test_input, expected_output", [(1,2), (4,4)])
def test_simple(test_input, expected_output):
assert test_input+1 == expected_output
上述代碼中,我們在定義測試用例時用@pytest.mark.parametrize來指定參數輸入以及期望的輸出。每一組輸入和輸出的數據用元組的方式存儲,而不是通過多個測試用例定義。
三、pytest實戰
接下來,我們將通過實例介紹使用Pytest-s進行測試。
pytest實例化
我們來看看如何創建一個測試用例。
例如,我們要測試一個計算器的加法功能:
class TestCalc:
def test_add(self):
assert add(2,3) == 5
在上述代碼中,我們定義了一個測試類TestCalc,其中包含一個test_add測試方法。我們通過assert來斷言計算結果是否滿足我們的預期結果。
pytest數據驅動
有時候我們需要多次測試同一個的函數,但是傳入的參數不同。這時候就需要使用Pytest-s的數據驅動功能。
testdata = [
(2,3,5),
(3,4,7),
(5,6,11),
]
@pytest.mark.parametrize("a,b,expected", testdata)
def test_add(a,b,expected):
assert add(a,b) == expected
這裡我們將測試用例數據定義為一個包含多個元組的列表,元組中存儲的是測試用例的參數以及期望的結果。在測試用例定義時,我們使用@pytest.mark.parametrize來指定參數輸入和期望的輸出。
pytest是什麼意思
通常情況下,Pytest-s的測試用例是一個def函數,需要在函數體中添加assert語句進行判斷。assert語句使得我們可以清晰地表達每個測試的期望結果。
我們來看一個例子:
def test_hello():
assert hello() == 'Hello World'
上述代碼中,我們定義了一個test_hello測試函數,其中的assert語句表示我們期望函數hello()的返回結果是’Hello World’。如果測試通過,我們將獲得一條最終結果為”1 passed”的測試成功信息。
pytest是python
Pytest-s是用Python實現的,因此它與Python的結合是無縫的。我們可以將Pytest-s的fixture與Python的with open函數結合起來使用。
@pytest.fixture
def tmp_file(request):
file_ = open('tmp_file', 'w')
file_.write(request.function.__name__)
file_.close()
yield file_.name
os.unlink(file_.name)
def test_tmp_file(tmp_file):
with open(tmp_file) as f:
assert f.read() == 'test_tmp_file'
在上述代碼中,我們定義了一個fixture名為”tmp_file”,該fixture會創建一個名為”tmp_file”的臨時文件,並在臨時文件中寫入測試函數的名稱。在測試代碼中,我們使用了Python的with open函數讀取了臨時文件的內容,並斷言其是否與測試函數的名稱相等。
pytest生成allure報告
Pytest-s支持多種報告,其中allure報告是Pytest-s最常用的報告。allure報告優美、豐富,提供了多個視圖、圖表以及細節信息的互動式展示。同時,allure報告也支持自我定製以及擴展。下面我們將為您提供allure報告的生成方法。
pytest test.py --alluredir=./allure_results
allure generate ./allure_results/ -o ./allure_report/ --clean
上述代碼中,我們需要先通過pytest指定–alluredir參數生成測試結果數據,並將其放置在 ./allure_results目錄下。隨後,我們使用allure generate命令將 allue_results 目錄下的數據生成靜態html文件,並在 ./allure_report/路徑下生成報告。
pytest生成報告
除了allure報告,Pytest-s也支持其他的報告類型。例如,使用pytest-html報告器可以生成HTML測試報告。
pip install pytest-html
pytest --html=report.html
在上述代碼中,我們需要先安裝pytest-html模塊,然後使用pytest –html=report.html命令即可在當前目錄下生成測試報告report.html。
pytest數據層選取
我們可以選擇不同的數據層來存儲測試數據,比如測試數據可以存儲在腳本代碼、配置文件、資料庫或者外部API介面中。
下面我們展示如何在測試腳本中使用配置文件中的數據進行測試。通過configparser模塊,我們可以輕鬆地讀取和解析ini格式的配置文件中的數據。
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
def test_config():
assert config['test']['name'] == 'pytest-s'
在上述代碼中,我們使用Python自帶的configparser模塊讀取了名為”config.ini”的配置文件,並且使用斷言來判斷配置文件中的值是否等於期望值。
總結
本文針對Pytest-s的主要特性和使用方法進行了詳細介紹。我們從測試用例的編寫到數據驅動的實現,再到如何與Python結合以及報告生成等方面進行了講解。同時,我們希望本文的實例和技巧能夠幫助您在使用Pytest-s時更加熟練、高效地進行測試開發。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/243535.html