2. 自动化测试基础回顾:自动化测试金字塔、常见自动化测试框架简介
在进入特征回放评审自动化之前,有必要先回顾自动化测试的核心分层模型与主流工具。这能帮助你理解特征回放评审在整个测试体系中的位置,以及它与其他自动化测试类型的协作关系。
2.1 自动化测试金字塔
自动化测试金字塔由 Mike Cohn 提出,用于指导团队合理分配不同层级的自动化测试投入比例。金字塔从下到上分为三层:
- 单元测试(Unit Tests):测试函数、方法或类的最小逻辑单元,运行速度快,维护成本低,是金字塔的基石。
- 服务/接口测试(Service/API Tests):测试模块间或系统间的接口协议与数据交互,覆盖业务逻辑的集成点。
- 端到端测试(E2E Tests):模拟真实用户操作,验证完整业务流程,运行速度慢,维护成本高,位于金字塔顶端。
特征回放评审自动化属于服务/接口测试与端到端测试之间的交叉领域——它通过回放录制流量来验证系统行为,兼具接口测试的精准性与 E2E 测试的场景覆盖能力。
关键原则:金字塔越往下,测试数量越多、执行速度越快、维护成本越低;越往上,测试数量越少、执行速度越慢、维护成本越高。特征回放评审应优先覆盖金字塔中上层的关键业务场景。
2.2 常见自动化测试框架简介
不同层级的测试需要不同的框架支撑。以下是三种最常用的自动化测试框架,它们分别对应金字塔的不同层级:
| 框架名称 | 适用层级 | 核心能力 | 语言支持 | 典型场景 |
|---|---|---|---|---|
| Selenium | 端到端测试 | 浏览器自动化,模拟用户点击、输入、导航等操作 | Java, Python, C#, Ruby, JS | Web UI 回归测试、跨浏览器兼容性验证 |
| Appium | 端到端测试 | 移动端原生/混合/Web 应用自动化 | Java, Python, C#, Ruby, JS | iOS/Android App 功能测试、手势操作验证 |
| Requests | 服务/接口测试 | HTTP 请求发送与响应解析,支持 Session、Cookie、认证 | Python | RESTful API 测试、接口回归、数据 mock 验证 |
选型建议:特征回放评审自动化通常以 Requests 作为核心工具来发送回放请求并校验响应,同时可结合 Selenium 或 Appium 验证前端展示效果。本课程后续章节将重点使用 Requests + pytest 构建回放引擎。
2.3 框架核心概念速览
2.3.1 Selenium WebDriver
Selenium 通过 WebDriver 协议与浏览器通信,支持 Chrome、Firefox、Edge 等主流浏览器。核心操作包括元素定位、页面导航、事件触发和断言验证。
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com")
element = driver.find_element(By.ID, "search-input")
element.send_keys("特征回放")
driver.find_element(By.ID, "search-btn").click()
assert "结果" in driver.title
driver.quit()
2.3.2 Appium
Appium 基于 WebDriver 协议扩展了移动端自动化能力,支持 iOS 的 XCUITest 和 Android 的 UiAutomator2。它通过 Session 管理设备连接,使用 MobileBy 定位原生控件。
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
desired_caps = {
"platformName": "Android",
"deviceName": "emulator-5554",
"appPackage": "com.example.app",
"appActivity": ".MainActivity"
}
driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
element = driver.find_element(AppiumBy.ID, "com.example.app:id/btn_start")
element.click()
driver.quit()
2.3.3 Requests
Requests 是 Python 生态中最流行的 HTTP 库,支持 GET/POST/PUT/DELETE 等方法,内置 Session 管理、Cookie 持久化和 SSL 验证。特征回放评审中,它用于发送录制流量并比对响应。
import requests
session = requests.Session()
# 模拟登录
login_resp = session.post("https://api.example.com/login",
json={"user": "admin", "pass": "123456"})
assert login_resp.status_code == 200
# 回放业务请求
playback_resp = session.get("https://api.example.com/order/list",
params={"page": 1, "size": 20})
data = playback_resp.json()
assert data["code"] == 0
assert len(data["data"]["items"]) > 0
2.4 框架对比与特征回放适配
下表从特征回放评审自动化的视角,对比三个框架的适配程度:
| 评估维度 | Selenium | Appium | Requests |
|---|---|---|---|
| 录制流量回放能力 | 弱(需额外录制工具) | 弱(需额外录制工具) | 强(天然支持 HTTP 请求回放) |
| 响应校验粒度 | 页面元素级 | 控件属性级 | 全响应体(JSON/XML/Header) |
| 执行速度 | 慢(浏览器渲染) | 慢(设备渲染) | 快(毫秒级) |
| 环境依赖 | 浏览器驱动 | 移动设备/模拟器 + Appium Server | 无(纯 Python 库) |
| 特征回放评审适用性 | 前端展示验证 | 移动端展示验证 | 核心引擎 |
注意:特征回放评审自动化以 Requests 作为主力框架,但并非完全替代 Selenium/Appium。当需要验证前端渲染结果(如页面布局、控件状态)时,仍需结合 Selenium 或 Appium 进行补充验证。本课程后续将讲解如何将 Requests 回放结果与前端截图比对相结合。