一。自动化测试基础:先搞懂为什么和做什么
在学习 Web 自动化测试前,我们需要先明确自动化测试的核心定位。它并不可以完全取代人工,而是帮助测试人员提高效率(主要体现在回归测试上),让测试人员将更多的精力投入到更复杂的测试中。
1.1 自动化测试的核心目标:回归测试
自动化测试的主要价值体现在回归测试场景:
- 当软件迭代新版本时,需验证新增功能未破坏历史功能;
- 当软件有多个版本并行维护时,需快速验证各版本核心功能的一致性。
这里要避开两个常见误区:
- 误区 1:'自动化测试能取代人工测试'。自动化测试由脚本驱动,仅能验证预设场景,无法覆盖异常场景(如网络波动、界面兼容性问题),需与人工探索性测试配合。
- 误区 2:'自动化测试能大幅度降低工作量'。自动化脚本需前期开发与后期维护(如 Web 界面元素变更后,脚本需同步修改),仅在'长期多次回归'场景下才能体现效率优势,短期项目反而可能增加工作量。
1.2 自动化测试分类:别把不同自动化混为一谈
自动化是统称,不同类型的自动化测试解决的问题截然不同。对 C++ 开发者而言,需重点关注两类:接口自动化与 Web UI 自动化。
| 自动化类型 | 测试目标 | 核心价值 | 适用场景 |
|---|
| 接口自动化 | 验证后端接口(如 HTTP/GRPC 接口)的输入输出正确性 | 不依赖界面,执行速度快,可在开发早期介入 | 后端接口回归、数据正确性验证 |
| Web UI 自动化 | 验证 Web 界面的操作流程与展示效果(如按钮点击、表单提交、页面跳转) | 模拟真实用户操作,覆盖端到端场景 | 前端界面回归、关键业务流程验证 |
1.3 自动化测试金字塔:如何分配测试资源?
测试圈经典的'自动化测试金字塔'模型,揭示了不同测试类型的投入产出比:
- 底层:单元测试(如接口的单元测试):投入少、覆盖广、发现问题早,应占自动化测试的 70%;
- 中层:接口 / 集成测试:衔接前后端,验证模块交互,应占 20%;
- 顶层:UI 自动化测试:执行慢、维护成本高,仅覆盖核心业务流程,占 10% 即可。
但实际企业中常出现'冰淇淋蛋筒反模式',自动化测试需要大量的初始投资。找到突破点,与手动测试相比,我们开始看到它对长期成本产生的积极影响,这两种测试活动是完全兼容,产生短期和长期利益。
二。Web 自动化测试核心:环境搭建与驱动管理
Web 自动化测试的本质是用代码模拟人操作浏览器,需依赖三大组件:浏览器、浏览器驱动、自动化框架(Selenium)。
2.1 核心组件原理:三者如何协同工作?
- 浏览器:执行界面操作的载体(如 Chrome、Firefox);
- 浏览器驱动:沟通自动化脚本与浏览器的桥梁(如 ChromeDriver),负责解析脚本指令并转化为浏览器可执行的操作;
- Selenium:Python 编写的自动化框架,提供丰富的 API(如查找元素、模拟点击),简化脚本开发。
三者交互流程如下:
- 脚本通过 Selenium 发送指令;
- Selenium 调用浏览器驱动;
- 驱动控制浏览器执行操作。
2.2 环境搭建:3 步搞定依赖安装
Web 自动化测试依赖 Python 环境(便于快速编写脚本,与 C++ 后端测试工具链兼容),核心安装步骤如下:
步骤 1:安装 Python(3.7~3.11 版本)
步骤 2:安装 Selenium 框架
Selenium 版本需稳定,推荐使用 4.0.0 版本(避免新版本 API 变更导致脚本报错):
pip install selenium==4.0.0
步骤 3:安装驱动管理工具(webdriver-manager)
传统方式需手动下载浏览器驱动,且浏览器更新后需同步更新驱动,极易出现版本不匹配问题。webdriver-manager 可自动管理驱动版本,彻底解决此痛点:
pip install webdriver-manager
原理:webdriver-manager 会自动检测本地浏览器版本,下载对应版本的驱动,并在脚本运行时自动配置驱动路径。
三。Selenium 实战:写一个百度搜索自动化脚本
掌握环境搭建后,我们通过'百度搜索'案例,实战 Web 自动化测试的核心流程:打开浏览器→访问页面→查找元素→模拟操作→关闭浏览器。
3.1 完整脚本:百度搜索'迪丽热巴'
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
chrome_driver_path = ChromeDriverManager().install()
driver = webdriver.Chrome(service=Service(chrome_driver_path))
time.sleep(2)
driver.get("https://www.baidu.com")
time.sleep(2)
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("迪丽热巴")
time.sleep(2)
driver.find_element(By.CSS_SELECTOR, "#su").click()
time.sleep(2)
driver.quit()
常用交互 API:
- send_keys(text):模拟键盘输入(如输入搜索关键词);
- click():模拟鼠标左键点击(如点击按钮、链接);
- clear():清空输入框内容;
- webdriver.Chrome():创建 Chrome 浏览器实例(若用 Firefox,需改为 webdriver.Firefox())。
Selenium 元素定位方式对比:
| 定位方式(By 类) | 语法示例 | 适用场景 |
|---|
| By.ID | By.ID, "kw" | 元素有唯一 id(如百度输入框 id 为 kw) |
| By.CSS_SELECTOR | By.CSS_SELECTOR, "#kw" | 灵活定位(支持 id、class、标签名组合) |
| By.XPATH | By.XPATH, "//input[@id='kw']" | 复杂场景(如定位表格中的第 n 行元素) |
Web 自动化测试不是银弹,但对 C++ 后端配套的 Web 项目而言,它是回归测试的高效工具。本文从概念到实战,讲解了 Web 自动化测试的核心原理、环境搭建与 Selenium 脚本开发,关键是要记住:Web 自动化测试应聚焦核心流程,与接口自动化、单元测试配合,才能最大化测试效率与质量保障能力。