第三章:针对不同角色的最佳实践(详细版)
本文摘要: 本文详细介绍了Claude AI针对程序员和UI设计师角色的最佳实践方法。对于程序员,重点包括:1) 使用Plan模式进行架构设计,避免直接编码导致的问题;2) 任务拆解与增量式开发策略;3) 通过CLAUDE.md建立团队代码规范,并在PR审查中应用;4) 利用Slash Commands和MCP服务器实现自动化部署与外部服务集成。对于UI设计师,则介绍了如何使用brand-guid
第三章:针对不同角色的最佳实践(详细版)
3.1 程序员最佳实践
3.1.1 代码开发与重构
技巧1:使用Plan模式进行架构设计
为什么重要?
直接让Claude写代码,往往会跳过设计步骤,导致:
- 架构不清晰
- 缺少边缘情况处理
- 代码风格不一致
正确做法:
# 1. 进入Plan模式
Shift+Tab × 2
# 2. 描述需求
请帮我实现用户认证功能,包括:
1. 用户注册
2. 用户登录
3. JWT token验证
4. 密码加密存储
# 3. Claude会生成详细计划
# 4. 仔细审查计划,提出修改意见
# 5. 确认后才开始执行
Plan模式输出示例:
# Plan: 用户认证功能实现
## 需求分析
实现用户认证功能,包括注册、登录、JWT验证、密码加密
## 现有项目分析
- 框架:Express + TypeScript
- 数据库:PostgreSQL
- 已有用户表模型:models/User.ts
- 缺少:认证中间件、路由、控制器
## 实施计划
### 阶段1:数据库层
1. 更新用户模型,添加密码字段
2. 创建数据库迁移脚本
### 阶段2:服务层
1. 创建认证服务 (services/auth.service.ts)
2. 创建用户服务扩展
### 阶段3:路由层
1. 创建认证路由 (routes/auth.routes.ts)
### 阶段4:中间件
1. 创建认证中间件 (middleware/auth.middleware.ts)
### 阶段5:测试
1. 单元测试
2. 集成测试
## 文件变更清单
- 新增:services/auth.service.ts
- 新增:routes/auth.routes.ts
- 新增:middleware/auth.middleware.ts
- 修改:models/User.ts
- 新增:tests/auth.test.ts
---
确认后开始执行? (yes/no/modify)
技巧2:任务拆解与增量式开发
为什么要拆解任务?
大任务不拆解的问题:
├── Token消耗多,可能超过上下文窗口
├── 对话轮数多,Claude容易"遗忘"要求
└── 一次改动太多,出问题难以定位
拆解任务的好处:
├── 每个任务小而专注
├── 完成后立即清理上下文
└── 出问题容易回滚和修复
实战案例:重构通用组件
# ❌ 错误做法:一次性重构所有地方
请把项目中所有类似表格的地方都用新组件重构
# ✅ 正确做法:逐步重构
# 第一步:开发通用组件
请帮我开发一个通用的DataTable组件,要求:
1. 支持列配置
2. 支持排序
3. 支持分页
4. 支持选择行
# 等组件开发完成,Demo验证通过后
# 第二步:重构第一个页面
现在用这个DataTable组件重构 UserList 页面
# 重构完成后,清理上下文
/clear
# 第三步:重构第二个页面
现在用这个DataTable组件重构 OrderList 页面
# 继续逐个重构...
技巧3:通过Hooks自动格式化代码
问题: Claude写的代码格式可能不一致
解决方案: 配置自动格式化Hook
// .claude/settings.json
{
"hooks": {
"after-write-hook": {
"command": "npm run format || true",
"enabled": true,
"blocking": false
}
}
}
价值: 彻底消灭CI里的格式报错
3.1.2 代码审查与团队协作
技巧1:使用CLAUDE.md建立团队代码规范
标准CLAUDE.md模板:
# 项目名称:E-Commerce Platform
## 代码规范更新记录
### 2024-01-27: Enum vs String Union
- ❌ 不要使用enum
- ✅ 改用string union
- 理由:更好的类型推断和Tree-shaking
**错误示例:**
```typescript
// ❌ 错误
enum Status {
Active = 'active',
Inactive = 'inactive'
}
正确示例:
// ✅ 正确
type Status = 'active' | 'inactive';
2024-01-25: 包管理器选择
- 永远使用bun而不是npm
- 理由:启动速度快10倍
2024-01-20: 错误处理规范
- 所有API调用必须包含错误处理
- 使用try-catch包裹异步操作
- 错误信息要包含足够的上下文
错误示例:
// ❌ 错误
const user = await getUser(id);
正确示例:
// ✅ 正确
try {
const user = await getUser(id);
return user;
} catch (error) {
logger.error(`Failed to get user ${id}:`, error);
throw new Error(`User not found: ${id}`);
}
2024-01-15: 命名规范
- 文件名:kebab-case (user-profile.ts)
- 组件名:PascalCase (UserProfile)
- 函数/变量:camelCase (getUserProfile)
- 常量:UPPER_SNAKE_CASE (API_BASE_URL)
- 类型/接口:PascalCase (UserProfile)
Git提交规范
- feat: 新功能
- fix: 修复bug
- docs: 文档更新
- style: 代码格式调整
- refactor: 重构
- test: 测试相关
- chore: 构建/工具相关
示例:feat: 添加用户登录功能
#### 技巧2:在PR中使用Claude进行代码审查
**方法1:使用GitHub MCP**
```bash
# 安装GitHub MCP
claude mcp add github npx -y @modelcontextprotocol/server-github
# 在Claude Code中
请使用github MCP查看最近的PR,并审查代码变更
# Claude会:
# 1. 获取PR列表
# 2. 读取代码变更
# 3. 进行代码审查
# 4. 提出改进建议
方法2:手动审查PR
# 复制PR的diff
# 在Claude Code中
请审查以下代码变更,检查:
1. 代码风格是否符合CLAUDE.md中的规范
2. 是否有潜在的bug
3. 是否有安全问题
4. 性能是否有优化空间
[粘贴PR diff]
技巧3:通过CLAUDE.md的AI进化机制避免重复犯错
实战案例:
场景:在PR中发现代码使用了enum,但规范要求使用string union
步骤1:在PR中指出问题
@claude 这里的代码使用了enum,
但我们项目规范要求使用string union
步骤2:让Claude记住教训
@claude 请把这次的教训写入CLAUDE.md:
不要使用enum,改用string union,
因为这样有更好的类型推断和Tree-shaking支持
步骤3:Claude自动更新
Claude会在CLAUDE.md中添加:
## 代码规范更新 (2024-01-27)
### Enum vs String Union
- ❌ 不要使用enum
- ✅ 改用string union
- 理由:更好的类型推断和Tree-shaking
步骤4:团队共同维护
# 将CLAUDE.md签入Git
git add CLAUDE.md
git commit -m "docs: 更新代码规范,禁止使用enum"
git push
步骤5:持续进化
# Claude不会再重复犯同样的错误
# 整个团队都受益
3.1.3 项目管理与部署
技巧1:使用Slash Commands自动化部署
创建部署命令:
# 1. 创建命令目录
mkdir -p .claude/commands
# 2. 创建部署命令文件
cat > .claude/commands/deploy-production.md << 'EOF'
# 生产环境部署
你是一个部署专家。请按以下步骤执行生产环境部署:
## 前置检查
1. 确认当前分支:!git branch --show-current
2. 检查是否有未提交的更改:!git status
3. 运行测试:!npm run test:all
4. 运行代码检查:!npm run lint
## 构建阶段
5. 构建生产版本:!npm run build
6. 检查构建产物是否生成
## 部署阶段
7. 部署到生产环境:!npm run deploy:production
8. 验证部署:!curl https://api.example.com/health
## 回滚准备
如果部署失败,立即执行:
!git revert HEAD
!git push origin main
部署完成后,生成部署报告。
EOF
# 3. 使用命令
/deploy-production
技巧2:利用MCP服务器连接外部服务
常用场景:
# 场景1:创建PR
请使用github MCP创建PR,标题为"feat: 添加用户认证功能"
# 场景2:查询数据
请查询数据库中的用户表,统计活跃用户数
# 场景3:部署验证
用Chrome DevTools MCP打开 https://example.com,
验证新功能是否正常工作
技巧3:通过子代理并行处理任务
场景:需要同时进行代码审查、测试编写、文档生成
请帮我并行执行以下任务:
1. 使用code-reviewer agent审查当前分支的代码变更
2. 使用test-writer agent为新增功能编写测试用例
3. 使用doc-generator agent更新API文档
# Claude会创建3个子代理,每个有独立上下文,并行执行
3.2 UI设计师最佳实践
3.2.1 设计系统与规范
技巧1:使用brand-guidelines skill维护设计一致性
安装brand-guidelines skill:
# 1. 下载官方brand-guidelines skill
# 从 https://github.com/anthropics/skills/tree/main/skills/brand-guidelines
# 2. 放入项目skills目录
cp -r brand-guidelines .claude/skills/
# 3. 修改skill.md,添加你的品牌规范
自定义品牌规范示例:
---
name: company-brand-guidelines
description: 公司品牌设计规范,包括颜色、字体、组件规范
---
# 公司品牌设计规范
## 品牌色彩
### 主色调
- 主色:#2563EB(蓝色)
- 辅助色:#10B981(绿色)
- 警告色:#F59E0B(橙色)
- 错误色:#EF4444(红色)
### 中性色
- 黑色:#000000
- 深灰:#1F2937
- 中灰:#6B7280
- 浅灰:#E5E7EB
- 白色:#FFFFFF
### 字体
- 中文字体:PingFang SC
- 英文字体:Inter
- 代码字体:JetBrains Mono
### 字号规范
- 标题1:32px / 48px行高
- 标题2:24px / 36px行高
- 标题3:18px / 28px行高
- 正文:14px / 22px行高
- 辅助文字:12px / 18px行高
### 间距规范
- 使用8px的倍数:8px, 16px, 24px, 32px, 48px
- 组件内边距默认16px
- 组件之间间距默认24px
### 圆角规范
- 小圆角:4px(按钮、输入框)
- 中圆角:8px(卡片)
- 大圆角:16px(对话框)
### 阴影规范
- 轻微阴影:box-shadow: 0 1px 2px rgba(0,0,0,0.05)
- 常规阴影:box-shadow: 0 2px 4px rgba(0,0,0,0.1)
- 深度阴影:box-shadow: 0 4px 12px rgba(0,0,0,0.15)
## 组件规范
### 按钮
- 高度:40px
- 内边距:12px 24px
- 圆角:4px
- 字号:14px
### 输入框
- 高度:40px
- 内边距:10px 14px
- 边框:1px solid #D1D5DB
- 圆角:4px
- 字号:14px
### 卡片
- 内边距:24px
- 圆角:8px
- 背景:#FFFFFF
- 阴影:常规阴影
## 交互规范
### Hover状态
- 透明度变为0.8
- 添加轻微阴影
### 点击反馈
- 缩放0.95
- 持续时间100ms
### 加载状态
- 显示loading图标
- 禁用交互
- 半透明遮罩
使用brand-guidelines skill:
# Claude会自动应用品牌规范
使用brand-guidelines skill为我们的SaaS产品设计官网首页
# 输出的设计会自动遵循:
# - 品牌色彩
# - 字体规范
# - 间距规范
# - 组件规范
技巧2:创建设计相关Skills
创建design-system skill:
# 使用skill-creator创建
创建skill,能按照公司设计规范创建React组件
# Claude会自动创建skill,包含:
# - 组件模板
# - 样式规范
# - 使用示例
手动创建design-system skill:
---
name: company-design-system
description: 按照公司设计规范创建前端组件
---
# 公司设计系统助手
这个Skill帮助设计师和开发者按照公司设计规范创建前端组件。
## 组件创建流程
### 1. 理解需求
- 明确组件的功能
- 确定组件的变体
- 列出组件的props
### 2. 应用设计规范
- 使用品牌色彩
- 遵循间距规范
- 应用圆角和阴影
### 3. 生成代码
- 使用TypeScript
- 使用Tailwind CSS
- 包含 PropTypes
- 包含使用示例
## 组件模板
### 按钮组件模板
```tsx
import { ButtonHTMLAttributes, ReactNode } from 'react';
import { cn } from '@/utils/cn';
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
variant?: 'primary' | 'secondary' | 'outline';
size?: 'sm' | 'md' | 'lg';
children: ReactNode;
}
export function Button({
variant = 'primary',
size = 'md',
className,
children,
...props
}: ButtonProps) {
const baseStyles = 'rounded font-medium transition-all';
const variants = {
primary: 'bg-blue-600 text-white hover:bg-blue-700',
secondary: 'bg-green-600 text-white hover:bg-green-700',
outline: 'border-2 border-blue-600 text-blue-600 hover:bg-blue-50'
};
const sizes = {
sm: 'px-3 py-1.5 text-sm',
md: 'px-6 py-2.5 text-base',
lg: 'px-8 py-3 text-lg'
};
return (
<button
className={cn(baseStyles, variants[variant], sizes[size], className)}
{...props}
>
{children}
</button>
);
}
使用示例
创建一个主按钮:
<Button variant="primary" size="md">
点击我
</Button>
### 3.2.2 原型与界面开发
#### 技巧1:使用Claude Code快速生成HTML/CSS原型
**实战案例:响应式导航栏**
```bash
请创建一个响应式导航栏,包含:
1. Logo在左侧
2. 导航链接在中间(首页、产品、关于、联系)
3. 用户头像在右侧
4. 移动端使用汉堡菜单
5. 使用Tailwind CSS
6. 遵循我们的设计规范(颜色、间距)
# Claude会生成:
# - 完整的HTML结构
# - Tailwind CSS样式
# - 响应式设计
# - 移动端菜单交互
输出示例:
import { useState } from 'react';
import { Menu, X, User } from 'lucide-react';
export function Navigation() {
const [isOpen, setIsOpen] = useState(false);
return (
<nav className="bg-white shadow-md">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="flex justify-between h-16">
{/* Logo */}
<div className="flex-shrink-0 flex items-center">
<img className="h-8 w-auto" src="/logo.svg" alt="Logo" />
</div>
{/* Desktop Navigation */}
<div className="hidden md:flex items-center space-x-8">
<a href="/" className="text-gray-700 hover:text-blue-600">首页</a>
<a href="/products" className="text-gray-700 hover:text-blue-600">产品</a>
<a href="/about" className="text-gray-700 hover:text-blue-600">关于</a>
<a href="/contact" className="text-gray-700 hover:text-blue-600">联系</a>
</div>
{/* User Avatar */}
<div className="hidden md:flex items-center">
<button className="p-2 rounded-full hover:bg-gray-100">
<User className="h-6 w-6 text-gray-600" />
</button>
</div>
{/* Mobile menu button */}
<div className="md:hidden flex items-center">
<button
onClick={() => setIsOpen(!isOpen)}
className="p-2 rounded-md text-gray-600 hover:text-gray-900 hover:bg-gray-100"
>
{isOpen ? <X className="h-6 w-6" /> : <Menu className="h-6 w-6" />}
</button>
</div>
</div>
</div>
{/* Mobile menu */}
{isOpen && (
<div className="md:hidden">
<div className="px-2 pt-2 pb-3 space-y-1">
<a href="/" className="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-50">首页</a>
<a href="/products" className="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-50">产品</a>
<a href="/about" className="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-50">关于</a>
<a href="/contact" className="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-50">联系</a>
</div>
</div>
)}
</nav>
);
}
技巧2:利用Chrome DevTools MCP进行网页测试与优化
安装Chrome DevTools MCP:
claude mcp add chrome-devtools npx chrome-devtools-mcp@latest
测试网页在不同设备上的表现:
用Chrome DevTools MCP打开 http://localhost:3000,然后:
1. 在iPhone 14 Pro尺寸下截图
2. 在iPad Pro尺寸下截图
3. 在桌面1920x1080尺寸下截图
4. 检查所有链接是否可点击
5. 获取页面性能数据
6. 检查是否有可访问性问题
验证设计实现:
请使用Chrome DevTools MCP验证以下设计要求:
1. 按钮高度是否为40px
2. 输入框边框是否为1px solid #D1D5DB
3. 卡片圆角是否为8px
4. 主色调是否为#2563EB
5. 间距是否使用8px的倍数
技巧3:使用Canvas Design Skill创建视觉素材
安装canvas-design skill:
# 从官方仓库下载
# https://github.com/anthropics/skills/tree/main/skills/canvas-design
# 放入skills目录
cp -r canvas-design .claude/skills/
创建设计素材:
使用canvas-design skill创建一个产品功能介绍图,要求:
1. 风格简约现代
2. 使用我们的品牌色(#2563EB)
3. 展示3个核心功能
4. 每个功能包含图标、标题、描述
5. 输出为PNG格式
3.2.3 设计交付与协作
技巧1:使用CLAUDE.md记录设计规范与交付标准
设计师的CLAUDE.md模板:
# 设计规范与交付标准
## 设计交付标准
### 交付格式
- UI设计稿:Figma链接
- 图标资源:SVG格式,72x72px
- 图片资源:PNG格式,2x和3x倍图
- 原型图:可交互的Figma原型
### 设计规范
- 字体:PingFang SC,常规400,中等500
- 行高:1.5倍字号
- 间距:使用8px的倍数(8px, 16px, 24px, 32px)
- 颜色:使用品牌色板
### 命名规范
- 图标文件:icon-{名称}.svg
- 图片文件:img-{用途}-{尺寸}.png
- 组件文件:{组件名}.component.tsx
### 代码交付要求
- 使用TypeScript
- 使用Tailwind CSS
- 组件要有PropTypes
- 包含使用示例
## 开发协作规范
### 设计到开发的流程
1. 设计师在Figma完成设计
2. 使用Claude Code生成React代码
3. 开发者review代码
4. 部署到测试环境
5. 使用Chrome DevTools MCP验证
6. 设计师验收
7. 交付生产
### 验收标准
- 像素级还原设计稿
- 响应式适配正常
- 交互效果符合预期
- 性能指标达标
- 可访问性符合标准
技巧2:通过Skills将设计转换为前端代码
创建design-to-code skill:
创建skill,能将Figma设计稿转换为React + Tailwind CSS代码
# Claude会创建skill,包含:
# - Figma API调用方法
# - 组件结构识别
# - 样式转换规则
# - 代码生成模板
使用design-to-code skill:
使用design-to-code skill转换这个Figma设计稿:
[Figma链接]
要求:
1. 识别所有组件
2. 生成React组件代码
3. 使用Tailwind CSS
4. 包含PropTypes
5. 遵循我们的命名规范
技巧3:利用子代理并行处理多个设计任务
请帮我并行完成以下设计任务:
1. 首页UI设计
2. 产品页UI设计
3. 关于我们页UI设计
4. 联系我们页UI设计
每个页面要:
- 遵循品牌设计规范
- 响应式设计
- 包含所有交互状态
- 输出为Figma设计稿
# Claude会创建4个子代理并行执行
3.3 测试人员最佳实践
3.3.1 测试用例生成
技巧1:使用Claude Code生成测试用例
生成单元测试:
请为src/auth/userAuth.ts生成单元测试,覆盖以下场景:
1. 成功登录
2. 密码错误
3. 用户不存在
4. Token过期
5. 网络错误
使用Jest框架
确保代码严格遵守我在CLAUDE.md中的原则
输出示例:
import { authenticateUser } from '@/auth/userAuth';
import { getUserByEmail } from '@/models/user';
import { verifyPassword } from '@/utils/crypto';
jest.mock('@/models/user');
jest.mock('@/utils/crypto');
describe('authenticateUser', () => {
const mockUser = {
id: '1',
email: 'test@example.com',
password: 'hashed_password'
};
beforeEach(() => {
jest.clearAllMocks();
});
describe('成功登录', () => {
it('当凭证有效时返回用户信息', async () => {
(getUserByEmail as jest.Mock).mockResolvedValue(mockUser);
(verifyPassword as jest.Mock).mockReturnValue(true);
const result = await authenticateUser('test@example.com', 'password');
expect(result).toEqual(mockUser);
expect(getUserByEmail).toHaveBeenCalledWith('test@example.com');
expect(verifyPassword).toHaveBeenCalledWith('password', 'hashed_password');
});
});
describe('密码错误', () => {
it('当密码错误时抛出异常', async () => {
(getUserByEmail as jest.Mock).mockResolvedValue(mockUser);
(verifyPassword as jest.Mock).mockReturnValue(false);
await expect(
authenticateUser('test@example.com', 'wrong_password')
).rejects.toThrow('Invalid credentials');
});
});
describe('用户不存在', () => {
it('当用户不存在时抛出异常', async () => {
(getUserByEmail as jest.Mock).mockResolvedValue(null);
await expect(
authenticateUser('nonexistent@example.com', 'password')
).rejects.toThrow('User not found');
});
});
describe('Token过期', () => {
it('当Token过期时抛出异常', async () => {
// Token过期测试逻辑
});
});
describe('网络错误', () => {
it('当数据库连接失败时抛出异常', async () => {
(getUserByEmail as jest.Mock).mockRejectedValue(new Error('Database error'));
await expect(
authenticateUser('test@example.com', 'password')
).rejects.toThrow('Database error');
});
});
});
技巧2:通过子代理并行生成不同类型的测试用例
请帮我并行生成以下测试:
1. 单元测试:测试所有工具函数
2. 集成测试:测试API端点
3. E2E测试:测试核心业务流程
4. 性能测试:测试API响应时间
确保代码严格遵守我在CLAUDE.md中的原则
# Claude会创建4个子代理并行执行
技巧3:利用CLAUDE.md记录测试规范和模板
测试人员的CLAUDE.md模板:
# 测试规范
## 测试命名规范
- 使用`should_`描述期望行为
- 示例:`should_return_200_when_valid_credentials`
## 测试覆盖率要求
- 单元测试覆盖率:≥80%
- 集成测试覆盖率:≥60%
- E2E测试覆盖核心流程
## 测试模板
### 单元测试模板
```typescript
describe('功能名称', () => {
beforeEach(() => {
// 每个测试前的准备工作
});
describe('场景描述', () => {
it('should_期望行为', async () => {
// Arrange(准备)
const input = '测试数据';
// Act(执行)
const result = await function(input);
// Assert(断言)
expect(result).toBe('期望结果');
});
});
});
集成测试模板
describe('API端点测试', () => {
beforeAll(async () => {
// 启动测试服务器
await setupTestServer();
});
afterAll(async () => {
// 关闭测试服务器
await teardownTestServer();
});
it('should_期望行为', async () => {
const response = await request(app)
.post('/api/endpoint')
.send({ data: 'test' });
expect(response.status).toBe(200);
expect(response.body).toEqual({ success: true });
});
});
E2E测试模板
describe('业务流程测试', () => {
it('should_完成整个流程', async () => {
// 1. 打开页面
await page.goto('https://example.com');
// 2. 执行操作
await page.click('#button');
await page.fill('#input', 'test');
// 3. 验证结果
await expect(page).toHaveURL('https://example.com/success');
});
});
测试数据管理
Fixture目录结构
tests/
├── fixtures/
│ ├── users.json
│ ├── products.json
│ └── orders.json
└── __mocks__/
└── database.ts
Mock数据规范
- 使用真实数据格式
- 覆盖边缘情况
- 数据独立,不相互依赖
### 3.3.2 自动化测试
#### 技巧1:使用Chrome DevTools MCP进行端到端测试
**安装Chrome DevTools MCP:**
```bash
claude mcp add chrome-devtools npx chrome-devtools-mcp@latest
编写E2E测试脚本:
用Chrome DevTools MCP完成以下E2E测试流程:
场景:用户登录流程
1. 打开 http://localhost:3000/login
2. 截取初始页面(保存为 login-initial.png)
3. 填写用户名:testuser@example.com
4. 填写密码:Test1234!
5. 点击"登录"按钮
6. 等待页面跳转(最多5秒)
7. 验证当前URL是否为 http://localhost:3000/dashboard
8. 验证页面是否显示用户名
9. 截取最终页面(保存为 login-success.png)
10. 生成测试报告
如果任何步骤失败,记录错误信息并截图
技巧2:利用Scripts编写可重用的测试脚本
创建测试脚本:
# 创建测试脚本目录
mkdir -p .claude/skills/e2e-testing/scripts
# 创建登录测试脚本
cat > .claude/skills/e2e-testing/scripts/login-test.js << 'EOF'
const puppeteer = require('puppeteer');
async function loginTest(baseUrl, username, password) {
const browser = await puppeteer.launch();
const page = await browser.newPage();
try {
// 1. 打开登录页面
await page.goto(`${baseUrl}/login`);
console.log('✓ 打开登录页面');
// 2. 填写表单
await page.fill('#username', username);
await page.fill('#password', password);
console.log('✓ 填写表单');
// 3. 点击登录按钮
await page.click('#login-button');
console.log('✓ 点击登录按钮');
// 4. 等待跳转
await page.waitForNavigation({ timeout: 5000 });
console.log('✓ 页面跳转');
// 5. 验证URL
const url = page.url();
if (!url.includes('/dashboard')) {
throw new Error(`登录失败,当前URL: ${url}`);
}
console.log('✓ 登录成功');
// 6. 截图
await page.screenshot({ path: 'login-success.png' });
console.log('✓ 截图已保存');
return { success: true, url };
} catch (error) {
console.error('✗ 测试失败:', error.message);
await page.screenshot({ path: 'login-error.png' });
return { success: false, error: error.message };
} finally {
await browser.close();
}
}
// 如果直接运行此脚本
if (require.main === module) {
loginTest('http://localhost:3000', 'testuser@example.com', 'Test1234!')
.then(result => console.log('测试结果:', result))
.catch(error => console.error('执行失败:', error));
}
module.exports = { loginTest };
EOF
使用测试脚本:
# 在Claude Code中
运行登录测试脚本,测试环境为 http://localhost:3000
用户名:testuser@example.com
密码:Test1234!
# Claude会调用脚本并返回结果
技巧3:通过Hooks在代码变更后自动运行测试
配置自动测试Hook:
// .claude/settings.json
{
"hooks": {
"after-write-hook": {
"command": "npm test -- --watchAll=false || true",
"enabled": true,
"blocking": false
}
}
}
价值: 每次代码变更后自动运行测试,及早发现问题
3.3.3 缺陷分析与报告
技巧1:使用Claude Code分析日志和错误信息
# 分析错误日志
请分析error.log中的错误信息,找出:
1. 最常见的错误类型
2. 错误发生的时间分布
3. 可能的根因
4. 修复建议
请生成详细的分析报告
技巧2:自动生成缺陷报告和修复建议
# 根据测试结果生成报告
根据test-results.xml生成缺陷报告,包括:
1. 失败的测试用例清单
2. 每个失败的错误信息
3. 可能的原因分析
4. 修复建议(按优先级排序)
5. 回归测试计划
输出格式:Markdown
输出示例:
# 缺陷报告
生成时间:2024-01-27 10:30:00
测试版本:v1.2.3
## 概览
- 总测试用例:150
- 通过:142
- 失败:8
- 跳过:0
- 通过率:94.67%
## 失败用例详情
### 🔴 高优先级(3个)
#### 1. 用户登录失败
**测试用例:** `should_login_with_valid_credentials`
**错误信息:**
Error: Expected status 200, got 500
at tests/auth/login.test.ts:45:20
**可能原因:**
- 数据库连接失败
- Token生成服务异常
**修复建议:**
1. 检查数据库连接配置
2. 验证JWT secret是否正确
3. 添加更详细的错误日志
**负责模块:** 认证服务
**预计修复时间:** 2小时
#### 2. 支付超时
**测试用例:** `should_process_payment_successfully`
**错误信息:**
TimeoutError: Payment processing exceeded 30s timeout
**可能原因:**
- 第三方支付API响应慢
- 网络问题
**修复建议:**
1. 增加超时时间到60s
2. 添加重试机制
3. 考虑使用异步处理
**负责模块:** 支付服务
**预计修复时间:** 4小时
#### 3. 数据库连接池耗尽
**测试用例:** `should_handle_concurrent_requests`
**错误信息:**
Error: Connection pool exhausted
**可能原因:**
- 连接未正确释放
- 并发量超过配置
**修复建议:**
1. 检查连接池配置
2. 确保所有连接都正确释放
3. 增加连接池大小
**负责模块:** 数据库层
**预计修复时间:** 3小时
### 🟡 中优先级(3个)
[...中优先级缺陷...]
### 🟢 低优先级(2个)
[...低优先级缺陷...]
## 修复计划
### 第一阶段(今天)
1. 修复用户登录失败(高优先级)
2. 修复数据库连接池问题(高优先级)
### 第二阶段(明天)
1. 修复支付超时问题(高优先级)
2. 修复中优先级问题
### 第三阶段(本周)
1. 修复低优先级问题
2. 完善回归测试
## 回归测试计划
### 核心回归测试
1. 用户登录流程
2. 支付流程
3. 并发请求处理
### 全面回归测试
- 所有150个测试用例
- 性能测试
- 压力测试
技巧3:利用MCP服务器连接测试管理工具
# 使用Jira MCP创建缺陷报告(假设有Jira MCP)
请使用jira MCP创建缺陷报告:
- 标题:用户无法登录
- 优先级:High
- 描述:详见附件test.log
- 附件:error.log
# 或者使用GitHub MCP创建Issue
请使用github MCP创建Issue:
- 标题:修复用户登录失败问题
- 标签:bug, high-priority
- 描述:[粘贴详细错误信息]
本章重点回顾
程序员核心技巧
| 技巧 | 价值 |
|---|---|
| Plan模式 | 先规划后执行,减少返工 |
| 任务拆解 | 每个任务小而专注,出问题容易定位 |
| CLAUDE.md AI进化 | 集体智慧,持续进化 |
| Hooks自动格式化 | 彻底消灭CI里的格式报错 |
UI设计师核心技巧
| 技巧 | 价值 |
|---|---|
| brand-guidelines skill | 设计一致性 |
| Chrome DevTools MCP | 网页测试与验证 |
| design-to-code skill | 快速将设计转换为代码 |
| 子代理并行处理 | 同时完成多个设计任务 |
测试人员核心技巧
| 技巧 | 价值 |
|---|---|
| 自动生成测试用例 | 覆盖全面场景 |
| Chrome DevTools MCP E2E测试 | 端到端自动化测试 |
| 自动生成缺陷报告 | 结构化问题分析 |
| Hooks自动测试 | 代码变更后自动测试 |
不同角色的共同原则
-
充分利用CLAUDE.md
- 记录规范
- AI进化机制
- 团队共享
-
善用Plan模式
- 复杂任务先规划
- 确认后再执行
- 减少返工
-
利用子代理并行处理
- 提高效率
- 独立上下文
- 互不干扰
-
创建自定义Skills
- 封装专业知识
- 提高复用性
- 团队共享
实践练习(可选)
程序员练习
练习1:使用Plan模式实现一个功能(15分钟)
# 1. 进入Plan模式
# 2. 描述一个你想要的功能
# 3. 查看Claude生成的计划
# 4. 修改并完善计划
# 5. 确认后执行
练习2:创建团队CLAUDE.md(15分钟)
# 1. 创建CLAUDE.md文件
# 2. 添加你团队的代码规范
# 3. 测试Claude是否遵守规范
# 4. 通过PR验证AI进化机制
UI设计师练习
练习1:创建brand-guidelines skill(20分钟)
# 1. 下载官方brand-guidelines skill
# 2. 修改为你的品牌规范
# 3. 测试是否能正确应用规范
练习2:使用Chrome DevTools MCP测试网页(15分钟)
# 1. 启动你的项目
# 2. 使用Chrome DevTools MCP进行测试
# 3. 生成测试报告
测试人员练习
练习1:生成单元测试(15分钟)
# 1. 选择一个需要测试的模块
# 2. 使用Claude Code生成测试用例
# 3. 运行测试并检查覆盖率
练习2:使用Chrome DevTools MCP进行E2E测试(20分钟)
# 1. 编写E2E测试流程
# 2. 使用Chrome DevTools MCP执行
# 3. 生成测试报告
更多推荐

所有评论(0)