一、引言
Python在自動化測試領域非常強大。許多測試團隊及開發人員使用Python來編寫自動化測試套件和腳本。Python自動化測試框架可以提高測試的效率,幫助測試人員和開發人員更好地管理測試用例和結果。在本文中,我們將介紹一種快速搭建高效Python自動化框架的方法。
二、選擇測試框架
選擇適合自己團隊的測試框架至關重要。Python的測試框架有很多,例如unittest、pytest、nose等等。在選擇測試框架時,需要考慮到測試需求和團隊成員的技能水平。
在本文中,我們選擇 pytest 作為測試框架。pytest 是一個功能強大的 Python 測試框架,易於使用且靈活。pytest 是一個成熟的框架,提供靈活的 fixture 和 plugin 機制。
三、創建目錄結構
要搭建 Python 自動化框架,需要創建一個適合的目錄結構,如下:
.
|---README.md
|---requirements.txt
|---pytest.ini
|---tests
| |---__init__.py
| |---test_demo.py
|---utils
| |---__init__.py
| |---config.py
| |---logger.py
| ...
其中:
– requirements.txt:存儲項目需要安裝的依賴庫;
– pytest.ini:存儲 pytest 的配置信息,例如輸出格式、測試文件匹配規則等;
– tests 目錄:存儲 pytest 測試用例文件;
– utils 目錄:存儲項目中用到的工具類和函數。
四、編寫測試用例
我們創建一個測試用例文件 test_demo.py,包含兩個用例:一個成功用例和一個失敗用例。
import pytest
def test_success():
assert True
def test_fail():
assert False
五、配置 pytest
我們需要為 pytest 添加一些插件和 fixture,以便在運行測試用例時執行這些操作。在pytest.ini中,我們配置 pytest 的運行參數。
[pytest]
addopts = -vs --html=report.html --self-contained-html
testpaths = tests
log_cli = true
log_cli_level = INFO
log_file=logs/debug.log
log_file_level = INFO
junit_family = xunit2
在此示例中,我們添加了運行參數和日誌記錄功能。例如,我們添加了內容為 INFO 的日誌等級。這樣,我們就可以在日誌文件中記錄信息。Junit_family=xunit2指定了輸出的測試結果格式,更容易生成報告。獲取更多pytest參數可以查看pytest官網。
六、添加 Fixture
Fixture是pytest中非常有用的一個功能,它可以在測試函數執行開始之前並確保測試函數執行完成後清理資源。我們可以將 Fixture 定義在 conftest.py 中。
import pytest
@pytest.fixture(autouse=True, scope='session')
def setup():
# before all
yield
# after all
在上面的示例中,我們創建了一個全局 Fixture(autouse=True),它將在整個 pytest 會話期間自動運行。我們定義了在所有測試函數之前運行所有測試函數後清理資源的邏輯。
Fixture是一個非常有用的功能,我們可以在 Fixture 中執行諸如創建瀏覽器會話、創建資料庫連接等操作。在創建 Fixture 時,最好遵循 Fixture 的單一職責原則。
七、添加命令行參數
我們可以使用命令行參數控制測試的範圍和其他操作。在 pytest 中,我們可以使用命令行參數方便地完成這些操作。
import pytest
def pytest_addoption(parser):
parser.addoption(
'--runslow', action='store_true', default=False, help='run slow tests'
)
def pytest_collection_modifyitems(config, items):
if not config.getoption('--runslow'):
skip_slow = pytest.mark.skip(reason='need --runslow option to run')
for item in items:
if 'slow' in item.keywords:
item.add_marker(skip_slow)
我們在示例中添加了 –runslow 命令行參數,並定義了一個 pytest_collection_modifyitems hook。根據 –runslow 命令行參數自動跳過標記為 「slow」的測試用例。
八、添加日誌記錄
Python自動化框架需要進行日誌記錄。我們可以使用Python自帶的logging模塊來實現這個功能。
import os
import logging
from logging.handlers import RotatingFileHandler
def init_logger():
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
log_file = os.path.join(os.path.abspath('.'), 'logs', 'debug.log')
file_handler = RotatingFileHandler(log_file, mode='a', maxBytes=50*1024*1024, backupCount=1)
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
console_handler.setLevel(logging.INFO)
logger.addHandler(file_handler)
logger.addHandler(console_handler)
init_logger()
在示例中,我們創建了一個名為 「debug.log」 的日誌文件。它的最大大小為50兆位元組,並在達到此大小時進行日誌切割。日誌的格式設置為 「%(asctime)s – %(levelname)s – %(message)s」。
九、添加配置文件
項目中經常需要定義一些配置,例如測試網站的URL等。我們可以創建一個 config.py 文件,存儲這些配置。
class Config:
TEST_URL = 'https://www.example.com'
TIMEOUT = 30
我們在 Config 類中添加了一個 TEST_URL 屬性。
十、優化並行測試
在 CI/CD 中,測試執行時間很重要。可以考慮使用 pytest-xdist 插件在多個 CPU 上並行運行測試,以提高測試的執行速度。
例如,在兩個 CPU 上執行測試的示例:
pip install pytest-xdist
pytest -n 2
pytest-xdist 的使用非常簡單,只需要安裝 pytest-xdist 插件並添加 -n 參數即可。
十一、總結
在本教程中,我們介紹了如何創建一個快速搭建高效Python自動化框架。我們選擇了 pytest 作為測試框架,並創建了適合的目錄結構。我們還添加了 fixture、命令行參數、日誌記錄和配置文件。最後,我們優化了並行測試以提高測試的執行速度。
原創文章,作者:MJVC,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/131511.html