Pytest+Selenium入门:从零开始直接实战写自动化测试
刚开始学自动化测试的时候我就发现,很多教程一上来就是大量前置概念讲解,不少同学刷了十节课下来,还是连完整的脚本都跑不起来。其实对入门来说,动手实践才是最高效的学习方式。这篇文章就跳过冗余的理论铺垫,直接带你上手写代码,适合有一点代码基础、想在实战中边做边学的同学。以下贴出了用到的工具,需要全部配置成功再学习。
搭完第一个百度新闻搜索的小项目,把项目里每个目录文件的作用、驱动下载的方法和新手最容易踩的坑都整理了一遍,纯小白视角的学习笔记,帮同样刚入门的小伙伴少走弯路。
项目代码贴在最后了。
用到的工具总览
按作用分为 4 大类,是 Web UI 自动化测试的标准技术栈:
- 运行基础:Python 3.14
所有测试代码的编写与运行环境,提供基础语法和标准库,支撑第三方测试工具运行。
- 测试框架:pytest
自动化测试的执行与管理工具,自动识别test_开头的测试用例,执行测试并输出通过 / 失败结果,是自动化测试的核心管理框架。
- 自动化核心:Selenium + ChromeDriver + Chrome 浏览器
- Selenium:Web 自动化核心库,提供元素定位、输入、点击、页面跳转等全套浏览器操作 API。
- ChromeDriver:Chrome 官方驱动,充当代码与浏览器之间的通信桥梁,把代码指令转为浏览器的实际操作。
- Chrome 浏览器:自动化测试的执行载体,也就是被控制、被测试的目标浏览器。
- 开发工具:VS Code
代码编辑器,配合 Python 插件提供代码补全、语法检查、自动格式化、内置终端等能力,用于编写和调试测试脚本。
补充:过程中接触过webdriver-manager驱动自动管理工具,因网络限制,最终改用本地手动放置驱动的方案。
一、项目根目录文件说明
给大家拆解一下项目里每个文件和文件夹都是干嘛的,刚接触的时候不用死记,知道作用就行:
- PY(项目根目录):你创建的项目文件夹,所有代码和依赖文件都放在这里面。
- .pytest_cache:pytest 自动生成的测试缓存目录,保存历史运行记录以加快后续执行速度,可随意删除,不影响代码功能。
- .vscode/settings.json:VS Code 的项目专属配置文件,存放 pytest 框架启用、代码自动格式化、终端中文编码等项目级规则。
- __pycache__:Python 自动生成的字节码缓存目录,存放编译后的 .pyc 文件以加快脚本启动速度,可随意删除。
- test_baidu_news_search.py:核心测试脚本文件,存放百度新闻搜索的测试用例代码,是 pytest 执行测试的核心业务文件。
- chromedriver.exe:Chrome 浏览器驱动程序,是 Selenium 代码与浏览器之间的通信桥梁,版本需与 Chrome 浏览器大版本匹配。下载后将 chromedriver.exe 放在项目文件夹下。
二、ChromeDriver 手动配置与国内下载地址
我这里用的是手动配置浏览器驱动的方式,主要是避免自动匹配驱动时因为网速问题导致运行失败,更稳定可控。手动配置的核心要求就是:chromedriver.exe 文件版本必须和自己的 Chrome 浏览器版本匹配。(用其他浏览器也是一样的,需要找到相关驱动)
给大家整理了国内高速镜像地址,下载比官网快很多,按自己的浏览器版本选对应的入口:
- 新版驱动(Chrome 115.0.5763.0 及以上版本)
Chrome 115 之后官方更换了驱动仓库,所有高版本驱动都在这里:
CNPM Binaries Mirror
- 旧版驱动(Chrome 114 及更低版本)
仅当使用老版本 Chrome 时用这个地址:
CNPM Binaries Mirror
三、测试脚本完整执行流程
给大家梳理一下这个百度新闻搜索脚本的完整执行逻辑,新手可以对着代码一步步对应,理解每一步在做什么:
初始化驱动 → 配置浏览器 → 打开百度新闻 → 定位搜索框 → 输入关键词 → 回车搜索 → 等待页面加载 → 验证结果 → 关闭浏览器
四、新手高频踩坑提醒
这个是我自己踩了好多次的坑,一定要记牢:
改完代码一定要按Ctrl+S保存,否则运行的还是旧代码,会一直报同样的错,排查半天找不到原因。
保存文件后,在终端执行以下命令即可运行测试:
python -m pytest tests/test_baidu_news_search.py -ssettings.json
{ "python-envs.defaultEnvManager": "ms-python.python:system", // 开启 pytest+unittest 双兼容 "python.testing.pytestEnabled": true, "python.testing.unittestEnabled": false, // 执行用例自动生成 html 报告 "python.testing.pytestArgs": [ "." ], // Windows 终端中文不乱码 "terminal.integrated.env.windows": { "PYTHONIOENCODING": "utf-8" }, // yaml 文件保存自动格式化 "[yaml]": { "editor.formatOnSave": true }, // Python 代码保存自动格式化、整理导入包 "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.organizeImports": "explicit" }, // 代码自动补全、类型检查 "python.analysis.autoImportCompletions": true, "python.analysis.typeCheckingMode": "basic" }test_baidu_news_search.py
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys # 导入键盘按键工具 from selenium.webdriver.chrome.service import Service import time def test_baidu_news_search(): # 调用本地驱动 service = Service(executable_path=r"E:\py\chromedriver.exe") driver = webdriver.Chrome(service=service) driver.implicitly_wait(15) driver.maximize_window() # 打开百度新闻 driver.get("https://news.baidu.com") # 定位搜索框,输入关键词 search_input = driver.find_element(By.ID, "ww") search_input.send_keys("自动化测试") # 按回车键提交搜索(替代 submit,兼容所有网站的搜索框) search_input.send_keys(Keys.ENTER) # 等待页面跳转加载 time.sleep(2) # 断言验证搜索结果 assert "自动化测试" in driver.title, "搜索失败:页面标题不包含关键词" time.sleep(2) driver.quit()---
以上就是这次入门学习的全部整理内容,后续会继续更新自动化测试学习过程中的笔记和踩坑记录,一起进步~