C++ 方向 Web 自动化测试入门指南:从概念到 Selenium 实战

C++ 方向 Web 自动化测试入门指南:从概念到 Selenium 实战
在这里插入图片描述

🔥草莓熊Lotso:个人主页
❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》
✨生活是默默的坚持,毅力是永久的享受!


🎬 博主简介:

在这里插入图片描述

文章目录


前言:

在软件测试领域,自动化测试是提升效率、保障版本迭代质量的核心手段。尤其对于 C++ 开发的后端服务及配套 Web 界面,Web 自动化测试能有效解决回归测试重复劳动、人工操作易出错等问题。本文将从自动化测试基础概念切入,聚焦 Web 自动化测试的核心原理与 Selenium 实战,帮你搭建一套可落地的 Web 自动化测试流程。
在这里插入图片描述

一. 自动化测试基础:先搞懂"为什么"和"做什么"

在学习 Web 自动化测试前,我们需要先明确自动化测的核心点定位,它并不可以完全“取代人工”而是帮助测试人员提高效率(主要体现在回归测试上),让测试人员将更多的精力投入到更复杂的测试中。

在这里插入图片描述

1.1 自动化测试的核心目标:回归测试

自动化测试的 主要价值 体现在回归测试场景:
当软件迭代新版本时,需验证新增功能未破坏历史功能(如 C++ 后端接口变更后,Web 界面的查询、提交功能是否正常);
当软件有多个版本并行维护时,需快速验证各版本核心功能的一致性。

这里要避开两个常见误区:
❌ 误区 1:“自动化测试能取代人工测试”
自动化测试由脚本驱动,仅能验证预设场景,无法覆盖异常场景(如网络波动、界面兼容性问题),需与人工探索性测试配合。
❌ 误区 2:“自动化测试能大幅度降低工作量”
自动化脚本需前期开发与后期维护(如 Web 界面元素变更后,脚本需同步修改),仅在 “长期多次回归” 场景下才能体现效率优势,短期项目反而可能增加工作量,只能说一定程度上降低了工作量。

1.2 自动化测试分类:别把 “不同自动化” 混为一谈

自动化 是统称,不同类型的自动化测试解决的问题截然不同。对 C++ 开发者而言,需重点关注两类:接口自动化与Web UI 自动化。

自动化测试类型对比:

自动化类型测试目标核心价值适用场景
接口自动化验证C++后端接口(如HTTP/GRPC接口)的输入输出正确性不依赖界面,执行速度快,可在开发早期介入(前后端未联调时即可测试)后端接口回归、数据正确性验证
Web UI自动化验证Web界面的操作流程与展示效果(如按钮点击、表单提交、页面跳转)模拟真实用户操作,覆盖“接口+界面”端到端场景前端界面回归、关键业务流程验证(如登录、下单)

1.3 自动化测试金字塔:如何分配测试资源?

测试圈经典的 “自动化测试金字塔” 模型,揭示了不同测试类型的投入产出比:

  • 底层:单元测试(如 C++ 接口的单元测试):投入少、覆盖广、发现问题早,应占自动化测试的 70%;
  • 中层:接口 / 集成测试:衔接前后端,验证模块交互,应占 20%;

顶层:UI 自动化测试:执行慢、维护成本高,仅覆盖核心业务流程,占 10% 即可。

在这里插入图片描述

但实际企业中常出现 “冰淇淋蛋筒反模式”—— 自动化测试需要大量的初始投资,找到“突破点”,与手动测试相比,我们开始看到它对长期成本产生的积极影响,也能够清楚,这两种测试活动是完全兼容,产生短期和长期利益。

在这里插入图片描述

二. Web 自动化测试核心:环境搭建与驱动管理

Web 自动化测试的本质是 “用代码模拟人操作浏览器”,需依赖三大组件: 浏览器、浏览器驱动、自动化框架(Selenium)

2.1 核心组件原理:三者如何协同工作?

  • 浏览器:执行界面操作的载体(如 Chrome、Firefox);
  • 浏览器驱动:沟通自动化脚本与浏览器的 “桥梁”(如 ChromeDriver),负责解析脚本指令并转化为浏览器可执行的操作;
  • Selenium:Python 编写的自动化框架,提供丰富的 API(如查找元素、模拟点击),简化脚本开发。

三者交互流程如下:

在这里插入图片描述


在这里插入图片描述

2.2 环境搭建:3 步搞定依赖安装

Web 自动化测试依赖 Python 环境(便于快速编写脚本,与 C++ 后端测试工具链兼容),核心安装步骤如下:
步骤 1:安装 Python(3.7~3.11 版本)
步骤 2:安装 Selenium 框架
Selenium 版本需稳定,推荐使用 4.0.0 版本(避免新版本 API 变更导致脚本报错):

pip installselenium==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 # 1. 打开浏览器----驱动管理# 安装并获取 Chrome 驱动程序路径 chrome_driver_path = ChromeDriverManager().install()# 创建谷歌浏览器驱动对象 driver = webdriver.Chrome(service=Service(chrome_driver_path)) time.sleep(2)# 2. 输入百度网址(网址要完整) driver.get("https://www.baidu.com") time.sleep(2)# 3. 找到百度输入框,输入关键词“迪丽热巴”(#kw 是搜索框对应的选择器定位方式) driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("迪丽热巴") time.sleep(2)# 4. 点击“百度一下”按钮(#su 是“百度一下”按钮的选择器定位方式) driver.find_element(By.CSS_SELECTOR,"#su").click() time.sleep(2)# 5. 关闭浏览器 driver.quit()
在这里插入图片描述


常用交互 API:

  • send_keys(text):模拟键盘输入(如输入搜索关键词);
  • click():模拟鼠标左键点击(如点击按钮、链接);
  • clear():清空输入框内容;
  • webdriver.Chrome():创建 Chrome 浏览器实例(若用 Firefox,需改为webdriver.Firefox())

Selenium元素定位方式对比:

定位方式(By类)语法示例适用场景
By.IDBy.ID, "kw"元素有唯一id(如百度输入框id为kw)
By.CSS_SELECTORBy.CSS_SELECTOR, "#kw"灵活定位(支持id、class、标签名组合)
By.XPATHBy.XPATH, "//input[@id='kw']"复杂场景(如定位表格中的第n行元素)

结尾:

往期回顾:
C++ 手写 List 容器实战:从双向链表原理到完整功能落地,附源码与测试验证
结语:Web 自动化测试不是 “银弹”,但对 C++ 后端配套的 Web 项目而言,它是回归测试的高效工具。本文从概念到实战,讲解了 Web 自动化测试的核心原理、环境搭建与 Selenium 脚本开发,关键是要记住:Web 自动化测试应聚焦核心流程,与接口自动化、单元测试配合,才能最大化测试效率与质量保障能力。

✨把这些内容吃透超牛的!放松下吧✨ʕ˘ᴥ˘ʔづきらど

Read more

手撕力扣138题:优雅复制带随机指针的链表,三步搞定经典算法题

手撕力扣138题:优雅复制带随机指针的链表,三步搞定经典算法题

手撕力扣138题✨:优雅复制带随机指针的链表,三步搞定经典算法题 * 一、题目核心剖析🔍 * 题目要求 * 解题难点 * 节点结构定义(C++) * 二、核心解题思路💡:三步法原地复制 * 步骤1:原地插入复制节点,打造“原节点-复制节点”成对链表 * 图形演示 * 核心代码片段 * 步骤2:修正复制节点的random指针,指向正确的复制节点 * 图形演示 * 核心代码片段 * 步骤3:拆分原链表与复制链表,得到最终的深拷贝链表 * 图形演示 * 核心代码片段 * 三、完整C++代码实现📝 * 四、算法性能分析📊 * 时间复杂度 * 空间复杂度 * 对比哈希表法 * 五、解题总结与拓展📚 * 解题核心要点 * 算法拓展 在链表的算法考察中,带随机指针的链表复制绝对是高频考点,力扣138题虽被标注为中等难度,但实则是锻炼链表操作思维的经典简单题。普通链表的复制仅需遍历处理next指针即可,而带random随机指针的链表,因random可

By Ne0inhk
【算法通关指南:数据结构与算法篇】二叉树相关算法题:1.美国血统 American Heritage 2.二叉树问题

【算法通关指南:数据结构与算法篇】二叉树相关算法题:1.美国血统 American Heritage 2.二叉树问题

🔥小龙报:个人主页 🎬作者简介:C++研发,嵌入式,机器人方向学习者 ❄️个人专栏:《算法通关指南》 ✨ 永远相信美好的事情即将发生 文章目录 * 前言 * 一、美国血统 American Heritage * 1.1题目 * 1.2 算法原理 * 1.3代码 * 二、 二叉树问题 * 2.1题目 * 2.2 算法原理 * 2.3代码 * 总结与每日励志 前言 本专栏聚焦算法题实战,系统讲解算法模块:以《c++编程》,《数据结构和算法》《基础算法》《算法实战》 等几个板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力ps:本章节题目分两部分,比较基础笔者只附上代码供大家参考,其他的笔者会附上自己的思考和讲解,希望和大家一起努力见证自己的算法成长 一、

By Ne0inhk
算法王冠上的明珠——动态规划之斐波那契数列问题(第二篇)

算法王冠上的明珠——动态规划之斐波那契数列问题(第二篇)

目录 1. LeetCode746. 使用最小花费爬楼梯 2. LeetCode91. 解码方法 今天我们继续来聊一聊动态规划的斐波那契数列类型的题目 1. LeetCode746. 使用最小花费爬楼梯 这个题目的话也是比较简单的。就是要求我们计算在可以一次走一步或者两步的情况下,到达结尾时的最小消耗。 所以在这道题里面它的状态表示就是走到当前位置的值的最小消耗。 所以在这道题里面它的状态转移方程就是dp[i]=min(dp[i-1],dp[i-2])+c[i]。 它的初始化就是第0个位子设置为c[0],第一个位置设置为c[1]。(怎么设置是因为我们是不知道开始的那个位置的大小,而且因为我们的状态转移方程需要依靠前两个位置的值,所以我们在这里就直接初始化前两个)。 填表顺序就是从前往后就好。 返回值就是dp表第sz-1个位置的值和第sz-2个位置的值的最小值。 class Solution { public: int minCostClimbingStairs(vector<int>& c) { int sz=c.size(); vector<

By Ne0inhk
【数据结构-初阶】详解线性表(5)---队列

【数据结构-初阶】详解线性表(5)---队列

🎈主页传送门:良木生香 🔥个人专栏:《C语言》 《数据结构-初阶》 《程序设计》 🌟人为善,福随未至,祸已远行;人为恶,祸虽未至,福已远离 上期回顾:在上一篇文章(【数据结构-初阶】详解栈和队列(1)---栈)中我们讲到了在顺序表与链表之外的另一种线性表---栈,知道了这是一种具有先进后出和后进先出特点的数据结构,既然有先进后出,那么肯定就有先进先出的数据结构,所以这就是我们今天要讲的------队列 一、队列的概念 既然我们想要实现先进先出的效果,那肯定就不像栈那样有一端是堵起来的,想必应该是两端都开口吧。嗯,事实确实如此。 队列:是只允许在一端进行数据的插入操作,在另一端进行数据的删除操作的一种特殊的线性表,其具有先进先出FIFO(first in first out)的结构特点. 入队列:进行插入操作的一端叫做队尾 出队列:进行删除操作的一端叫做队头 下面是队列的示意图: 名字叫做队列,其实就像我们排队一样,先排的人先得服务,后排的人后得到服务,在队列中,先进来的元素先得到操作,

By Ne0inhk