自动化测试概念与 Web 自动化实战(基于 Selenium)

在软件测试领域,自动化测试是提升测试效率、保障回归测试质量的核心手段。尤其对于 C++ 开发的项目,自动化测试能有效减少重复手工操作,避免新增功能对历史功能的影响。本文从自动化基础概念入手,详解自动化分类、Web 自动化测试核心工具(Selenium)及实战流程。

一、自动化测试基础:从概念到核心认知

在学习具体技术前,我们首先要理清自动化测试的本质、目标及常见误区 —— 这是避免后续实践走偏的关键。

1.1 什么是自动化测试?

自动化测试的核心是 “用程序代替人工完成操作”,就像生活中的自动洒水机(通水后自动旋转洒水)、自动洗手液(感应出液)、超市自动闸门(无需手动开关),其本质都是通过预设逻辑减少人力消耗,同时提升效率和稳定性。

在软件测试中,自动化测试主要解决两大问题:

  • 回归测试效率低:软件迭代时,需反复验证历史功能是否正常(如 V2.0 版本不能影响 V1.0 的登录、支付功能),手工回归耗时且易出错,自动化可一键执行用例。
  • 人力成本高:重复的 “打开页面→输入数据→点击按钮→验证结果” 操作,可通过脚本自动完成,让测试人员聚焦更复杂的探索性测试。

1.2 自动化测试的核心误区(面试高频考点)

很多初学者对自动化测试存在认知偏差,这些误区也是笔试 / 面试的高频考点,必须明确:

误区 1:自动化测试能完全取代人工测试?

答案:不能
自动化测试的脚本由人工编写,若后续功能变更(如界面按钮位置调整、接口参数修改),脚本需同步维护;且自动化无法完成 “主观判断类” 测试(如界面美观度、操作流畅性),自动化测试不一定比人工测试更能保障系统的可靠性,这些仍需人工评估。自动化是人工测试的补充,而非替代

误区 2:自动化测试能大幅度降低工作量?

答案:错误
自动化测试存在 “初始投入成本”(编写脚本、搭建环境),仅在 “长期重复执行” 场景下(如回归测试)才能体现价值;若测试用例仅执行 1-2 次,手工测试反而更高效。而且测试工作不仅仅包含执行测试阶段,测试主要由人工测试,通过自动化辅助测试。笔试中遇到 “大幅度降低工作量”“完全取代” 等绝对化表述,需谨慎选择(通常为错误选项),可以说“一定程度上”。

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

自动化测试的主要应用场景是回归测试,即:

  • 软件迭代多个版本时,对历史功能进行整体验证(如 V3.0 上线前,需验证 V1.0-V2.0 的所有核心功能)。
  • 新增功能上线后,验证其是否影响已有功能(如新增 “会员体系” 后,可能出现代码的增删改查,有可能对历史功能产生影响,需确认普通用户的 “登录、下单” 功能正常)。
  • 新版本即将上线,意味着有用户使用新版本,也有用户使用旧版本。如果不对旧版本测试,可能会出现新版本上线后,旧版本无法使用或者旧版本出现功能故障,所以都要测试。

其他测试场景(如探索性测试、新功能测试)仍以人工为主,自动化仅作为辅助。

二、自动化测试分类:别再混淆不同类型的自动化

自动化测试是 “统称”,就像 “吃瓜” 包含吃西瓜、哈密瓜、香瓜,自动化也分为接口自动化、UI 自动化(Web / 移动端) 等类型。不同类型的自动化解决的问题、实施难度差异极大,需明确区分。

2.1 接口自动化测试:系统 “内部通信” 的验证

什么是接口自动化?

接口是系统内部模块间、或系统与外部服务间的 “通信协议”(如 C++ 后端与前端的 API 接口、支付系统与银行的对接接口)。接口自动化测试是通过脚本模拟接口调用,验证输入参数、输出结果、状态码是否符合预期,无需关注界面。

为什么要做接口自动化?

  • 更早发现问题:接口测试可在前端开发完成前执行(只需后端提供接口文档),提前暴露后端逻辑漏洞(如参数校验不严格、返回格式错误);
  • 稳定性高:接口不依赖界面,受环境影响小(如前端按钮位置变更不影响接口测试);
  • 效率高:一次可执行大量接口用例(如批量验证 100 个接口的正常 / 异常场景),远超手工测试效率。

实战场景(以校招网站为例)

打开浏览器 F12 的 Network 面板,访问 “校招信息列表” 页面时,前端会向后端发送接口请求(如kuxuezhang.com/index?page=1&size=16),接口自动化可模拟该请求,验证返回的 “校招信息列表” 是否完整、“未读数量” 是否正确。

2.2 前端自动化测试:用户 “看得见” 的界面验证

UI 自动化测试针对软件界面(如 Web 页面、手机 APP),模拟人工操作(点击按钮、输入文本、选择下拉框),验证界面展示和交互是否符合预期。主要分为Web 自动化移动端自动化两类。

2.2.1 移动端自动化测试

  • 定义:针对手机 APP 的界面测试,验证 APP 在不同手机型号、系统版本(如 Android 12、iOS 16)上的表现;
  • 实施方式:通常不直接在真实手机上测试,而是通过模拟器(如雷电模拟器、Android Studio 模拟器),在电脑上编写脚本操作模拟器中的 APP;
  • 核心挑战:稳定性差。受手机分辨率、系统版本、APP 弹窗(如广告、权限请求)影响大,脚本易失败(如按钮位置在小屏手机上偏移,导致点击失败)。

2.2.2 Web 自动化测试(重点)

  • 定义:针对 Web 页面(如百度、电商网站)的界面测试,模拟人工在浏览器上的操作(打开页面、输入关键词、点击搜索);
  • 核心价值:解决 Web 页面的回归测试问题(如百度首页的 “搜索”“地图” 功能,每次迭代后需验证是否正常);
  • 实施工具:Selenium(最常用的 Web 自动化工具,支持 Chrome、Firefox 等浏览器,可结合 Python/C++ 编写脚本)。

Web 自动化实战场景(百度搜索)

手工百度搜索的步骤是 “打开 Chrome→访问https://www.baidu.com→输入‘迪丽热巴’→点击‘百度一下’”,Web 自动化可通过脚本自动完成这一系列操作,并验证搜索结果中是否包含 “迪丽热巴” 相关内容。

2.3 自动化测试金字塔:哪种自动化性价比最高?

测试圈有个经典的理想化 “自动化测试金字塔” 模型:

手动/探索性测试:投入的人力、时间精力最多,但是获得的投资回报率最少。

UI 自动化测试:前端。测试人员编写UI自动化测试脚本。

API / 集成/组件测试:接口。测试人员编写接口自动化测试脚本。

单元测试:通常由开发人员编写单元测试脚本来执行单元测试。写完代码之后就执行,因为开发人员最熟悉自己写的代码,不需要额外的时间精力去熟悉代码。投入的人力、时间精力最少,但是获得的投资回报率最高。

前端看到的东西非常多,所有看到的每个元素都需要测试,而且所涉及到的不可靠因素太多了,编写前端自动化脚本相对于接口自动化测试脚本而言难度大、消耗成本大。

理想的自动化测试金字塔表达了自动化测试的理想情况,利用较少的时间和精力在单元测试上就能够发现更多有效的问题。

然后实际上在企业中,自动化往往是“冰淇淋蛋筒反模式”:

在企业中,对应开发人员来说,相较于测试人员不是那么重视测试,所以,单元测试所用时间精力少。测试人员驱动开发人员来执行单元测试。UI 自动化测试和API / 集成/组件测试发现的问题也是有限的。

自动化需要大量的初始投资,找到“突破点”,与手动测试相比,我们开始看到它对长期成本产生的积极影响,也能够清楚,这两种测试活动都是完全兼容,产生短期和长期利益。

核心结论:

  • 理想策略:优先做单元测试和 API 自动化,再做 UI 自动化。单元测试(如 C++ 的函数测试)能覆盖大部分代码逻辑,API 自动化稳定性高,两者性价比最高;
  • 企业现状:很多企业陷入 “冰淇淋蛋筒反模式”—— 过度投入 UI 自动化(占比 60% 以上),但因稳定性差、维护成本高,实际收益低。需避免这种误区。

三、Web 自动化测试实战:基于 Selenium+Python

人工:

自动化:

3.1 驱动

测试前提是需要打开浏览器,通过访问web服务器来对服务器界面进行一系列的操作。对于手工测试来说,这一系列的操作都需要测试人员手动的,一步一步的来执行测试。那么对于自动化程序来说,程序如何才能打开浏览器并执行我们预期的操作流程呢?

车有了驱动才能够让车跑起来,计算机有了驱动程序就可以与设备(耳机,摄像头,麦克风,键盘,显示器等等设备)进行通信。

程序想要打开web浏览器就需要安装web驱动(即WebDriver),WebDriver 以本地化方式驱动浏览
器。

3.2 安装web驱动

进入selenium官网后:

在目录上选择相应的,并且点击相关下载界面链接:

选择python版本:

找到要安装的浏览器版本链接,并点击:

点击下载:

选择自己使用的浏览器版本,并且进入下载:

注意选择和浏览器版本配套的驱动才可以,如果不匹配则无法开发浏览器。

所以每次浏览器更新,都需要重新下载新的版本,整个流程非常复杂!!!

3.3 驱动管理工具webdriver-manager

为解决 “版本不匹配” 问题,Selenium 提供了webdriver-manager工具,无需手动安装浏览器驱动,可自动下载并管理驱动(无需人工手动更新,浏览器更新不影响自动化的执行)。

环境搭建(Windows 系统)

步骤 1:安装 Python

确保 Python 已添加到系统环境变量(cmd 输入python --version能显示版本号)。

步骤 2:安装 webdriver-manager(自动管理驱动)

打开 cmd,执行命令:

pip install webdriver-manager

该工具会自动识别浏览器版本,下载对应的驱动,无需人工干预。

步骤 3:安装 Selenium(4.0.0 版本,统一版本避免兼容问题)

执行命令:

pip install selenium==4.0.0

出现successful,则安装完成。

安装完成后,在 Python 中输入import selenium无报错,说明安装成功。

以上适合电脑本身安装一个版本的情况,如果安装两个版本,操作如下:

webdriver-manager支持的python版本为:3.7~3.11

3.4 第一个 Web 自动化脚本:百度搜索

目标:通过脚本自动打开浏览器→访问百度首页→输入→点击 “百度一下”→关闭浏览器。

在python环境中:

选择相应的解释器,在新建的项目中,检查刚刚所安装的库:

新建文件:

脚本代码:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager#打开浏览器——驱动管理
#返回驱动路径,将其保存下来
ChromeIns = ChromeDriverManager().install()
#创建谷歌浏览器对象
#路径传递后,做为Chrome参数,通过驱动打开浏览器
driver = webdriver.Chrome(service = Service(ChromeIns))#输入百度网址
driver.get("https://www.baidu.com")#输入关键词“迪丽热巴”
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("迪丽热巴")
#点击“百度一下”按钮
driver.find_element(By.CSS_SELECTOR,"#su").click()#关闭浏览器
driver.quit()

由于程序很快只是闪现一下所以补充代码:

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#打开浏览器——驱动管理
#返回驱动路径,将其保存下来
ChromeIns = ChromeDriverManager().install()
#创建谷歌浏览器对象
#路径传递后,做为Chrome参数,通过驱动打开浏览器
driver = webdriver.Chrome(service = Service(ChromeIns))#网页停留一段时间
time.sleep(3)#输入百度网址
driver.get("https://www.baidu.com")
time.sleep(3)#输入关键词“迪丽热巴”
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("迪丽热巴")
time.sleep(3)#点击“百度一下”按钮
driver.find_element(By.CSS_SELECTOR,"#su").click()
time.sleep(3)#关闭浏览器
driver.quit()

但是我们发现一个问题,就是百度点开以后,只是发生了网页的打卡,并没有进行搜索,是因为:

1."#kw"百度的元素换了,要定位正确的元素。

定位元素

步骤如下:

进入百度界面

按F12,进入以下界面,点击所圈按钮:

利用鼠标,对所查找的id进行定位

找到后,复制元素即可。

2.现在百度的元素,输入了元素就会发生跳转了。不需要再次点击百度一下按钮了,所以“百度一下”按钮的点击可以删去。

修改后的代码如下:

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#打开浏览器——驱动管理
#返回驱动路径,将其保存下来
ChromeIns = ChromeDriverManager().install()
#创建谷歌浏览器对象
#路径传递后,做为Chrome参数,通过驱动打开浏览器
driver = webdriver.Chrome(service = Service(ChromeIns))#网页停留一段时间
time.sleep(3)#输入百度网址
driver.get("https://www.baidu.com")
time.sleep(3)#输入关键词“迪丽热巴”
driver.find_element(By.CSS_SELECTOR,"#chat-textarea").send_keys("迪丽热巴")
time.sleep(3)#点击“百度一下”按钮
#driver.find_element(By.CSS_SELECTOR,"#chat-submit-button").click()
#time.sleep(3)#关闭浏览器
driver.quit()

运行结果部分截图如下:

3.5 Selenium + 驱动 + 浏览器的工作流程(深入理解)

1. 通过selenium编写的自动化脚本代码中在ChromeDriverService中创建一个服务。

2. 向浏览器驱动程序发送HTTP请求浏览器驱动程序解析请求,操控打开浏览器,并获得sessionid,如果再次对浏览器操作需携带此id。

3.执行一系列的操作步骤,比如:输入文本进行查找。浏览器将返回的结果,再返回浏览器驱动,最后返回给自动化脚本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94537.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NeRAF、ImVid论文解读

目录 一、NeRAF 1、概述 2、方法 3、训练过程 4、实验 二、ImVid 1、概述 2、Imvid数据集 3、STG方法 一、NeRAF 1、概述 NeRF类方法仅支持视觉合成功能,缺乏声学建模能力。对于以往的声学建模(如NAR/INRAS)会忽略三维场景几何对声…

重复文件删除查找工具 Duplicate Files Search Link v10.7.0

软件介绍 Duplicate Same Files Searcher 是一款面向 Windows 平台的专业重复文件检索与清理工具,兼具符号链接替换与 NTFS 高级特性支持,可在无损数据的前提下大幅缩减磁盘冗余。 软件使用 软件打开后是英文版,手动切换中文(按…

简易shell

目录 一、整体功能概述 函数准备 1.env命令 2.getenv()函数 3.snprintf 4.strtok()函数 三、全局变量 四、核心功能函数解析 1. 信息获取函数 2. 命令行交互 3. 命令解析 4. 普通命令执行 5. 内置命令处理(核心功能) 五、主函数流程 六、总…

网关资源权限预加载:从冷启动阻塞到优雅上线的完整闭环

网关资源权限预加载:从冷启动阻塞到优雅上线的完整闭环 基于 Spring Cloud Gateway + Spring Cloud Alibaba Nacos ——一篇可落地的技术方案与源码级实现 1. 场景与痛点 在微服务网关层做 统一资源权限校验 时,必须满足: 启动阻塞:所有权限规则加载完成前,不监听端口,拒…

open webui源码分析8—管道

我们可以把Open WebUI想象成一个管道系统,数据通过管道和阀门流动。管道作为open webui的插件,可以为数据构建新的通路,可以自定义逻辑和处理数据;阀门是管道的可配置部件,控制数据流过管道时的行为。管道可以理解成用…

深入理解 C 语言 hsearch 哈希表:限制、技巧与替代方案

概述 C 语言标准库中的 hsearch 系列函数提供了一套简单易用的哈希表实现,包含在 <search.h> 头文件中。这组函数虽然接口简洁,但在实际使用中存在一些重要的限制和注意事项。本文将深入探讨 hsearch 的功能特点、设计局限,并提供实用的解决方案和替代建议。 hsearc…

Web网络开发 -- HTML和CSS基础

HTML 超文本编辑语言 HTML 介绍 HTML的英文全称是 Hyper Text Markup Language&#xff0c;即超文本标记语言。HTML是由WEB的发明者 Tim Berners-Lee &#xff08;蒂姆伯纳斯李&#xff09;和同事 Daniel W. Connolly于1990年创立的一种标记语言&#xff0c; 它是标准通用化标…

Python爬虫实战:研究开源的高性能代理池,构建电商数据采集和分析系统

1. 绪论 1.1 研究背景与意义 随着互联网技术的飞速发展,网络数据已成为信息时代的核心资源之一。从商业角度看,企业通过分析竞争对手的产品信息、用户评价等数据,可制定更精准的市场营销策略;从学术研究角度,研究者通过爬取社交媒体数据、学术文献等,可开展社会网络分析…

项目设计文档——爬虫项目(爬取天气预报)

一、项目背景以及项目意义 项目背景&#xff1a; 爬虫技术的核心目的是自动化地从互联网上采集&#xff0c;提取和存储数据。网络爬虫是一种自动化程序&#xff0c;用于从互联网上抓取数据并进行处理。C语言因其高效性和接近硬件的特性&#xff0c;常被用于开发高性能的网络爬…

Python 操作 PPT 文件:从新手到高手的实战指南

在日常工作和学习中&#xff0c;PPT 是我们展示信息和进行演示的重要工具。无论是制作报告、演讲还是教学课件&#xff0c;PPT 都扮演着不可或缺的角色。然而&#xff0c;当面对大量重复性的 PPT 编辑任务时&#xff0c;手动操作不仅耗时耗力&#xff0c;还容易出错。幸运的是&…

系统设计中的幂等性

1. 基本概念 幂等性&#xff08;Idempotence&#xff09;是系统设计中经常提到的概念。如果某个操作执行一次或多次都能产生相同的结果&#xff0c;那么它就是幂等的。2. 代码示例 下面这段代码是幂等的。无论你调用多少次&#xff0c;show_my_button 的最终状态都是False。 de…

Pandas vs Polars Excel 数据加载对比报告

📊 Pandas vs Polars Excel 数据加载对比报告 1. 数据基本情况 数据文件:data.xlsx 数据规模:23,670 行 3 列 字段: case_time:日期/时间 case_name:公司名称(字符串) board:所属板块(字符串) 2. 加载方式与代码 Pandas import pandas as pdfrom tools import…

Kafka 为什么具有高吞吐量的特性?

Kafka 高吞吐量原因&#xff1a;面试题总结 在面试中&#xff0c;Kafka 的高吞吐量设计是高频考点&#xff0c;核心需围绕“架构设计”“存储优化”“网络效率”“资源利用”四个维度展开&#xff0c;以下是结构化总结&#xff1a; 一、核心架构&#xff1a;并行化与分层设计分…

MCP 协议原理与系统架构详解—从 Server 配置到 Client 应用

1. MCP MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;是开发 Claude 模型的(Anthropic)公司推出的一个开放标准协议&#xff0c;就像是一个 “通用插头” 或者 “USB 接口”&#xff0c;制定了统一的规范&#xff0c;不管是连接数据库、第三方…

uniapp安卓真机调试问题解决总结

uniapp安卓真机调试遇到各种连接不上问题&#xff1a; 手机上打开调试数据线不行&#xff0c;换数据线电脑重启手机重启拔出数据线&#xff0c;换个USB插口。

Linux Qt创建和调用so库的详细教程

一、创建so库1.文件-->新建文件或项目-->Library->C Library&#xff0c;如下图2.工程命名为Example3.一直下一步就可以4、工程创建完成&#xff0c;如下图5、删除Example_global.h6、配置.pro文件# 设置输出目录 DESTDIR $$PWD/output #只生成.so文件 CONFIG plugi…

【深度学习】蒙特卡罗方法:原理、应用与未来趋势

作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程&#xff0c;深度学习领域研究生必读教材),开始深度学习领域学习&#xff0c;深入全面的理解深度学习的理论知识。 之前的文章参考下面的链接&#xf…

区块链技术原理(18)-以太坊共识机制

文章目录前言什么是共识&#xff1f;什么是共识机制&#xff1f;共识机制的核心目标共识机制的类型PoW&#xff08;工作量证明&#xff09;协议&#xff1a;&#xff08;2015-2022&#xff09;PoS&#xff08;权益证明&#xff09;协议&#xff1a;&#xff08;PoS&#xff0c;…

java基础(十五)计算机网络

网络模型概述 为了使得多种设备能通过网络相互通信&#xff0c;并解决各种不同设备在网络互联中的兼容性问题&#xff0c;国际标准化组织&#xff08;ISO&#xff09;制定了开放式系统互联通信参考模型&#xff08;OSI模型&#xff09;。与此同时&#xff0c;TCP/IP模型作为实际…

idea将服务封装为一个jar包

你使用的是 IntelliJ IDEA 2018&#xff0c;这个版本虽然不是最新的&#xff0c;但完全支持通过 图形化界面 打 JAR 包&#xff08;无需命令行&#xff09;&#xff0c;非常适合你在公司内部将 Snowflake 模块打包成通用组件。下面我将 手把手、一步一步、图文流程式地教你&…