基于Python+Pytest實現自動化測試(全棧實戰指南)

目錄

第一篇:基礎篇

第1章 自動化測試概述

1.1 什么是自動化測試

第2章 環境搭建與工具鏈配置

2.1 Python環境安裝(Windows/macOS/Linux)

2.2 虛擬環境管理

2.3 Pytest基礎配置(pytest.ini)

第3章 Pytest核心語法與測試框架

3.3 Fixture的魔法

第二篇:自動化接口測試

第5章 Pytest接口測試實戰

5.3 數據驅動測試完整實現

第三篇:自動化性能測試

第9章 Locust性能測試實戰

9.1 基礎壓測腳本

9.3 Prometheus監控集成

第四篇:企業級工程化

第12章 測試框架架構設計

12.2 配置中心實現

附錄:常見錯誤解決方案

問題1:Fixture循環依賴

問題2:參數化數據格式錯誤

完整項目結構示例


第一篇:基礎篇

第1章 自動化測試概述

1.1 什么是自動化測試

核心定義
自動化測試是通過編寫腳本或使用工具替代人工執行測試用例的過程,其核心目標是通過可重復執行的測試流程提升測試效率和覆蓋率。

典型應用場景

  • 回歸測試:每次代碼變更后快速驗證核心功能

  • 大數據量測試:如批量數據上傳/下載的驗證

  • 多環境驗證:同時測試Windows/Linux/macOS平臺兼容性

Python+Pytest優勢

# 示例:一個簡單的Pytest測試用例
def test_addition():assert 1 + 1 == 2
  • 語法簡潔:無需復雜類繼承,函數即用例

  • 插件生態:超過800個官方插件支持各類擴展需求

  • 報告友好:支持HTML/Allure可視化報告生成


第2章 環境搭建與工具鏈配置

2.1 Python環境安裝(Windows/macOS/Linux)

Windows安裝步驟

  1. 訪問Python官網下載3.8+版本安裝包

  2. 勾選"Add Python to PATH"選項

  3. 驗證安裝:python --version

Linux快速安裝

sudo apt update
sudo apt install python3.8 python3-pip
2.2 虛擬環境管理

virtualenv使用示例

pip install virtualenv
virtualenv venv
source venv/bin/activate  # Linux/macOS
venv\Scripts\activate.bat # Windows

pipenv高級用法

pip install pipenv
pipenv install pytest
pipenv run pytest tests/
2.3 Pytest基礎配置(pytest.ini)
# pytest.ini 示例配置
[pytest]
addopts = -v --html=report.html
testpaths = tests
python_files = test_*.py

第3章 Pytest核心語法與測試框架

3.3 Fixture的魔法

作用域控制

import pytest@pytest.fixture(scope="module")
def database_connection():conn = create_db_conn()yield connconn.close()def test_query1(database_connection):result = database_connection.execute("SELECT 1")assert result == 1def test_query2(database_connection):# 復用同一個數據庫連接

Fixture依賴

@pytest.fixture
def user_token(api_client):return api_client.login("admin", "password123")def test_create_post(user_token):headers = {"Authorization": f"Bearer {user_token}"}# 使用token調用接口

第二篇:自動化接口測試

第5章 Pytest接口測試實戰

5.3 數據驅動測試完整實現

測試數據分離

# test_api.py
import pytest
import requestsdef load_yaml_cases(file_name):with open(f"data/{file_name}", 'r') as f:return yaml.safe_load(f)@pytest.mark.parametrize("case", load_yaml_cases("login_cases.yaml"))
def test_user_login(case):url = "https://api.example.com/login"response = requests.post(url,json=case["request_body"],headers=case.get("headers", {}))assert response.status_code == case["expected"]["status_code"]assert response.json()["error_code"] == case["expected"]["error_code"]

YAML數據文件

# data/login_cases.yaml
- name: 正確用戶名密碼登錄request_body:username: "valid_user"password: "correct_password"expected:status_code: 200error_code: 0- name: 錯誤密碼登錄request_body:username: "valid_user"password: "wrong_password"expected:status_code: 401error_code: 1001

第三篇:自動化性能測試

第9章 Locust性能測試實戰

9.1 基礎壓測腳本
# locustfile.py
from locust import HttpUser, task, betweenclass WebsiteUser(HttpUser):wait_time = between(1, 5)@task(3)def view_items(self):self.client.get("/items")@task(1)def add_to_cart(self):self.client.post("/cart", json={"item_id": 42})

啟動命令

locust -f locustfile.py --headless -u 1000 -r 100 --run-time 10m
9.3 Prometheus監控集成
from prometheus_client import start_http_server, CounterREQUEST_COUNTER = Counter('api_requests_total', 'Total API requests')class ApiUser(HttpUser):@taskdef call_api(self):REQUEST_COUNTER.inc()self.client.get("/api")

第四篇:企業級工程化

第12章 測試框架架構設計

12.2 配置中心實現
# config/
#   __init__.py
#   dev.yaml
#   prod.yamlimport yaml
import osclass Config:def __init__(self, env="dev"):self.env = envself._load_config()def _load_config(self):with open(f"config/{self.env}.yaml") as f:self.data = yaml.safe_load(f)@propertydef base_url(self):return self.data["base_url"]# 使用示例
config = Config(os.getenv("ENV", "dev"))
requests.get(f"{config.base_url}/api")

附錄:常見錯誤解決方案

問題1:Fixture循環依賴

錯誤現象
ValueError: Circular dependency detected

解決方案
重構Fixture結構,使用@pytest.fixture(autouse=True)或合并相關Fixture

問題2:參數化數據格式錯誤

典型錯誤
TypeError: unhashable type: 'dict'

修正方案
確保參數化數據為可序列化格式:

@pytest.mark.parametrize("a,b,expected", [(1, 2, 3),(4, 5, 9)
])

完整項目結構示例

automation_framework/
├── conftest.py
├── pytest.ini
├── requirements.txt
├── tests/
│   ├── unit/
│   ├── api/
│   │   ├── test_login.py
│   │   └── data/
│   │       └── login_cases.yaml
│   └── performance/
│       └── locustfile.py
└── utils/├── config_loader.py└── report_generator.py

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77758.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77758.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77758.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是CRM系統,它的作用是什么?CRM全面指南

CRM(Customer Relationship Management,客戶關系管理)系統是一種專門用于集中管理客戶信息、優化銷售流程、提升客戶滿意度、支持精準營銷、驅動數據分析決策、加強跨部門協同、提升客戶生命周期價值的業務系統工具。其中,優化銷售…

紛析云開源財務軟件:助力企業實現數字化自主權

在數字化轉型浪潮中,企業財務管理面臨高成本、低靈活性、數據孤島等痛點。紛析云開源財務軟件(項目地址:https://gitee.com/shenxji/fxy)憑借其開源基因與模塊化設計,為企業提供了一條“低成本、高可控”的數字化路徑。…

飛搭系列 | 組件增加標記,提升用戶體驗

前言 Preface 飛搭低代碼平臺(FeiDa,以下簡稱“飛搭”),為企業提供在線化、靈活的業務應用構建工具,支持高低代碼融合,助力企業低門檻、高效率和低成本地快速應對市場變化,加速復雜業務場景落地…

Docker 部署 Redis 緩存服務

Docker 部署 Redis 緩存服務 基于 Docker 部署 Redis 緩存服務一、拉取 Redis 鏡像二、運行 Redis 容器三、運行命令參數詳解四、查看容器運行狀態 基于 Docker 部署 Redis 緩存服務 一、拉取 Redis 鏡像 確保 Docker 環境已正確安裝并運行,打開終端執行以下命令拉…

yarn的介紹與操作,yarn和npm的選擇

🧶 一、Yarn 是什么? Yarn 是由 Facebook(Meta)開發的 JavaScript 包管理工具,用于替代 npm,解決它在早期版本中存在的一些問題。 ? Yarn 的優勢(v1.x): &#x1f4e…

vivado XMP使用

vivado XMP使用 文章目錄 vivado XMP使用前言一、xpm_cdc_async_rst二、XPM_CDC_ARRAY_SINGLE三、XPM_CDC_PULSE四、 XPM_CDC_SINGLE五、 xpm_cdc_sync_rst總結 前言 使用XMP做跨時鐘域,方便的是官方認證,好用且不會爆時序問題,懶得寫 set fl…

P3416-圖論-法1.BFS / 法2.Floyd

這道題雖然標簽有floyd但是直接bfs也能過 其實事實證明還是bfs快,因為bfs只需要遍歷特定的點,但是floyd需要考慮遍歷所有可能的中介點 法1.BFS 用字典存儲每個點所能普及的范圍,然后用對每個點bfs進行拓展 nint(input())temp[]#xmax0;yma…

科普動畫短視頻制作:角色塑造的魅力法則

寶子們,在科普動畫短視頻的世界里,角色塑造可是讓作品出彩的關鍵!今天就來和大家嘮嘮那些超實用的角色塑造法則,還會給大家推薦一款超好用的工具哦~ 一、獨特外形,吸睛第一步 在科普動畫短視頻制作中,角色…

代理模式(Proxy Pattern)詳解:以延遲加載圖片為例

在日常開發中,是否遇到過以下問題: “程序啟動時圖片太多,加載太慢!” “用戶還沒看到圖片就已經開始加載了,性能浪費!” 此時,代理模式(Proxy Pattern)便派上了用場。本…

C++學習筆記(三十六)——STL之排序算法

一、STL 算法 C的STL&#xff08;Standard Template Library&#xff09; 提供了一組高效、通用的算法&#xff0c;這些算法適用于各種容器&#xff08;如 vector、list、set、map&#xff09;。 這些算法主要位于 <algorithm> 和 <numeric> 頭文件中。 通用性&a…

Java基于SpringBoot的企業車輛管理系統,附源碼+文檔說明

博主介紹&#xff1a;?Java老徐、7年大廠程序員經歷。全網粉絲12w、csdn博客專家、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f447;&…

el-date-picker時間范圍 賦值報錯問題

問題&#xff1a; 點擊時間范圍組件右邊清除圖標&#xff0c;點擊近6小時會把設置好的時間賦值給時間范圍組件 但是出現報錯 原因&#xff1a; 嘗試對null值進行屬性設置操作&#xff1a;修改一個數組的元素&#xff0c;但此時這個數組是null&#xff0c;而不是預期的數組類型…

STM32 中斷系統深度剖析

在嵌入式系統開發領域&#xff0c;STM32 系列微控制器憑借其強大的性能和豐富的資源被廣泛應用。中斷系統作為 STM32 的關鍵特性之一&#xff0c;能夠極大地提升系統的實時響應能力和多任務處理效率。本文將基于 STM32F4 系列芯片&#xff0c;深入剖析中斷與外設中斷的原理、配…

1.3 本書結構概覽:從理論基礎到實踐案例的系統闡述

本書采用由淺入深、理論聯系實踐的結構設計&#xff0c;旨在為讀者提供一個關于大模型與智能代理(Agent)技術的全面認知框架與實施路徑。全書共分為十章&#xff0c;系統性地覆蓋了從技術基礎到企業落地的完整知識鏈條&#xff0c;現概述如下&#xff1a; 首先&#xff0c;第一…

小白訓練日記——2025/4/22

實驗描述 將GobalM模塊加入到changerEx的stage2中。 下面展示一些內聯片段&#xff1a; model dict(backbonedict(interaction_cfg(None,dict(typeGlobalM, embed_dim128,num_heads32,axial_strategyrow),dict(typeChannelExchange, p1/2),dict(typeChannelExchange, p1/2))…

【上位機——MFC】MFC入門

MFC庫中相關類簡介 CObject MFC類庫中絕大部分類的父類&#xff0c;提供了MFC類庫中一些基本的機制。 對運行時類信息的支持。對動態創建的支持。對序列化的支持。 CWinApp 應用程序類&#xff0c;封裝了應用程序、線程等信息。 CDocument 文檔類&#xff0c;管理數據 F…

代碼隨想錄第三十七天|華為秋季筆試真題230823

刷題小記&#xff1a; 主要偏向扎實編碼基礎的考察&#xff0c;但貌似近些年題目難度有所提高&#xff0c;僅供參考。 卡碼網136.獲取連通的相鄰節點列表&#xff08;卡碼網136.獲取連通的相鄰節點列表&#xff09; 題目分析&#xff1a; 題目描述&#xff1a; 存在N個轉發…

計算機視覺cv2入門之實時手勢檢測

前邊我們已經講解了使用cv2進行圖像預處理以及針對實時視頻流文件的操作方法&#xff0c;這里我們通過實時手勢檢測這一案例來學習和實操一下。 大致思路 根據手勢的種類以及指定手勢圖片數量來構建一個自己的手勢圖片數據集CNN模型訓練手勢圖片數據集使用訓練好的模型進行實時…

Java 安全:如何防止 SQL 注入與 XSS 攻擊?

Java 安全&#xff1a;如何防止 SQL 注入與 XSS 攻擊&#xff1f; 在 Java 開發領域&#xff0c;安全問題至關重要&#xff0c;而 SQL 注入和 XSS 攻擊是兩種常見的安全威脅。本文將深入探討如何有效防止這兩種攻擊&#xff0c;通過詳細代碼實例為您呈現解決方案。 一、SQL 注…

Itext進行PDF的編輯開發

這周寫了一周的需求&#xff0c;是制作一個PDF生成功能&#xff0c;其中用到了Itext來制作PDF的視覺效果。其中一些功能不是很懂&#xff0c;僅作記錄&#xff0c;若要學習請仔細甄別正確與否。 開始之前&#xff0c;我還是想說&#xff0c;這傻福需求怎么想出來的&#xff0c…