Playwright 实战第2篇:AI 辅助数据驱动测试(DeepSeek 版) - 知识铺
一、前言
前面的教程演示了 AI 自动化测试的自愈机制,让测试脚本在元素变动时能自动修复,提高了稳定性。
企业级实战:从告警到自动修复的工程化落地(Playwright + DeepSeek,Python 实战)
但是,在实际业务场景中,单一的输入往往不足以覆盖各种情况。例如:
-
• 电商结账时,收件人可能有不同的地址格式;
-
• 登录时,可能有不同的用户名和密码组合;
-
• 搜索功能,可能要输入不同关键词。
这就需要 数据驱动测试(DDT):一次性编写测试逻辑,通过多组数据覆盖更多情况。
进一步,AI(这里使用 DeepSeek 模型)可以帮助我们:
-
• 自动生成更多测试数据,模拟真实用户场景;
-
• 补充边界情况(极长字符串、异常字符、缺失字段等);
-
• 动态更新数据集,避免人工维护。
二、实战案例
2.1 环境准备
<span></span><code><span leaf="">pip install playwright pytest faker openai</span><br><span leaf="">playwright install</span></code>
⚠️ 注意:这里的
openai
库同样适用于 DeepSeek,只需要配置 API Key 和 Base URL。
在代码里配置 DeepSeek API:
<span></span><code><span><span leaf="">import</span></span><span leaf=""> openai</span><br><br><span leaf="">openai.api_key =</span><span><span leaf=""> "YOUR_DEEPSEEK_API_KEY"</span></span><br><span leaf="">openai.base_url =</span><span><span leaf=""> "https://api.deepseek.com"</span></span></code>
2.2 AI 生成测试数据
我们使用 DeepSeek 生成电商结账场景的 用户信息(包括边界值):
<span></span><code><span><span leaf="">def</span></span><span><span leaf=""> generate_user_data_with_ai</span></span><span leaf="">():</span><br><span leaf=""> prompt =</span><span><span leaf=""> """</span><br><span leaf="">请生成 5 组电商结账的用户信息,包含:</span><br><span leaf="">- firstName</span><br><span leaf="">- lastName</span><br><span leaf="">- postalCode</span><br><span leaf="">要包含正常值和异常边界值(如超长、特殊字符、缺失)。</span><br><span leaf="">输出 JSON 格式。</span><br><span leaf="">"""</span></span><br><span leaf=""> response = openai.ChatCompletion.create(</span><br><span leaf=""> model=</span><span><span leaf="">"deepseek-chat"</span></span><span leaf="">,</span><br><span leaf=""> messages=[{</span><span><span leaf="">"role"</span></span><span leaf="">:</span><span><span leaf="">"user"</span></span><span leaf="">,</span><span><span leaf="">"content"</span></span><span leaf="">:prompt}]</span><br><span leaf=""> )</span><span><br><span leaf=""> return</span></span><span leaf=""> response.choices[</span><span><span leaf="">0</span></span><span leaf="">].message[</span><span><span leaf="">"content"</span></span><span leaf="">]</span></code>
2.3 Playwright 测试用例
<span></span><code><span><span leaf="">import</span></span><span leaf=""> json</span><span><br><span leaf="">import</span></span><span leaf=""> pytest</span><span><br><span leaf="">from</span></span><span leaf=""> playwright.sync_api</span><span><span leaf=""> import</span></span><span leaf=""> sync_playwright</span><span><br><span leaf="">from</span></span><span leaf=""> utils.ai_data</span><span><span leaf=""> import</span></span><span leaf=""> generate_user_data_with_ai</span><span><br><br><span leaf="">@pytest.mark.parametrize(</span><span><span><span leaf="">"user"</span></span><span leaf="">, json.loads(</span><span><span leaf="">generate_user_data_with_ai(</span><span></span><span leaf="">)</span></span><span leaf="">)</span></span><span leaf="">)</span></span><span><br><span leaf="">def</span></span><span><span leaf=""> test_checkout_with_ddt</span></span><span leaf="">(</span><span><span leaf="">user</span></span><span leaf="">):</span><span><br><span leaf=""> with</span></span><span leaf=""> sync_playwright()</span><span><span leaf=""> as</span></span><span leaf=""> p:</span><br><span leaf=""> browser = p.chromium.launch(headless=</span><span><span leaf="">True</span></span><span leaf="">)</span><br><span leaf=""> page = browser.new_page()</span><br><span leaf=""> page.goto(</span><span><span leaf="">"https://www.saucedemo.com"</span></span><span leaf="">)</span><span><br><br><span leaf=""> # 登录</span></span><br><span leaf=""> page.fill(</span><span><span leaf="">"#user-name"</span></span><span leaf="">,</span><span><span leaf=""> "standard_user"</span></span><span leaf="">)</span><br><span leaf=""> page.fill(</span><span><span leaf="">"#password"</span></span><span leaf="">,</span><span><span leaf=""> "secret_sauce"</span></span><span leaf="">)</span><br><span leaf=""> page.click(</span><span><span leaf="">"#login-button"</span></span><span leaf="">)</span><span><br><br><span leaf=""> # 添加商品</span></span><br><span leaf=""> page.click(</span><span><span leaf="">".btn_inventory"</span></span><span leaf="">)</span><br><span leaf=""> page.click(</span><span><span leaf="">".shopping_cart_link"</span></span><span leaf="">)</span><br><span leaf=""> page.click(</span><span><span leaf="">"#checkout"</span></span><span leaf="">)</span><span><br><br><span leaf=""> # 使用 AI 生成的用户数据</span></span><br><span leaf=""> page.fill(</span><span><span leaf="">"#first-name"</span></span><span leaf="">, user.get(</span><span><span leaf="">"firstName"</span></span><span leaf="">,</span><span><span leaf="">""</span></span><span leaf="">))</span><br><span leaf=""> page.fill(</span><span><span leaf="">"#last-name"</span></span><span leaf="">, user.get(</span><span><span leaf="">"lastName"</span></span><span leaf="">,</span><span><span leaf="">""</span></span><span leaf="">))</span><br><span leaf=""> page.fill(</span><span><span leaf="">"#postal-code"</span></span><span leaf="">, user.get(</span><span><span leaf="">"postalCode"</span></span><span leaf="">,</span><span><span leaf="">""</span></span><span leaf="">))</span><br><br><span leaf=""> page.click(</span><span><span leaf="">"#continue"</span></span><span leaf="">)</span><span><br><br><span leaf=""> # 简单断言:进入下一个页面</span></span><span><br><span leaf=""> assert</span></span><span><span leaf=""> "Checkout: Overview"</span></span><span><span leaf=""> in</span></span><span leaf=""> page.text_content(</span><span><span leaf="">"body"</span></span><span leaf="">)</span><br><br><span leaf=""> browser.close()</span></code>
这里通过 pytest.mark.parametrize
动态注入 AI 生成的数据,测试一次可覆盖多种场景。
三、结语
本篇展示了 AI 辅助数据驱动测试 的实践:
-
• ✅ 使用 DeepSeek 生成多组测试数据,涵盖正常与异常场景;
-
• ✅ 结合 pytest 参数化,快速扩展用例覆盖面;
-
• ✅ 提升了测试灵活性和维护效率。
👉 问题给读者:
如果让 AI 来判定「页面是否加载正常」,你觉得最好的触发点是什么?截图对比?DOM 节点?还是日志分析?
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/ai/post/202510/Playwright-%E5%AE%9E%E6%88%98%E7%AC%AC2%E7%AF%87AI-%E8%BE%85%E5%8A%A9%E6%95%B0%E6%8D%AE%E9%A9%B1%E5%8A%A8%E6%B5%8B%E8%AF%95DeepSeek-%E7%89%88/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com