ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SeleniumBase Case Plans 实战:用 Markdown 测试计划驱动 Swag Labs 端到端测试

SeleniumBase Case Plans 实战:用 Markdown 测试计划驱动 Swag Labs 端到端测试 SeleniumBase Case Plans 实战用 Markdown 测试计划驱动 Swag Labs 端到端测试【免费下载链接】SeleniumBaseAPIs for browser automation, testing, and bypassing bot-detection. Includes CDP Mode: A stealthy configuration for chromium that passes every bot detection test.项目地址: https://gitcode.com/GitHub_Trending/se/SeleniumBase本篇技术指南以仓库中的 my_first_test.MyTestClass.test_swag_labs Case Plan 为骨架讲解 SeleniumBase 的 Case Plans测试用例计划机制它如何用一张 Markdown 表格描述一个端到端测试的步骤与预期结果如何与 examples/my_first_test.py 中的真实测试代码一一对应以及如何借助sbase caseplans生成器管理测试计划并汇总为case_summary.md。读完本文你将掌握 Case Plan 的文件格式、与源码的映射方法、测试运行方式以及整套测试计划管理工具的用法。一、Case Plans以 Markdown 表格为载体的测试用例管理SeleniumBase Case Plans 是一套基于 Markdown 的测试用例管理方案。每个 Case Plan 是一个.md文件以“测试地址”为标题用一张「步骤 / 步骤描述 / 预期结果」三列表格来记录某个测试方法的执行流程。由于 Markdown 表格可以直接在 GitHub 等代码托管平台上渲染测试计划无需额外工具即可被团队审阅和引用。仓库examples/case_plans/目录下共存放了 8 份 Case Plan本文聚焦的这份 my_first_test.MyTestClass.test_swag_labs.md 对应examples/my_first_test.py中的MyTestClass::test_swag_labs测试方法覆盖了一个典型的电商购物全流程登录 → 加入购物车 → 查看购物车 → 结账 → 下单成功 → 登出。一个标准的 Case Plan 文件由两部分构成第一行测试地址用两个反引号包裹格式为文件名.py::类名::方法名第二行---分隔线第三行起Markdown 表格表头固定为| # | Step Description | Expected Result |第二行是| - | ---------------- | --------------- |对齐线之后每行是一个测试步骤。表格格式虽然是 Markdown但构造时必须保证竖线|、短横线-与空格的排布正确才能正常渲染需要换行时使用br /需要空步骤时在两条竖线之间放一个空格即| |。二、六步 Case Plan 全文从登录到登出的完整购物链路原文档完整定义了test_swag_labs的 6 个步骤及其预期结果内容如下已按原样完整保留my_first_test.py::MyTestClass::test_swag_labs --- | # | Step Description | Expected Result | | - | ---------------- | --------------- | | 1 | Log in to https://www.saucedemo.com with standard_user. | Login was successful. | | 2 | Click on the Backpack ADD TO CART button. | The button text changed to REMOVE. | | 3 | Click on the cart icon. | The Backpack is seen in the cart. | | 4 | Click on the CHECKOUT button. br / Enter user details and click CONTINUE. | The Backpack is seen in the cart on the CHECKOUT: OVERVIEW page. | | 5 | Click on the FINISH button. | There is a Thank you message. | | 6 | Log out from the website. | Logout was successful. |这张表格的价值在于它用自然语言把测试的“做什么”与“期望什么”固定下来是测试代码的蓝图而下一节将展示表格中的每一步都能在 examples/my_first_test.py 中找到精确对应的代码实现。三、Case Plan 与源码的一一映射examples/my_first_test.py是一个完整的 SeleniumBase 测试文件它继承BaseCase通过BaseCase.main(__name__, __file__)入口支持直接以python方式运行my_first_test.py。下面将 Case Plan 的 6 个步骤逐一映射到源码my_first_test.py。步骤 1登录 → 断言页面加载成功self.goto(https://www.saucedemo.com) self.type(#user-name, standard_user) self.type(#password, secret_sauce\n) self.assert_element(div.inventory_list) self.assert_exact_text(Products, span.title)self.goto(url)负责打开网址它会在缺少协议前缀时自动补全 URLbase_case.py。self.type(selector, text)是一个“多合一”输入方法等待元素可见、等待元素可交互、清空文本框、键入新文本如果文本以\n结尾还会自动按下回车提交表单base_case.py。这里密码以\n结尾登录表单会在输入完成后立即提交无需额外点击登录按钮。self.assert_element(selector)断言指定元素可见self.assert_exact_text(text, selector)则断言元素文本与期望值完全一致忽略首尾空白见 base_case.py。两步断言共同验证“登录成功且商品列表页已加载”。步骤 2点击 Backpack 的 ADD TO CARTself.click(button[name*backpack])self.click()默认等待元素可见并滚动到元素后再点击同时支持多种定位方式默认使用 CSS 选择器base_case.py。button[name*backpack]是一个 CSS 属性子串选择器匹配name属性包含backpack的按钮。点击后按钮文本由ADD TO CART变为REMOVE即 Case Plan 步骤 2 的预期结果。步骤 3查看购物车self.click(#shopping_cart_container a) self.assert_exact_text(Your Cart, span.title) self.assert_text(Backpack, div.cart_item)点击购物车图标进入购物车页先断言页面标题为Your Cart再断言购物车条目中出现Backpack文本。注意self.assert_text()与assert_exact_text()的区别前者只要求期望文本是元素完整文本的子串即可base_case.py后者要求精确匹配。步骤 4填写收货信息并继续结账self.click(button#checkout) self.type(#first-name, SeleniumBase) self.type(#last-name, Automation) self.type(#postal-code, 77123) self.click(input#continue) self.assert_text(Checkout: Overview) self.assert_text(Backpack, div.cart_item) self.assert_text(29.99, div.inventory_item_price)这一步对应 Case Plan 中带br /的复合步骤点击CHECKOUT→ 填写名、姓、邮编 → 点击CONTINUE。进入CHECKOUT: OVERVIEW页后再次断言Backpack仍在购物车中并额外校验商品价格为29.99验证金额信息正确。步骤 5点击 FINISH 完成下单self.click(button#finish) self.assert_exact_text(Thank you for your order!, h2) self.assert_element(img[altPony Express])点击FINISH后页面出现Thank you for your order!的致谢标题同时出现 Pony Express 物流图标。这一步精确验证了 Case Plan 中“There is aThank youmessage”的预期结果并用元素断言补强了“下单成功页已完整渲染”的结论。步骤 6登出self.js_click(a#logout_sidebar_link) self.assert_element(div#login_button_container)self.js_click()通过 JavaScript 执行点击适合点击被隐藏或需要特殊处理的元素base_case.py。登出后回到登录页通过断言div#login_button_container出现确认“登出成功”即 Case Plan 最后一个步骤的预期结果。四、如何运行这个测试在examples/目录下执行以下任一命令即可运行pytest my_first_test.py::MyTestClass::test_swag_labs # 或直接运行整个文件 pytest my_first_test.py # 或利用 BaseCase.main 以 python 方式直接执行 python my_first_test.pyexamples/pytest.ini定义了本目录的 pytest 发现规则python_files test_*.py *_test.py *_tests.py *_suite.py并配置了--capturetee-sys -p no:cacheprovider等参数examples/pytest.ini。运行时可追加 SeleniumBase 的命令行选项例如--browserchrome指定浏览器、--headless启用无头模式、-s显示控制台输出。需要注意的适用前提测试目标https://www.saucedemo.com是 Swag Labs 官方演示站点登录账号standard_user与密码secret_sauce为其公开的标准测试账号该测试依赖此演示站点的页面结构与文案若目标页面发生改版Case Plan 与测试代码中的选择器、断言文本都需要同步更新。五、Case Plans 管理生态生成器与汇总文件sbase caseplans图形化生成与管理单个 Case Plan 通常不手写而是由 SeleniumBase 自带的 GUI 工具生成。在仓库根目录或测试所在目录执行sbase caseplans该命令会先用pytest --collect-only收集当前目录下所有测试sb_caseplans.py然后弹出 Tkinter 图形界面列出所有测试并带有复选框。界面提供两个核心按钮Generate boilerplate Case Plans for selected tests missing them为选中的、尚未有 Case Plan 的测试生成模板。生成的模板文件以测试文件.测试类.测试方法.md命名存放在该测试所在目录的case_plans/子文件夹中初始内容为两行占位步骤Perform Action 1 / Verify Action 1需由测试人员手工替换为真实步骤sb_caseplans.py。Generate Summary of existing Case Plans扫描所有已有 Case Plan生成汇总文件case_summary.mdsb_caseplans.py。caseplans支持与 pytest 相同的发现参数来限定测试范围sb_caseplans.pysbase caseplans sbase caseplans -k agent # 按关键字过滤测试名 sbase caseplans -m marker2 # 按 marker 过滤 sbase caseplans test_suite.py # 只收集指定文件 sbase caseplans offline_examples/ # 只收集指定目录汇总文件如何分类 Case Plans生成的 examples/case_summary.md 会把每个 Case Plan 渲染为可展开的details区块并按完成度打上三类标记分类逻辑见 sb_caseplans.py标记含义判定依据已定制化步骤的 Case Plan表格已替换为真实测试步骤⭕仍在使用默认模板的 Case Plan内容仍是Perform Action 1 / Verify Action 1占位缺少 Markdown 表格的 Case Plan竖线与短横线数量不足无法构成最小表格本文关联的这份 Case Plan 已填入完整的 6 步流程因此在汇总文件中属于 类别examples/case_summary.md中当前统计为 12 个定制化 Case Plan、0 个模板占位、0 个缺表examples/case_summary.md。命名规则与存放位置Case Plan 的命名由get_test_id()决定将测试地址中的.py::替换为.、::替换为.再追加.md后缀sb_caseplans.py。例如my_first_test.py::MyTestClass::test_swag_labs对应文件名my_first_test.MyTestClass.test_swag_labs.md。存放位置遵循“Case Plans 与测试同目录”的原则若测试位于子目录如visual_testing/其 Case Plan 就生成在visual_testing/case_plans/下而case_summary.md则生成在启动 GUI 的当前目录两者位置不同可参考 help_docs/case_plans.md 中的完整说明。六、从 Case Plan 到代码的工程价值Case Plan 与测试代码形成了“计划驱动实现、实现反哺计划”的闭环需求可评审产品、测试、开发可以在不读代码的情况下通过 Markdown 表格确认测试覆盖的每一步业务行为代码可溯源表格中的每个步骤都能在测试方法中找到对应代码块便于回归时定位问题状态可视化汇总文件用 /⭕/ 三色标记直观反映测试用例的完成度配合sbase caseplans的 GUI 一键生成让测试用例管理成本几乎为零。对刚接触 SeleniumBase 的读者而言examples/my_first_test.py 的代码注释还提供了大量入门信息CSS 选择器默认定位规则、XPath 的自动识别以/、./或(开头、timeout参数的作用默认值配置在 seleniumbase/config/settings.py、以及goto()/open()/visit()、type()/update_text()/fill()等别名方法。完整方法清单见 help_docs/method_summary.md底层实现集中于 seleniumbase/fixtures/base_case.py。以这份 6 步 Case Plan 为起点你可以用同样的流程为自己的测试生成计划、维护汇总让测试资产的沉淀与代码同步演进。【免费下载链接】SeleniumBaseAPIs for browser automation, testing, and bypassing bot-detection. Includes CDP Mode: A stealthy configuration for chromium that passes every bot detection test.项目地址: https://gitcode.com/GitHub_Trending/se/SeleniumBase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表