자동화 테스트 전략: 품질 보증의 기초
개발팀
2분 읽기
테스트품질관리자동화
자동화 테스트 전략: 품질 보증의 기초
자동화 테스트는 코드 품질을 지속적으로 보증하는 가장 효과적인 방법입니다.
테스트 피라미드
E2E 테스트 (10%)
/ \
통합 테스트 (30%)
/ \
단위 테스트 (60%)
단위 테스트 (Unit Tests)
// Jest를 사용한 단위 테스트 예제
describe('Calculator', () => {
it('두 수를 더해야 합니다', () => {
expect(add(2, 3)).toBe(5);
});
it('두 수를 빼야 합니다', () => {
expect(subtract(5, 3)).toBe(2);
});
});
통합 테스트 (Integration Tests)
describe('User API', () => {
it('사용자를 생성하고 조회할 수 있습니다', async () => {
const user = await createUser({ name: '홍길동' });
const retrieved = await getUser(user.id);
expect(retrieved.name).toBe('홍길동');
});
});
E2E 테스트 (End-to-End Tests)
describe('User Flow', () => {
it('사용자가 로그인하고 프로필을 볼 수 있습니다', async () => {
await page.goto('http://localhost:3000');
await page.fill('input[name="email"]', 'test@example.com');
await page.fill('input[name="password"]', 'password');
await page.click('button[type="submit"]');
await page.waitForNavigation();
const title = await page.textContent('h1');
expect(title).toContain('My Profile');
});
});
테스트 커버리지
# 커버리지 리포트 생성
npm test -- --coverage
# 목표: 80% 이상의 커버리지 유지
모킹 (Mocking)
// 외부 API 모킹
jest.mock('./api');
describe('UserService', () => {
beforeEach(() => {
api.getUser.mockResolvedValue({
id: 1,
name: '홍길동'
});
});
it('사용자 정보를 가져옵니다', async () => {
const user = await getUserInfo(1);
expect(user.name).toBe('홍길동');
});
});
테스트 베스트 프랙티스
- 명확한 테스트 이름: 테스트가 무엇을 검증하는지 명확하게
- AAA 패턴: Arrange → Act → Assert
- 한 가지만 테스트: 각 테스트는 하나의 기능만 검증
- DRY 원칙: 테스트 코드도 반복하지 않기
- 빠른 테스트: 테스트는 빨리 실행되어야 함
테스트 자동화 도구
| 도구 | 용도 |
|---|---|
| Jest | 단위/통합 테스트 |
| React Testing Library | React 컴포넌트 테스트 |
| Cypress | E2E 테스트 |
| Playwright | 크로스 브라우저 E2E |
| Vitest | Vite 프로젝트 테스트 |
효과적인 테스트 전략은 버그를 미리 방지하고 리팩토링을 안전하게 만듭니다.