Back to skills
extension
Category: Development & EngineeringNo API key required

generate-ui-integration-scripts

根据用户明确提供的测试用例文件路径和用例分层集类型生成 UI 集成自动化脚本。用户要求创建、编写、导出或生成 UI 集成测试脚本、pytest 自动化脚本、前端页面集成自动化验证脚本时使用;如果测试用例文件路径或用例分层集类型缺失,必须先要求用户补充,不能继续生成脚本。

personAuthor: ssim2025hubModelScope

生成 UI 集成自动化脚本

任务背景

  • 适用于根据用户明确提供的测试用例文件,生成面向浏览器 UI 流程验证的 Python pytest 自动化脚本。
  • 适用于已经明确脚本针对的用例分层集类型的任务,例如冒烟集、主流程集、边界集、回归集或项目约定的其他分层集。
  • 适用于需要按需求版本、功能标题和用例分层集类型归档 UI 集成自动化脚本及其环境变量配置的场景。
  • 适用于项目没有现成 UI 自动化脚本模板时,默认采用 pytest 与 Playwright for Python 组织页面对象、浏览器会话、登录和断言逻辑。
  • 适用于测试脚本需要使用系统管理员账号完成 UI 登录,并通过用例特有环境变量补充特殊测试账户、业务数据或附件路径的场景。
  • 不适用于缺少测试用例文件路径或缺少用例分层集类型的任务;遇到此类输入时只要求用户补充信息。
  • 不适用于需要离开当前系统完成验证的用例执行;此类用例只在脚本中生成跳过标识和跳过原因。

任务步骤

  1. 执行输入门禁校验;门禁未通过时结束本次任务。
  2. 读取测试用例文件,识别需求版本号、功能标题、用例编号、用例名称、前置条件、操作步骤、预期结果和是否涉及当前系统外验证。
  3. 按用户指定的用例分层集类型筛选用例,只为该分层集内的用例生成测试函数。
  4. 根据用例涉及的页面、菜单、路由、按钮、输入框、表格、弹窗和文件入口,梳理需要使用的页面对象和稳定元素标识。
  5. 在编写脚本前检查用例涉及页面的前端代码是否已有稳定且唯一的 data-testid;若缺少,则先补充元素标识,且不得改变前端样式和业务逻辑。
  6. 创建或更新版本级公共环境变量文件 <项目根目录>/output/ui_test_scripts/<需求版本号>/.env.local
  7. 创建脚本输出目录 <项目根目录>/output/ui_test_scripts/<需求版本号>/<功能标题>/<用例分层集类型>/
  8. 在脚本输出目录中创建用例特有环境变量文件 .env.local
  9. 生成 <功能标题>_UI集成自动化脚本.py,按规定结构写入模块说明、依赖导入、常量、配置读取、工具函数、页面对象、fixtures 和测试用例。
  10. 对生成脚本执行编译检查,并根据检查结果修正语法问题。
  11. 最终回复生成位置、配置文件位置和编译检查结果。

任务要求

输入门禁

  • 用户消息中必须明确提供测试用例文件路径;没有路径时停止执行,并要求用户补充测试用例文件路径。
  • 用户消息中必须明确说明脚本针对的用例分层集类型;未说明时停止执行,并要求用户确认用例分层集类型。
  • 可接受 Windows 绝对路径或项目相对路径;不得根据历史上下文猜测缺失路径。
  • 只处理用户指定分层集类型中的用例,不跨分层自动扩展范围。

输出目录

  • UI 集成自动化脚本必须输出到:
<项目根目录>/output/ui_test_scripts/<需求版本号>/<功能标题>/<用例分层集类型>/<功能标题>_UI集成自动化脚本.py
  • <需求版本号> 优先从测试用例文件路径或文件内容中提取;无法提取时使用 unknown-version,并在最终回复中说明。
  • <功能标题> 优先从测试用例文件标题或元信息中提取;无法提取时使用测试用例文件名去掉扩展名后的名称。
  • <用例分层集类型> 使用用户明确提供的名称,保留中文语义,不自行改写为其他分层。

环境变量配置

  • 版本级公共环境变量文件统一放在:
<项目根目录>/output/ui_test_scripts/<需求版本号>/.env.local
  • 版本级公共环境变量文件不存在时必须创建,且只包含以下 8 个固定配置项:
# FRONTEND_BASE_URL
# 含义:前端应用基础访问地址。
# 是否必填:是。
# 示例值:http://localhost:5173
FRONTEND_BASE_URL=

# BROWSER_TYPE
# 含义:浏览器类型,可选值为 chromium、firefox、webkit。
# 是否必填:是。
# 示例值:chromium
BROWSER_TYPE=

# BROWSER_HEADLESS
# 含义:是否以无头模式运行浏览器,可选值为 true、false。
# 是否必填:是。
# 示例值:true
BROWSER_HEADLESS=

# ELEMENT_TIMEOUT_MS
# 含义:页面元素默认等待超时时间,单位为毫秒。
# 是否必填:是。
# 示例值:10000
ELEMENT_TIMEOUT_MS=

# RESPONSE_TIMEOUT_MS
# 含义:接口响应默认等待超时时间,单位为毫秒。
# 是否必填:是。
# 示例值:15000
RESPONSE_TIMEOUT_MS=

# NAVIGATION_TIMEOUT_MS
# 含义:页面跳转默认等待超时时间,单位为毫秒。
# 是否必填:是。
# 示例值:15000
NAVIGATION_TIMEOUT_MS=

# ADMIN_USERNAME
# 含义:系统登录管理员账号。
# 是否必填:是。
# 示例值:admin
ADMIN_USERNAME=

# ADMIN_PASSWORD
# 含义:系统登录管理员密码。
# 是否必填:是。
# 示例值:admin123
ADMIN_PASSWORD=
  • 脚本同级目录必须生成用例特有 .env.local,用于存放该脚本独有的特殊测试账户、业务编码、测试数据、上传文件路径或外部依赖开关。
  • 脚本同级 .env.local 中每个配置项必须写明含义、是否必填和示例值;没有特有配置时保留文件并写入说明性注释。
  • 生成脚本中的 RuntimeConfig 必须按优先级解析配置:先读取脚本同级 .env.local,再读取进程环境变量,最后读取版本级公共 .env.local 补齐仍为空的公共配置;同名配置以前序来源为准。

脚本结构

  • 脚本必须使用 Python 语言和 pytest 框架;默认浏览器自动化库为 Playwright for Python。
  • 脚本文件的基本结构必须按以下顺序组织:
模块说明 docstring
import 区
常量区
RuntimeConfig 配置读取区
通用工具函数区
Page Object 页面对象区
pytest fixtures 区
pytest test cases 区
  • 模块说明 docstring 必须包含脚本标题、作者、时间、运行基础前置条件、覆盖用例列表和脚本运行方式。
  • 作者统一写为 Codex-<git提交作者>;优先通过仓库 git config user.name 获取作者。
  • 脚本运行方式必须包含依赖安装命令和脚本运行命令;脚本运行命令格式为:
pytest <脚本的绝对路径> -vv -rA --tb=short
  • 常量区中的每个常量必须有中文注释,避免在测试函数、页面对象和工具函数中散落魔法字符串。
  • pytest test cases 区中的测试函数名必须带上用例编号,例如 test_tc_login_001_admin_login_success

元素定位

  • 禁止使用文本内容、CSS 类名、DOM 层级、XPath、数组下标或组件库生成的临时 class 作为元素定位依据。
  • 所有可交互操作元素必须使用不重复的 data-testid 定位,包括按钮、链接、输入框、选择器、上传入口、下载入口、表格操作按钮、弹窗确认按钮、弹窗取消按钮、菜单项和页签。
  • data-testid 属性值必须使用英文小写短横线命名,并包含模块、页面、元素和动作语义,例如 document-list-add-button
  • 前端页面缺少稳定 data-testid 时,必须先补充元素标识再编写脚本;禁止用脆弱选择器绕过缺失标识。
  • 补充 data-testid 只允许增加稳定测试标识,不得修改前端样式、交互流程、接口调用或业务判断。

等待与业务完成信号

  • 所有基于 data-testid 的元素,在点击、填写、读取或断言前必须显式等待目标状态。
  • 点击元素前必须确认元素可见且可用;填写元素前必须确认元素可见且可编辑;读取或断言元素前必须确认元素已挂载或可见并达到预期值。
  • 所有触发登录、页面跳转、接口请求、弹窗展示、列表刷新或表单保存的操作,执行后必须等待对应业务完成信号。
  • 可接受的业务完成信号包括接口成功响应、URL 变化、目标页面关键元素可见、按钮状态恢复、成功提示出现或数据回显完成。
  • 禁止仅依赖 domcontentloadednetworkidle 判断业务已完成。

登录与账户

  • 脚本统一使用版本级公共配置中的系统管理员账号和密码执行 UI 登录。
  • 用例涉及其他特殊测试账户时,必须把账号配置写入脚本同级 .env.local,不得硬编码在脚本中。
  • 日志、断言消息和异常信息不得明文输出密码、Token、手机号或身份证等敏感信息。

用例转换

  • 每个测试函数只覆盖一个测试用例,不得把多个用例合并到同一个测试函数中。
  • 测试函数应尽量复用 Page Object 方法表达页面操作,避免在测试函数中堆叠底层定位细节。
  • 需要离开当前系统进行验证的用例,测试函数必须使用 pytest.mark.skippytest.skip 标识跳过,并写清楚跳过原因。
  • 断言必须来自可观察的 UI 状态、接口响应结果、URL 变化、下载结果或页面数据回显,不能只断言函数调用完成。

检查要求

文件检查

  • 确认脚本文件已生成到指定目录。
  • 确认脚本同级 .env.local 已生成,并包含每个配置项的含义、是否必填和示例值。
  • 确认版本级公共 .env.local 已存在,且固定 8 项配置名称齐全。

结构检查

  • 检查脚本是否按模块说明 docstring、import 区、常量区、RuntimeConfig 配置读取区、通用工具函数区、Page Object 页面对象区、pytest fixtures 区和 pytest test cases 区的顺序组织。
  • 检查模块说明 docstring 是否包含脚本标题、作者、时间、运行基础前置条件、覆盖用例列表、依赖安装命令和 pytest <脚本的绝对路径> -vv -rA --tb=short 运行命令。
  • 检查测试函数名是否包含对应测试用例编号。

定位与等待检查

  • 检查脚本中是否存在文本内容、CSS 类名、DOM 层级、XPath、数组下标或临时 class 定位;发现后必须改为 data-testid
  • 检查每个 data-testid 定位后的点击、填写、读取和断言是否具备显式状态等待。
  • 检查登录、跳转、请求、弹窗、刷新和保存动作后是否等待业务完成信号。
  • 检查离开当前系统验证的测试函数是否标识为跳过并包含原因。

编译检查

  • 脚本生成后只执行 Python 编译检查:
python -m py_compile <脚本的绝对路径>
  • 不运行 pytest 测试脚本。
  • 不启动浏览器执行 UI 流程。
  • 不在脚本生成后额外检查前端代码。