目錄
第一篇:基礎篇
第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安裝步驟:
-
訪問Python官網下載3.8+版本安裝包
-
勾選"Add Python to PATH"選項
-
驗證安裝:
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