当前位置: 首页 > news >正文

保姆级教程:从零用Playwright+Pytest写一个带截图和Allure报告的百度搜索测试

零基础玩转PlaywrightPytest手把手打造带截图的Allure测试报告第一次接触UI自动化测试时我盯着满屏的Selenium报错信息发呆。直到发现Playwright这个神器——它像一位耐心的老师用清晰的错误提示和直观的API带我走出了新手村。今天我们就用最接地气的方式从百度搜索这个经典案例开始体验现代测试工具链的丝滑流畅。1. 环境准备五分钟搞定测试装备工欲善其事必先利其器。打开终端让我们用pip这条魔法咒语召唤测试界的四大护法pip install playwright pytest pyyaml allure-pytest python -m playwright install chromium小贴士如果遇到网络问题可以尝试添加--index-url https://pypi.tuna.tsinghua.edu.cn/simple使用国内镜像源验证安装是否成功import playwright print(playwright.__version__) # 应该输出类似1.40.0的版本号注意Allure需要额外安装命令行工具推荐从 官方GitHub仓库 下载最新版本解压后将bin目录加入系统PATH2. 第一个测试脚本让浏览器自动搜索在项目根目录创建test_baidu.py我们来编写一个会自己操作浏览器的机器人import allure from playwright.sync_api import Page def test_baidu_search(page: Page): 测试百度搜索功能 # 访问百度首页 page.goto(https://www.baidu.com) # 定位搜索框并输入关键词 search_box page.locator(#kw) search_box.click() search_box.fill(Playwright自动化测试) # 点击搜索按钮 search_button page.get_by_role(button, name百度一下) search_button.click() # 验证搜索结果 assert playwright.dev in page.title() # 保存截图 page.screenshot(pathsearch_result.png) allure.attach.file(search_result.png, name搜索结果, attachment_typeallure.attachment_type.PNG)运行测试的命令很简单pytest test_baidu.py --alluredir./report allure serve ./report3. 进阶技巧用YAML管理测试数据当测试用例增多时硬编码的数据会成为维护噩梦。我们用YAML来解耦创建data/search_keywords.yamltest_cases: - name: 搜索Python教程 url: https://www.baidu.com keyword: Python入门教程 expected: 菜鸟教程 - name: 搜索自动化测试 url: https://www.baidu.com keyword: UI自动化测试 expected: Playwright修改测试脚本读取YAML数据import yaml import pytest def load_test_data(): with open(data/search_keywords.yaml) as f: return yaml.safe_load(f) pytest.mark.parametrize(case, load_test_data()[test_cases]) def test_baidu_search(page: Page, case): page.goto(case[url]) page.locator(#kw).fill(case[keyword]) page.get_by_role(button, name百度一下).click() assert case[expected] in page.title()4. 打造专业测试报告Allure的魔法Allure能把枯燥的测试结果变成视觉盛宴。我们在conftest.py中添加这些钩子函数import allure import pytest from datetime import datetime pytest.hookimpl(hookwrapperTrue) def pytest_runtest_makereport(item, call): outcome yield report outcome.get_result() if report.when call: # 添加环境信息 allure.dynamic.title(item.function.__doc__ or item.name) allure.dynamic.description( f测试时间: {datetime.now().strftime(%Y-%m-%d %H:%M:%S)}\n f运行时长: {round(report.duration, 3)}秒 ) # 自动附加页面截图 if page in item.funcargs: page item.funcargs[page] screenshot page.screenshot() allure.attach(screenshot, name页面截图, attachment_typeallure.attachment_type.PNG)这样生成的报告会包含美观的时间线图表丰富的环境信息自动截取的页面快照清晰的测试步骤树5. 常见问题排雷指南在实际教学中我发现新手常会遇到这些坑浏览器无法启动确保执行过playwright install chromium检查防火墙是否阻止了浏览器进程尝试添加--headed参数可视化运行pytest --headed test_baidu.py元素定位失败Playwright提供了多种定位策略定位方式示例适用场景CSS选择器page.locator(#kw)常规元素文本定位page.get_by_text(登录)按钮/链接文本角色定位page.get_by_role(button)标准HTML角色XPathpage.locator(//input[namewd])复杂层级结构测试不稳定添加等待策略代替硬性sleeppage.locator(#kw).click(timeout5000) # 显式等待5秒 page.wait_for_selector(.result, statevisible) # 等待结果出现启用重试机制pytest --reruns 3 --reruns-delay 1 # 失败时自动重试3次6. 项目结构最佳实践成熟的测试项目应该像乐高积木一样模块化baidu_test/ ├── conftest.py # 共享fixture和钩子 ├── data/ │ └── search_keywords.yaml ├── pages/ # 页面对象模型 │ └── baidu_page.py ├── tests/ │ └── test_search.py ├── utils/ # 工具函数 │ ├── allure_util.py │ └── screenshot.py └── reports/ # 自动生成其中baidu_page.py封装页面操作class BaiduPage: def __init__(self, page): self.page page self.search_box page.locator(#kw) self.search_button page.get_by_role(button, name百度一下) def navigate(self): self.page.goto(https://www.baidu.com) def search(self, keyword): self.search_box.fill(keyword) self.search_button.click()这样测试用例就变得极其简洁def test_search(baidu_page): baidu_page.navigate() baidu_page.search(Playwright) assert Playwright in baidu_page.page.title()7. 调试技巧让问题无所遁形Playwright自带的调试工具是排查问题的利器录制功能playwright codegen https://www.baidu.com会启动一个浏览器窗口你的所有操作都会自动生成对应的Python代码追踪查看# 在测试开始时启动追踪 context browser.new_context() context.tracing.start(screenshotsTrue, snapshotsTrue) # 测试结束后保存追踪文件 context.tracing.stop(pathtrace.zip)用Playwright Inspector查看追踪文件playwright show-trace trace.zip这个可视化工具能让你逐帧回放测试过程查看每个步骤的DOM快照检查网络请求和响应分析执行时间线8. 持续集成让测试自动运行最后我们让这套测试能在GitHub Actions上每天自动执行创建.github/workflows/test.ymlname: UI Automation Test on: schedule: - cron: 0 0 * * * # 每天UTC时间0点运行 push: branches: [ main ] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Set up Python uses: actions/setup-pythonv4 with: python-version: 3.10 - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt python -m playwright install python -m playwright install-deps - name: Run tests run: | pytest --alluredir./report - name: Upload Allure report uses: actions/upload-artifactv3 with: name: allure-report path: ./report在本地开发时我习惯用这个alias快速验证改动alias runtestpytest -xvs allure serve report
http://www.zskr.cn/news/1383337.html

相关文章:

  • 2026年北京房产律师权威排行榜:专业实力解析与避坑指南 - 资讯快报
  • 开源TTS引擎espeak-ng终极指南:5大技术突破深度解析
  • 2026年西安高新区代理记账行业观察:创企宝深化本土全周期企服体系,聚焦中小微企业合规经营 - GrowthUME
  • Performance-Fish:让《环世界》告别卡顿的终极性能优化指南
  • 2026年哈尔滨家政推荐:选保姆必看这份排名 - 资讯快报
  • 机器人全身投掷技术:残差策略与模型预测控制实践
  • 3个步骤彻底解决WSA安装失败问题:从错误代码到完美运行
  • 工业导热油品牌如何科学选型?基于温度、行业与成本的深度对比 - GrowthUME
  • 我如何用契约测试解决了微服务联调的噩梦?
  • 保姆级避坑指南:手把手教你配置MoveIt!与Gazebo联合仿真(附完整YAML文件)
  • 统信UOS浏览器书签同步难题?一招搞定所有新用户默认书签配置
  • 低查重的AI教材写作秘密!揭秘AI写教材如何1天完成10万字内容
  • 3步快速解密中兴光猫配置:ZET工具终极实战指南
  • 3分钟告别英文恐惧:Android Studio中文界面轻松切换指南
  • 外卖霸王餐接口对接开发,支持美团/饿了么/京东
  • 2026年第二季度日式搬家选型参考 - 资讯快报
  • 终极歌词管理神器:ZonyLrcToolsX 一站式解决歌词下载难题
  • 微信好友关系一键检测终极指南:WechatRealFriends免费工具快速清理单向好友
  • C#转Python第1.8篇:数组 vs 列表:C# 的 Array 和 List 在 Python 里合体了
  • Ubuntu使用elementaryos系桌面
  • WaveTools:鸣潮游戏性能优化与配置管理终极指南
  • 【云雾效果商业级交付标准】:基于Adobe Sensei图像雾度分析报告(N=1,247张MJ生成图),锁定雾浓度≤0.38的7个关键阈值参数
  • 2026这6款神级降AIGC平台大公开,一键让AIGC率直逼绝对安全线!
  • Base64 编码 URI/URL 详解
  • 别再熬夜改论文了!okbiye 毕业论文 AI 写作功能,帮你把毕业季的焦虑全清掉
  • AI读书笔记——很有意思的一次总结
  • CentOS 7服务器安全加固实战:防火墙、SSH与服务精简
  • 【Lovable电商网站搭建权威白皮书】:工信部信通院联合认证的GDPR+等保2.0双合规实施路径图(仅限前500名开发者领取)
  • 基于ATtiny44的微型I2C总线扫描仪设计与实现
  • OPD 成熟度模型:评估你的部门离 AI 原生还有多远