背景:
因leader支持,提供云服务器和大模型接口,开始深度研究智能化测试,如利用playwright+智能体等等,完成ai场景自动化建设,实现工作流自动化。
一、MCP的相关知识 ----------------- ### 1、模型上下文协议 上下文共享:应用程序通过MCP向模型提供所学的上下文信息(如文件内容、数据库记录),增强模型的理解能力。 工具暴露:MCP允许应用程序将功能(如文件读写、API调用)暴露给模型,模型可以调用这些工具完成复杂任务。 工作流:可以利用MCP集成多个服务和组件,可扩展的AI工作流。 安全性:通过本地服务器运行,MCP避免将敏感数据上传至第三方平台,确保数据隐私。 ### 2、MCP架构 客户端:是AI应用程序,负责发起请求并与服务器通信。 服务器:轻量级程序,负责暴露特定的数据源或工具功能,并通过标准化协议与客户端交互。 通信格式:基于JSON-RPC 2.0,支持请求、响应和通知三种消息类型,确保通信的标准化和一致性。、 ### 3.pw+mcp的价值 playwright + mcp 的价值不可靠: 1.不是完全的自动化,需要不停的确认 2.自然语言描述,需要复制粘贴给大模型(一次,错误) 3.可靠性:有疑问,取决于大模型的能力。 二、playwright -------------- auto-wing 借鉴minsence.js的思路 -> playwright + ai
```bash
pip install pytest-playwright
```
安装所需的浏览器:
```bash
playwright install
```
第一次测试:test_example.py
```python
import re
from playwright.sync_api import Page, expect
def test_has_title(page: Page):
page.goto("https://playwright.dev/")
# Expect a title "to contain" a substring.
expect(page).to_have_title(re.compile("Playwright"))
def test_get_started_link(page: Page):
page.goto("https://playwright.dev/")
# Click the get started link.
page.get_by_role("link", name="Get started").click()
# Expects page to have a heading with the name of Installation.
expect(page.get_by_role("heading", name="Installation")).to_be_visible()
```
语法结构:
#### 1. 同步与异步模式
```python
# 同步
from playwright.sync_api import sync_playwright
def run_sync():
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto('https://example.com')
browser.close()
run_sync()
```
```python
# 异步
import asyncio
from playwright.async_api import async_playwright
async def run_async():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
await page.goto('https://example.com')
await browser.close()
asyncio.run(run_async())
# 导航
# 基本导航
page.goto('https://example.com')
# 带选项的导航
page.goto('https://example.com',
timeout=30000, # 超时时间
wait_until='networkidle', # 等待条件:'load'|'domcontentloaded'|'networkidle'
referer='https://google.com' # 设置referer
)
# 导航事件处理
page.on('load', lambda: print('Page loaded!'))
# 前进和后退
page.go_back()
page.go_forward()
# 重新加载
page.reload()
```
```
# 断言
expect(page.get_by_role("heading",name="Installation")).to_be_visible()
expect(page).to_have_title(re.compile("Playwright"))
```
```
# 截图
page.screenshot(path="example.png")
```
惰性定位:
playwright使用Locator定位元素,但它在创建时并不立即执行查找。只有当该元素需要执行一个动作或断言时,才会根据Locator内容去页面上寻找匹配的元素,即指描述“如何找到元素”。
自动等待:
当Locator去页面上寻找元素时,意味着要对该元素进行实际的使用,那么playwright不会仅仅是找到该元素即止,而是对元素自动等待以下状态就绪,确保寻找到的元素可以进行使用:
Codegen
在终端运行以下命令,URL可以是任何想测试的网站:
playwright codegen https://qa4-wms.yqn.com/62100/home
debug高亮
```
page.get_by_role("button", name="搜索").highlight()
```
```
# 定位表格两种验证方式
page.locator(".ant-table-cell:has-text('待到仓')").highlight()
page.locator(".ant-table-cell").nth(0).highlight()
# 精准定位
page.locator("tr[data-index='0'] .ant-table-cell").nth(3).highlight()
```
三、目的
--------
1.自动化:提高测试执行效率
2.AI自动化:原有的自动化之上,再次提高效率
PO结构
page object
类
```mermaid
graph LR
PageObject(起点) --> B{是否满足条件?}
B -->|是| C(步骤1)
B -->|否| D(步骤2)
C --> E(终点)
D --> E(终点)
```
playwright的debug模式
```
await logged_in_page.pause() # 打开Playwright Inspector调试工具
```
测试用例设计:
1.全部填value(不要异常信息)
2.常用case
入库(ASN单号、状态、来源单号、货主、柜号、sku名称、卸货方式、时间、业务属性)
出库(出库单号、拣货单号、状态、来源单号、客户来源单号、拣货容器、期望出库时间、承运商、商品、货主、物流类型、承运商分组、出库类型、商品件数、业务属性、出库数量。
- THE END -
最后修改:2025年12月11日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://blog.grover.top/2025/09/29/%e6%99%ba%e8%83%bd%e5%8c%96%e6%b5%8b%e8%af%95%e8%b5%b7%e6%ad%a5/
共有 0 条评论