生成 UI 集成自动化脚本
任务背景
- 本技能适用于基于已存在测试用例文件生成 UI 集成自动化脚本的场景。
- 本技能适用于用户已明确指定用例分层集类型的场景,例如冒烟集、主流程集、边界集或回归集。
- 本技能适用于需要结合前端页面代码、后端接口代码和测试用例内容完成自动化脚本、环境变量文件及必要前端稳定元素标识的场景。
- 本技能适用于当前系统内可通过 UI 与接口自动准备、推进、验证和清理测试数据的用例。
- 本技能不适用于必须离开当前系统才能完成验证的用例;此类用例只能在脚本中标识为跳过并说明原因。
任务步骤
- 检查用户消息中是否明确提供测试用例文件路径;没有路径时停止执行,并要求用户补充路径。
- 检查用户消息中是否明确说明脚本针对的用例分层集类型;未说明时停止执行,并要求用户确认用例分层集类型。
- 读取测试用例文件,筛选目标用例分层集中的用例,识别无法自动化或需要离开当前系统验证的用例。
- 列出脚本中会做跳过处理的用例列表及对应原因,并向用户确认是否同意;如果没有跳过用例,则直接进入下一步。
- 用户同意跳过处理后,分析前端代码定位页面路由、页面对象、交互元素、业务状态展示位置和必要的
data-testid补充点。 - 从后端接口代码推导测试数据构造链路,按调用顺序列出接口调用逻辑及调用信息。
- 对每个测试数据构造接口说明基础 payload JSON、必传字段、字段值获取方式和动态值校验依据;非必传字段不传值。
- 对动态获取的属性值,结合属性值来源接口的入参、返参以及前后端代码确认准确传参和接收方式;多个可用值取第一个。
- 将测试数据构造链路提交给用户检查确认;用户确认后再生成脚本及环境变量配置文件。
- 如页面缺少稳定且唯一的
data-testid,先补充前端元素标识并保留目标组件既有渲染行为,再编写脚本。 - 生成脚本、脚本同级
.env.local和版本级公共.env.local;版本级公共配置文件不存在时创建,存在时按缺失项补齐。 - 脚本生成完成后,向用户确认本地前后端代码运行及脚本配置是否准备就绪,并要求用户提供 Python 项目环境目录。
- 用户确认并提供 Python 项目环境目录后,执行
/goal命令,目标为按照脚本运行命令运行脚本;如果出现报错,则持续修正,直到脚本执行结果不再存在报错。
任务要求
输出位置
- UI 集成测试脚本必须使用 Python 语言和 pytest 框架生成。
- 脚本输出位置必须为
<项目根目录>/output/test/scripts/<需求版本号>/<功能标题>/<用例分层集类型>/<功能标题>_UI集成自动化脚本.py。 - 脚本同级目录必须生成该用例特有的
.env.local,页面路由和接口地址不得作为配置项。
环境变量配置
- 脚本同级
.env.local必须写明每个配置的含义、是否必填和示例值。 - 用例版本级公共环境变量配置文件必须统一位于
<项目根目录>/output/test/scripts/<需求版本号>/.env.local。 - 版本级公共配置文件必须固定包含 8 项:前端应用基础访问地址、浏览器类型、是否以无头模式运行浏览器、页面元素及响应和跳转的默认等待超时时间、系统登录管理员账号、系统登录管理员密码、版本级公共环境变量文件路径、浏览器非无头模式下的操作延迟时间。
- 脚本同级
.env.local必须定义版本级公共环境变量文件路径,供脚本读取版本级公共配置。 - 特殊测试账户登录信息必须配置到脚本同级
.env.local;业务数据 id 不得配置到环境变量文件。
脚本结构
- 脚本基本结构必须依次包含:模块说明 docstring、import 区、常量区、RuntimeConfig 配置读取区、通用工具函数区、Page Object 页面对象区、pytest fixtures 区、pytest test cases 区。
- 模块说明 docstring 必须包含脚本标题、作者、时间、运行基础前置条件、覆盖用例列表和脚本运行方式。
- 脚本运行方式必须包含依赖安装命令和脚本运行命令,脚本运行命令格式为
pytest {脚本的绝对路径} -vv -rA --tb=short。 - 常量区必须为每个常量添加含义注释。
- RuntimeConfig 必须优先读取脚本同级目录下的
.env.local,再读取环境变量。 - pytest 测试函数名必须带上用例编号。
元素定位
- 禁止使用文本内容、CSS 类名、DOM 层级、XPath、数组下标、组件库生成的临时 class 作为元素定位依据。
- 必须优先使用前端代码中已存在的约定唯一
data-testid属性定位元素。 - 脚本可交互操作元素必须具有不重复的
data-testid,覆盖按钮、链接、输入框、选择器、上传入口、下载入口、表格操作按钮、弹窗确认按钮、弹窗取消按钮、菜单项和页签。 data-testid属性值必须使用英文小写短横线命名,并包含模块、页面、元素和动作语义,例如document-list-add-button。- 发现页面缺少稳定
data-testid时,必须先补充前端元素标识;禁止为了绕过缺失标识而使用脆弱选择器。
前端标识补充
- 补充
data-testid前,必须先确认目标组件的默认渲染方式和默认 props。 - 通过组件配置项添加标识时,必须合并并保留组件原有默认 props、className、style、size、type、loading、disabled、onClick 和 onSubmit 等行为相关配置。
- 可使用 submitter.submitButtonProps、buttonProps、fieldProps、actionRender 等组件配置项添加标识。
- 禁止使用只包含
data-testid的对象浅覆盖原配置。
等待与交互
- 所有基于
data-testid的元素,在点击、填写、读取、断言前必须显式等待并确认达到所需状态。 - 点击前必须确认元素可见且可用。
- 填写前必须确认元素可见且可编辑。
- 读取或断言前必须确认元素已挂载或可见,并达到预期值。
- 禁止直接创建 locator 后不等待目标状态就执行操作。
登录会话
- 脚本必须统一使用系统账号密码进行 UI 登录。
- 同一测试用例内,同一账号的 UI 登录态与接口 token 必须来自同一次认证会话。
- 禁止在同一 BrowserContext 中重复登录并相互覆盖登录态。
- 禁止让
admin_token、logged_in_page、Page Object fixture 等互不依赖的 fixture 各自触发同一账号登录。
接口数据构造
- 脚本生成接口请求体时,必须按目标接口 schema 使用独立字段白名单。
- 只能转换或覆盖白名单内且已存在或已明确需要的字段。
- 禁止公共工具函数向 payload 注入其他接口字段或不存在字段。
- 动态构造的属性值必须满足前后端校验规则。
测试数据生命周期
- 脚本必须自行准备、推进并清理当前系统内可自动化的测试数据。
- 测试数据清理逻辑必须与数据创建链路对应,避免污染后续用例。
跳过用例
- 需要离开当前系统进行测试验证的用例,其测试函数必须统一标识为跳过并说明原因。
- 用户确认跳过列表后,脚本中跳过原因必须与确认结果保持一致。
检查要求
前置确认检查
- 已确认测试用例文件路径存在且可读取。
- 已确认用例分层集类型明确。
- 已完成跳过用例列表及原因确认;没有跳过用例时不要求用户确认跳过列表。
- 已完成测试数据构造接口调用逻辑、payload、必传字段和字段值获取方式确认。
文件生成检查
- 脚本已保存到规定的输出路径。
- 脚本同级
.env.local已生成,并包含配置含义、是否必填和示例值。 - 版本级公共
.env.local已存在于规定路径,并固定包含 8 项公共配置。 - 脚本同级
.env.local已配置版本级公共环境变量文件路径。
脚本内容检查
- 脚本使用 Python pytest 编写。
- 模块说明 docstring、import 区、常量区、RuntimeConfig 配置读取区、通用工具函数区、Page Object 页面对象区、pytest fixtures 区、pytest test cases 区顺序正确。
- pytest 测试函数名包含用例编号。
- 运行命令为
pytest {脚本的绝对路径} -vv -rA --tb=short。
前端标识检查
- 脚本涉及的可交互元素均使用唯一
data-testid定位。 - 新增或修改的
data-testid命名符合英文小写短横线规则,并包含模块、页面、元素和动作语义。 - 补充前端标识时没有覆盖组件原有默认 props 和行为配置。
- 脚本中不存在文本内容、CSS 类名、DOM 层级、XPath、数组下标或组件库临时 class 定位。
运行逻辑检查
- 每个基于
data-testid的操作前均存在显式等待和状态确认。 - 同一测试用例内同一账号的 UI 登录态与接口 token 来自同一次认证会话。
- 接口 payload 只包含目标接口 schema 白名单允许的字段。
- 当前系统内可自动化的测试数据已完成准备、推进和清理。
- 需要离开当前系统验证的用例已在测试函数中标识为跳过并说明原因。
后续执行检查
- 已向用户确认本地前后端代码运行及脚本配置是否准备就绪。
- 已要求用户提供 Python 项目环境目录。
- 用户确认后,已通过
/goal以脚本运行命令执行和修正为目标启动后续流程。
Scan to join WeChat group