智能化测试起步

Ryder 2025-9-29 34 9/29

背景:

因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 -

Ryder

12月11日16:12

最后修改:2025年12月11日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论