helpmetest-discover
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseQA Roamer
QA Roamer
Explores a website to understand what it does and who uses it.
用于探索网站,以了解其功能及目标用户。
Prerequisites
前置条件
Before creating artifacts, load the authentication guidance and tag schema. These define how to set up test users and how to tag scenarios consistently.
Call these first:
how_to({ type: "authentication_state_management" })
how_to({ type: "tag_schema" })在创建工件前,请加载身份验证指南和标签架构,它们定义了如何设置测试用户以及如何统一标记场景。
请先调用以下命令:
how_to({ type: "authentication_state_management" })
how_to({ type: "tag_schema" })Workflow
工作流程
Phase 0: Context Discovery
阶段0:上下文发现
Check for existing work before asking the user for input. This prevents recreating Persona artifacts that already exist and lets you extend existing ProjectOverview artifacts.
Call to see what's already been done.
how_to({ type: "context_discovery" })- Reuse existing Persona artifacts (don't recreate auth)
- Extend existing ProjectOverview if found
- Only ask for URL if no artifacts exist
在向用户请求输入前,先检查是否已有相关工作成果。这样可以避免重复创建已存在的Persona工件,同时能基于现有的ProjectOverview工件进行扩展。
调用 查看已完成的工作内容。
how_to({ type: "context_discovery" })- 复用已有的Persona工件(无需重新创建身份验证信息)
- 若找到现有ProjectOverview,则对其进行扩展
- 仅当无任何工件时,才向用户询问URL
Phase 1: Initial Discovery
阶段1:初始探索
-
Navigate to the URL with:
helpmetest_run_interactive_commandGo To <url> timeout=10000 -
Read the page - What does this site do?
- Look at headline, navigation, content
- Identify the business domain
-
Check for authentication:If the site has login/signup, set up authentication.Callfor complete setup process.
how_to({ type: "authentication_state_management" })Summary:- Check for existing Persona artifacts with credentials
- If none exist, consult user about registration strategy
- Create maintaining test based on strategy chosen
- Validate authentication works before continuing
- BLOCK discovery until auth is proven working
-
导航访问:使用访问目标URL:
helpmetest_run_interactive_commandGo To <url> timeout=10000 -
页面分析 - 明确网站功能:
- 查看标题、导航栏、页面内容
- 确定业务领域
-
身份验证检查:如果网站包含登录/注册功能,请设置身份验证信息。调用获取完整的设置流程。
how_to({ type: "authentication_state_management" })总结:- 检查是否存在包含凭证信息的Persona工件
- 若不存在,则咨询用户注册策略
- 根据选定的策略创建维护测试
- 在继续后续操作前,验证身份验证是否生效
- 身份验证未通过前,暂停探索流程
Phase 1.5: Understand What SHOULD Exist
阶段1.5:明确预期功能
After identifying the industry, think about what a complete product in this domain needs:
Ask yourself:
- What is the PRIMARY user goal? (buy something, get work done, learn something)
- What is the CORE TRANSACTION? (purchase, subscription, booking, submission)
- What steps are needed to complete that transaction from start to finish?
- What would a user EXPECT to find in a product like this?
Expected capabilities by industry type:
Transactional sites (e-commerce, booking, marketplace):
- User needs: Discover → Evaluate → Decide → Transact → Confirm
- Expected features: Search, Browse, Details, Cart, Checkout, Payment, Confirmation, History
SaaS/productivity tools:
- User needs: Onboard → Use Core Feature → Manage Settings → Pay
- Expected features: Registration, Dashboard, Core Feature, Settings, Billing
Content/media platforms:
- User needs: Discover → Consume → Engage → Subscribe
- Expected features: Search, Browse, View, Comments, Share, Subscribe
Social platforms:
- User needs: Profile → Connect → Share → Engage
- Expected features: Profile, Feed, Post, Follow, Message, Notifications
For each expected capability:
- Try to find it (check navigation, footer, user menu, follow CTAs)
- If found: create Feature artifact
- If NOT found: add to ProjectOverview expected_features with status: "missing"
确定网站所属行业后,思考该领域成熟产品应具备的功能:
自问:
- 用户的核心目标是什么?(如购买商品、完成工作、学习知识)
- 核心交易流程是什么?(如购买、订阅、预订、提交)
- 完成该交易流程需要哪些步骤?
- 用户对这类产品的预期功能有哪些?
各行业的预期功能:
交易类网站(电商、预订、 marketplace):
- 用户需求:发现→评估→决策→交易→确认
- 预期功能:搜索、浏览、详情页、购物车、结账、支付、确认、历史记录
SaaS/生产力工具:
- 用户需求:入门→使用核心功能→管理设置→付费
- 预期功能:注册、仪表盘、核心功能、设置、账单
内容/媒体平台:
- 用户需求:发现→消费→互动→订阅
- 预期功能:搜索、浏览、查看、评论、分享、订阅
社交平台:
- 用户需求:个人主页→连接→分享→互动
- 预期功能:个人主页、动态、发布、关注、消息、通知
针对每个预期功能:
- 尝试在网站中找到对应功能(检查导航栏、页脚、用户菜单、跟随CTA)
- 若找到:创建Feature工件
- 若未找到:在ProjectOverview的expected_features中添加该功能,状态标记为「missing」
Phase 1.6: Walk the Critical User Journey
阶段1.6:遍历关键用户旅程
Don't just discover pages - complete the PRIMARY user goal end-to-end.
Think: "What does a user come here to DO, and what steps get them there?"
Process:
- Identify the primary goal (e.g., "buy a product", "sign up for service")
- Start as a new user and try to complete that goal
- Document each step as a :
JourneyStep- What action did you take?
- Did it work? (status: found/missing/blocked)
- What feature does this represent?
- When you get BLOCKED, that's a missing feature
Journey Schema:
json
{
"name": "<Primary Goal> Flow",
"persona_id": "persona-<who>",
"steps": [
{ "action": "<What user does>", "feature_id": "feature-<x>", "status": "found|missing|blocked" }
],
"completion": "complete|partial|blocked",
"critical": true
}Critical journeys must be complete for product to work:
- If journey is "partial" or "blocked" → major coverage gap
- Missing steps = missing features to flag in report
不要仅停留在页面发现层面——要完整完成用户核心目标的端到端流程。
思考:「用户访问该网站的核心目的是什么,需要哪些步骤才能达成?」
流程:
- 确定核心目标(如「购买商品」「注册服务」)
- 以新用户身份尝试完成该目标
- 将每个步骤记录为:
JourneyStep- 用户执行了什么操作?
- 操作是否成功?(状态:found/missing/blocked)
- 该操作对应哪个功能?
- 若操作受阻,则标记为缺失功能
旅程架构:
json
{
"name": "<核心目标> 流程",
"persona_id": "persona-<用户类型>",
"steps": [
{ "action": "<用户操作>", "feature_id": "feature-<x>", "status": "found|missing|blocked" }
],
"completion": "complete|partial|blocked",
"critical": true
}关键旅程是产品正常运行的必要条件:
- 若旅程状态为「partial」或「blocked」→ 存在主要覆盖缺口
- 缺失的步骤 = 需要在报告中标记的缺失功能
Phase 2: Create Persona Artifacts
阶段2:创建Persona工件
For each user type discovered, create a Persona artifact:
json
{
"type": "Persona",
"id": "persona-<name>",
"name": "Persona: <Name>",
"content": {
"persona_type": "primary|secondary|admin",
"description": "Who they are",
"goals": ["What they want"],
"pain_points": ["Frustrations"],
"username": "<generated-by-Create-Fake-Email>",
"password": "SecureTest123!",
"auth_state": "AdminState",
"permissions": ["what they can do"],
"environment": "staging"
}
}针对发现的每个用户类型,创建Persona工件:
json
{
"type": "Persona",
"id": "persona-<名称>",
"name": "Persona: <名称>",
"content": {
"persona_type": "primary|secondary|admin",
"description": "用户描述",
"goals": ["用户目标"],
"pain_points": ["用户痛点"],
"username": "<由Create-Fake-Email生成>",
"password": "SecureTest123!",
"auth_state": "AdminState",
"permissions": ["用户权限"],
"environment": "staging"
}
}Phase 3: Create ProjectOverview
阶段3:创建ProjectOverview
Use :
helpmetest_upsert_artifactjson
{
"type": "ProjectOverview",
"id": "project-<domain>",
"name": "ProjectOverview: <Site Name>",
"content": {
"url": "<url>",
"summary": "What this site does and who it's for",
"industry": "e-commerce|saas|healthcare|etc",
"persona_ids": ["persona-admin", "persona-user"],
"features": [
{ "feature_id": "feature-search", "name": "Search", "status": "working" },
{ "feature_id": "feature-cart", "name": "Cart", "status": "partial" },
{ "name": "Checkout", "status": "missing", "priority": "critical", "reason": "Cannot complete purchases" },
{ "name": "Payment", "status": "missing", "priority": "critical", "reason": "No payment integration found" }
],
"user_journeys": [
{
"name": "Purchase Flow",
"persona": "customer",
"steps": [
{ "action": "Search for product", "feature_id": "feature-search", "status": "found" },
{ "action": "View product details", "feature_id": "feature-product-details", "status": "found" },
{ "action": "Add to cart", "feature_id": "feature-cart", "status": "found" },
{ "action": "Checkout", "status": "missing" },
{ "action": "Payment", "status": "missing" },
{ "action": "Confirmation", "status": "missing" }
],
"completion": "partial"
}
],
"tech_stack": [],
"auth_methods": [],
"notes": []
}
}使用创建:
helpmetest_upsert_artifactjson
{
"type": "ProjectOverview",
"id": "project-<域名>",
"name": "ProjectOverview: <网站名称>",
"content": {
"url": "<url>",
"summary": "网站功能及目标用户说明",
"industry": "e-commerce|saas|healthcare|etc",
"persona_ids": ["persona-admin", "persona-user"],
"features": [
{ "feature_id": "feature-search", "name": "Search", "status": "working" },
{ "feature_id": "feature-cart", "name": "Cart", "status": "partial" },
{ "name": "Checkout", "status": "missing", "priority": "critical", "reason": "无法完成购买" },
{ "name": "Payment", "status": "missing", "priority": "critical", "reason": "未找到支付集成" }
],
"user_journeys": [
{
"name": "购买流程",
"persona": "customer",
"steps": [
{ "action": "搜索产品", "feature_id": "feature-search", "status": "found" },
{ "action": "查看产品详情", "feature_id": "feature-product-details", "status": "found" },
{ "action": "加入购物车", "feature_id": "feature-cart", "status": "found" },
{ "action": "结账", "status": "missing" },
{ "action": "支付", "status": "missing" },
{ "action": "确认", "status": "missing" }
],
"completion": "partial"
}
],
"tech_stack": [],
"auth_methods": [],
"notes": []
}
}Phase 4: Create Feature Artifacts with Scenario Enumeration
阶段4:创建Feature工件并枚举场景
Start with transaction features before page-level features
Before breaking down pages into individual features, identify and create features for complete end-to-end user flows. These critical flows prove the core business value works.
Ask: "What multi-step processes exist that users need to complete from start to finish?"
Examples:
- Multi-page forms (registration, checkout, booking) → Create ONE feature for "complete registration/purchase/booking"
- Wizards or workflows → Create ONE feature for the entire workflow
- Any process spanning multiple pages → Create ONE feature for the complete flow, mark as priority:critical
Then enumerate page-level features (individual buttons, filters, searches, etc.)
This is a two-step process:
- Create Feature artifact with basic info
- Explore feature interactively to enumerate ALL test scenarios
Why two steps? You need the artifact to store what you discover, and you need interactive exploration to find all the scenarios (happy paths, error cases, edge conditions). Skipping the exploration means tests will be blind guesses.
For each capability:
Step 4.1: Create Feature artifact skeleton
json
{
"type": "Feature",
"id": "feature-<name>",
"name": "Feature: <Name>",
"content": {
"goal": "What business outcome",
"non_goals": ["What this is NOT"],
"status": "untested",
"persona_ids": ["persona-user"],
"functional": [],
"non_functional": [],
"edge_cases": [],
"bugs": [],
"notes": []
}
}Step 4.2: Explore feature to enumerate ALL scenarios
Use to systematically explore every possibility:
helpmetest_run_interactive_commandA. Discover ALL functional scenarios (happy paths):
For each way users can successfully use this feature:
robot
As <auth_state>
Go To <feature-url>优先处理交易类功能,再处理页面级功能
在将页面拆分为单个功能前,先识别并创建端到端用户流程对应的Feature工件。这些关键流程是验证核心业务价值的关键。
思考:「用户需要完成哪些多步骤流程?」
示例:
- 多页面表单(注册、结账、预订)→ 为「完整注册/购买/预订流程」创建一个Feature
- 向导或工作流→ 为整个工作流创建一个Feature
- 跨多页面的流程→ 为完整流程创建一个Feature,并标记为priority:critical
之后再枚举页面级功能(如单个按钮、筛选器、搜索功能等)
分为两个步骤:
- 创建Feature工件的基础框架
- 交互式探索功能以枚举所有测试场景
为什么分两步?因为需要工件来存储探索结果,同时需要交互式探索来发现所有场景(正常流程、错误场景、边缘情况)。跳过探索步骤会导致测试用例不完整。
针对每个功能:
步骤4.1:创建Feature工件框架
json
{
"type": "Feature",
"id": "feature-<名称>",
"name": "Feature: <名称>",
"content": {
"goal": "业务目标",
"non_goals": ["非业务目标"],
"status": "untested",
"persona_ids": ["persona-user"],
"functional": [],
"non_functional": [],
"edge_cases": [],
"bugs": [],
"notes": []
}
}步骤4.2:探索功能以枚举所有场景
使用系统地探索所有可能的场景:
helpmetest_run_interactive_commandA. 发现所有功能场景(正常流程):
针对用户成功使用该功能的每种方式:
robot
As <auth_state>
Go To <feature-url>Try action - observe outcome
执行操作 - 观察结果
<action steps>
<操作步骤>
Document what worked and what the result was
记录成功执行的操作及结果
Create scenario for each discovered path:
```json
{
"name": "User can <accomplish goal>",
"given": "User on <page> with <precondition>",
"when": "User <performs action>",
"then": "<Expected successful outcome>",
"url": "<feature-url>",
"auth": ["<auth_state>"],
"priority": "critical|high|medium|low",
"test_ids": []
}B. Discover ALL edge case scenarios (error handling):
Try EVERY way the feature should fail gracefully:
Empty inputs:
robot
As <auth_state>
Go To <feature-url>
为每个发现的流程创建场景:
```json
{
"name": "用户可<达成目标>",
"given": "用户位于<页面>,<前置条件>",
"when": "用户<执行操作>",
"then": "<预期成功结果>",
"url": "<feature-url>",
"auth": ["<auth_state>"],
"priority": "critical|high|medium|low",
"test_ids": []
}B. 发现所有边缘场景(错误处理):
尝试所有功能应能优雅处理的失败情况:
空输入:
robot
As <auth_state>
Go To <feature-url>Try submitting with empty required fields
尝试提交必填字段为空的表单
Fill Text <selector> ${EMPTY}
Click <submit-button>
Fill Text <selector> ${EMPTY}
Click <submit-button>
Document: What error? Input preserved? State corrupted?
记录:错误信息?输入是否保留?状态是否损坏?
**Invalid formats:**
```robot
**无效格式:**
```robotTry invalid email format
尝试无效邮箱格式
Fill Text input[type=email] notanemail
Fill Text input[type=email] notanemail
Try non-numeric in number field
尝试在数字字段输入非数字内容
Fill Text input[type=number] abc
Fill Text input[type=number] abc
Document error handling
记录错误处理情况
**Boundary values:**
```robot
**边界值:**
```robotTry too long
尝试输入过长内容
Fill Text <selector> ${'x' * 1000}
Fill Text <selector> ${'x' * 1000}
Try too short (if min length exists)
尝试输入过短内容(若存在最小长度限制)
Fill Text <selector> a
Fill Text <selector> a
Try negative numbers (if applicable)
尝试输入负数(若适用)
Fill Text <selector> -1
Fill Text <selector> -1
Document validation errors
记录验证错误信息
**Duplicate entries:**
```robot
**重复输入:**
```robotTry duplicate username/email/identifier
尝试重复输入用户名/邮箱/标识符
Fill Text <selector> <existing-value>
Fill Text <selector> <已存在的值>
Document conflict handling
记录冲突处理情况
**Permission errors:**
```robot
**权限错误:**
```robotTry accessing without proper role
尝试以低权限角色访问受限页面
As <lower-privilege-state>
Go To <restricted-page>
As <lower-privilege-state>
Go To <restricted-page>
Document access denial
记录访问拒绝情况
Create scenario for EACH discovered error case:
```json
{
"name": "<Error scenario name>",
"given": "User on <page> with <state>",
"when": "User <performs invalid action>",
"then": "Error shown: <expected message>, input preserved, state unchanged",
"url": "<feature-url>",
"auth": ["<auth_state>"],
"priority": "high|medium|low",
"test_ids": []
}C. Non-functional scenarios (if feature is performance/security critical):
json
{
"name": "Search responds within 2 seconds",
"given": "User on search page",
"when": "User searches for common term",
"then": "Results displayed within 2000ms",
"url": "<search-url>",
"auth": ["<auth_state>"],
"priority": "medium",
"test_ids": []
}Step 4.3: Update Feature artifact with ALL discovered scenarios
json
{
"functional": [<all happy path scenarios>],
"edge_cases": [<all error handling scenarios>],
"non_functional": [<performance/security scenarios if applicable>]
}Each feature should have 10+ scenarios (5+ functional, 5+ edge cases minimum).
为每个发现的错误场景创建场景:
```json
{
"name": "<错误场景名称>",
"given": "用户位于<页面>,<状态>",
"when": "用户<执行无效操作>",
"then": "显示错误信息:<预期提示>,输入内容保留,状态未改变",
"url": "<feature-url>",
"auth": ["<auth_state>"],
"priority": "high|medium|low",
"test_ids": []
}C. 非功能场景(若功能对性能/安全性要求较高):
json
{
"name": "搜索响应时间不超过2秒",
"given": "用户位于搜索页面",
"when": "用户搜索常用关键词",
"then": "结果在2000ms内显示",
"url": "<search-url>",
"auth": ["<auth_state>"],
"priority": "medium",
"test_ids": []
}步骤4.3:更新Feature工件,添加所有发现的场景
json
{
"functional": [<所有正常流程场景>],
"edge_cases": [<所有错误处理场景>],
"non_functional": [<性能/安全场景(若适用)>]
}每个Feature应包含10个以上场景(至少5个正常流程、5个边缘场景)。
Phase 5: Link Everything
阶段5:关联所有工件
- Add features to ProjectOverview.features with status:
json
{ "feature_id": "feature-checkout", "name": "Checkout", "status": "working" } { "name": "Payment", "status": "missing", "priority": "critical", "reason": "No Stripe integration" } - For missing features: set status="missing", add priority and reason (no feature_id yet)
- 将功能添加到ProjectOverview.features中,并标记状态:
json
{ "feature_id": "feature-checkout", "name": "Checkout", "status": "working" } { "name": "Payment", "status": "missing", "priority": "critical", "reason": "无Stripe集成" } - 针对缺失的功能:设置status="missing",并添加优先级和原因(暂不设置feature_id)
Output
输出结果
- Persona artifacts for each user type
- ProjectOverview artifact with persona_ids, capabilities
- Feature artifacts for each capability
- Summary of what was discovered
- 每个用户类型对应的Persona工件
- 包含persona_ids和功能列表的ProjectOverview工件
- 每个功能对应的Feature工件
- 探索结果总结
Critical Rules
关键规则
- Create Persona artifacts - Don't embed personas in ProjectOverview
- Use persona_ids - Reference personas by ID, not embedded
- Given/When/Then - All scenarios use this format
- Explore authenticated AND unauthenticated - Some features need login
- Tag scenarios properly - All scenarios need priority: tag minimum
Version: 0.1
- 创建Persona工件 - 不要将Persona嵌入到ProjectOverview中
- 使用persona_ids - 通过ID引用Persona,而非直接嵌入
- Given/When/Then格式 - 所有场景均使用该格式
- 同时探索已认证和未认证状态 - 部分功能需要登录后才能使用
- 正确标记场景 - 所有场景至少标记优先级标签
版本: 0.1",