快速搭建高效Python自動化框架

一、引言

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MJVC的頭像MJVC
上一篇 2024-10-03 23:45
下一篇 2024-10-03 23:45

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29

發表回復

登錄後才能評論