📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
上篇文章介绍了利用DeepSeek快速生成测试用例,并导入Xmind用于评审。本篇继续分享如何用AI把Xmind测试用例生成为自动化测试代码,并手把手教你具体提示词解决元素定位,异常覆盖等核心痛点,为自动化测试提供一种新思路和可能性。
一、引言
在上一篇中,我们通过AI
快速生成了Saucedemo
电商系统的XMind
测试用例框架,后台有读者反馈:“从未想过测试设计能如此高效!”。
但仍有痛点未解,具体为:
1. 用例到代码的鸿沟
手工编写脚本耗时长,复杂业务场景极易遗漏分支,以电商业务来说
-
• 链路长:涉及商品浏览、添加购物车、库存校验、优惠券核销、多支付方式等场景。
-
• 异常多:库存不足、支付超时、订单重复提交等边界条件需覆盖。
-
• 维护难:页面元素频繁变更(如促销弹窗),手工维护成本极高。
2. 如何设计低耦合高内聚项目结构以保持扩展性
本文以Saucedemo.com
购物车流程为例,完整演示:
-
•
XMind用例
→Playwright脚本
全链路生成,包含完整项目结构 -
•
AI
如何解决元素定位、数据驱动、异常覆盖 三大核心痛点 -
• 高频报错调试:如
“Element not found”“Payment timeout”
二、实战案例
2.1 项目结构设计:分层管理,开箱即用
saucedemo_auto/
├── pages/ # POM模式:页面对象封装
│ ├── product_page.py
│ ├── cart_page.py
│ └── checkout_page.py
├── tests/
│ ├── test_cart.py # 测试用例
│ └── test_checkout.py
├── data/ # 数据驱动文件
│ ├── cart_cases.json
│ └── checkout_cases.csv
├── utils/
│ ├── wait_strategy.py # 自定义等待策略
│ └── error_handler.py # 异常处理
└── conftest.py # Playwright全局配置
以上为一个框架参考实现,页面对象模型,数据驱动,测试配置 等核心内容都有了。
2.2 项目实战代码:从XMind用例到可执行脚本
Step 1:用DeepSeek
生成XMind
测试用例(附Prompt
技巧)
-
• 提问模版:
请为Saucedemo.com的购物车功能设计XMind测试用例,要求:
1. 覆盖正常流程:添加商品、进入购物车、结算
2. 异常场景:库存不足、重复提交订单、支付超时
3. 包含断言点(如商品数量、总价校验)
-
•
DeepSeek
生成XMind
结构示例:
✅ 购物车功能
├─ 正常流程
│ ├─ 添加单商品:商品详情页点击“Add to cart”,购物车数量+1
│ ├─ 添加多商品:不同商品页添加,购物车展示所有商品
│ └─ 移除商品:购物车内点击“Remove”,商品消失且总价更新
├─ 结算流程
│ ├─ 正常结算:填写有效地址,选择支付方式,生成订单号
│ └─ 地址为空:提示“Error: Postal Code is required”
└─ 异常场景
├─ 库存不足:添加超过库存数量的商品,提示“Inventory limited”
└─ 支付超时:模拟支付接口延迟,检查订单状态回滚
Step 2:AI
生成POM
页面对象(关键代码详解)
-
• 提问模板:
请基于以下XMind用例,为Saucedemo购物车功能编写Playwright页面对象类:
1. 使用POM模式分层
2. 包含商品页、购物车页、结算页
3. 封装元素定位和核心操作(如add_to_cart、checkout)
用例描述:
[粘贴XMind内容]
-
•
DeepSeek
生成代码:
# pages/product_page.py
from playwright.sync_api import Page
class ProductPage:
def __init__(self, page: Page):
self.page = page
self.add_to_cart_btn = page.locator("button:has-text('Add to cart')")
self.cart_count = page.locator(".shopping_cart_badge")
def add_to_cart(self):
self.add_to_cart_btn.click()
def get_cart_count(self) -> int:
return int(self.cart_count.inner_text()) if self.cart_count.is_visible() else 0
# pages/cart_page.py
class CartPage:
def __init__(self, page: Page):
self.page = page
self.checkout_btn = page.locator("text=Checkout")
self.item_list = page.locator(".cart_item")
self.total_price = page.locator(".summary_total_label")
def checkout(self):
self.checkout_btn.click()
def get_item_count(self) -> int:
return self.item_list.count()
# pages/checkout_page.py
class CheckoutPage:
def __init__(self, page: Page):
self.page = page
self.first_name = page.locator("#first-name")
self.postal_code = page.locator("#postal-code")
self.continue_btn = page.locator("text=Continue")
self.error_msg = page.locator(".error-message")
def fill_shipping_info(self, first_name: str, postal_code: str):
self.first_name.fill(first_name)
self.postal_code.fill(postal_code)
self.continue_btn.click()
Step 3:数据驱动 + 异常场景扩展(AI
强化版)
-
• 提问模板:
请基于以下购物车测试用例,补充以下内容:
1. 使用CSV文件管理测试数据(商品ID、数量、预期总价)
2. 添加并发测试场景:模拟多用户同时操作购物车
3. 处理“Element not found”错误:优化元素等待策略
-
•
DeepSeek
生成代码:
# tests/test_cart.py
import pytest
from playwright.sync_api import expect
from pages.product_page import ProductPage
from pages.cart_page import CartPage
# 数据驱动:从CSV读取测试用例
@pytest.mark.parametrize("product_count, expected_total", [
(1, "$29.99"),
(3, "$89.97"),
(6, "Inventory limited"), # 库存不足场景
])
def test_add_multiple_products(page, product_count, expected_total):
product_page = ProductPage(page)
cart_page = CartPage(page)
# 添加N个商品
for _ in range(product_count):
page.goto("https://www.saucedemo.com/inventory.html")
product_page.add_to_cart()
# 进入购物车校验
page.goto("https://www.saucedemo.com/cart.html")
if "Inventory limited" in expected_total:
expect(page.get_by_text("Inventory limited")).to_be_visible()
else:
expect(cart_page.get_item_count()).toBe(product_count)
expect(cart_page.total_price).to_contain_text(expected_total)
# 并发测试示例(使用Playwright并行执行)
def test_concurrent_cart_operations(context):
# 创建两个独立浏览器上下文
with context.new_page() as page1, context.new_page() as page2:
# 用户1添加商品
page1.goto("https://www.saucedemo.com/inventory.html")
ProductPage(page1).add_to_cart()
# 用户2同时操作
page2.goto("https://www.saucedemo.com/inventory.html")
ProductPage(page2).add_to_cart()
# 断言各自购物车数量
expect(ProductPage(page1).get_cart_count()).toBe(1)
expect(ProductPage(page2).get_cart_count()).toBe(1)
三、AI
如何解决三大核心痛点?
痛点1:元素定位频繁变更
-
• 传统方案:需人工全局搜索替换选择器。
-
•
AI
方案:通过语义分析自动更新定位逻辑。
DeepSeek
交互修复示例:
-
• 用户提问:
“页面变更后,购物车按钮选择器失效,原选择器是button:has-text('Add to cart'),
现在变为button[id='add-to-cart-sauce-labs-backpack'],如何批量修复?”
-
•
DeepSeek
回复:
1. 在POM类中集中管理元素定位:
self.add_to_cart_btn = page.locator("button[id^='add-to-cart-']") # 通配符匹配
2. 通过AI生成适配函数:
def add_specific_product(self, product_id: str):
self.page.locator(f"button[id='add-to-cart-{product_id}']").click()
痛点2:支付超时等异步场景
-
• 传统方案:需手动添加
sleep()
等待,导致执行效率低下。 -
• AI方案:自动注入智能等待策略。
AI生成代码优化:
# utils/wait_strategy.py
from playwright.sync_api import Page
def wait_for_payment_complete(page: Page, timeout: int = 30000):
# 等待支付接口完成(检测订单完成元素或API请求)
with page.expect_response("**/api/payment", timeout=timeout) as response:
return response.value.ok
# 在测试用例中调用
def test_payment_timeout(page):
checkout_page = CheckoutPage(page)
checkout_page.fill_shipping_info("John", "12345")
try:
wait_for_payment_complete(page, timeout=5000) # 设置5秒超时
except Exception as e:
expect(page.get_by_text("Payment timeout")).to_be_visible()
痛点3:复杂场景覆盖率低
-
• 传统方案:人工设计用例耗时长,易遗漏边界条件。
-
• AI方案:基于业务规则自动生成异常场景。
DeepSeek生成异常测试数据:
// data/checkout_cases.json
[
{
"case": "正常结算",
"items": ["sauce-labs-backpack", "sauce-labs-bike-light"],
"postal_code": "12345",
"expected": "Order Complete"
},
{
"case": "超卖测试",
"items": ["sauce-labs-backpack@100"], // 模拟添加100个商品
"postal_code": "12345",
"expected": "Inventory limited"
},
{
"case": "XSS注入攻击",
"postal_code": "<script>alert(1)</script>",
"expected": "Invalid postal code"
}
]
四、高频问题:AI
如何调试“Element not found”
错误?
场景复现
用户运行脚本时出现错误:
Element locator 'button:has-text('Add to cart')' did not match any elements.
DeepSeek
交互式诊断
-
• 提问模板:
运行以下Playwright脚本时报错“Element not found”:
[粘贴代码]
可能的页面变更:
1. 按钮文本从“Add to cart”变为“Add to Cart”
2. 页面加载延迟导致元素未渲染
请提供修复方案。
DeepSeek解决方案:
-
• 优化元素定位:使用更稳定的属性选择器。
-
• 增加等待条件:
# 修改后的ProductPage
class ProductPage:
def __init__(self, page: Page):
self.page = page
# 改为CSS属性选择器
self.add_to_cart_btn = page.locator("[data-test='add-to-cart']")
def add_to_cart(self):
# 增加等待条件
self.add_to_cart_btn.wait_for(state="visible")
self.add_to_cart_btn.click()
五、结语
在测试用例到实现自动化测试代码的关键步骤中,DeepSeek
等AI
技术从代码生成,结构调优,问题排查 等全流程提供助力提升工作效率,总结如下:
-
• 用例生成效率提升
90%
:XMind
→ 可执行脚本一键转换。 -
• 异常覆盖率提升
60%
:自动补充超卖、并发、安全测试场景。 -
• 维护成本降低
70%
:智能修复元素定位、优化等待策略。 -
抛砖引玉,大家可以参考以上分享应用到自己的行业领域,进一步探索更多新的玩法。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】