Skip to content

Latest commit

 

History

History
218 lines (184 loc) · 41.5 KB

File metadata and controls

218 lines (184 loc) · 41.5 KB

Adaptive Streaming Player의 시청 품질 서비스 TEST Plan

Backend Unit Test Cases

backend api의 검증은 postman을 활용한 unit test를 사용하고, 테스트 코드를 통해 검증을 시행한다

테스트 케이스

유저 관련 API

API 엔드포인트 테스트 이름 테스트 케이스 ID 설명 테스트 데이터
POST /users/login 로그인 성공 TC1-1 올바른 자격 증명으로 로그인 요청 본문: {"email": "user@example.com", "password": "password123"}
로그인 실패 TC1-2 잘못된 자격 증명으로 로그인 실패 요청 본문: {"email": "user@example.com", "password": "wrongpassword"}
POST /users/logout 로그아웃 성공 TC2-1 로그인된 사용자 로그아웃 Header: Authorization: Bearer {validToken}
로그아웃 실패 TC42-2 로그인되지 않은 상태에서 로그아웃 시도 -
GET /users/me 현재 사용자 정보 조회 TC3-1 로그인된 사용자의 정보 조회 Header: Authorization: Bearer {validToken}
인증되지 않은 사용자 TC43-2 인증되지 않은 상태에서 정보 조회 시도 -
POST /users/signup 회원가입 성공 TC4-1 새로운 사용자 회원가입 요청 본문: {"username": "newuser", "email": "newuser@example.com", "password": "newpassword123"}
중복 이메일로 회원가입 TC4-2 이미 존재하는 이메일로 회원가입 시도 요청 본문: {"username": "existinguser", "email": "existing@example.com", "password": "password123"}
GET /users/auth 토큰 인증 확인 TC5-1 유효한 토큰으로 인증 확인 Header: Authorization: Bearer {validToken}
토큰 인증 실패 TC5-2 유효하지 않은 토큰으로 인증 실패 확인 Header: Authorization: Bearer {invalidToken}
GET /users/comments 사용자 작성 댓글 조회 TC6-1 현재 사용자가 작성한 댓글 목록 조회 쿼리 파라미터: page = 0, size = 10
댓글이 없는 경우 TC6-2 작성한 댓글이 없는 경우 빈 목록 반환 확인 쿼리 파라미터: page = 0, size = 10

댓글 관련 API

API 엔드포인트 테스트 이름 테스트 케이스 ID 설명 테스트 데이터
/comments/{commentId} 댓글 또는 답글 삭제 TC07-1 댓글 또는 답글이 성공적으로 삭제되는지 확인 경로 파라미터: commentId = "10"
TC07-2 존재하지 않는 댓글 삭제 시도 시 404 상태 반환 확인 경로 파라미터: commentId = "999"
/comments/{parentId}/replies 댓글에 대한 답글 조회 TC08-1 특정 댓글에 대한 답글을 성공적으로 조회할 수 있는지 확인 경로 파라미터: parentId = "456", 쿼리 파라미터: page = "1", size = "10"
TC08-2 올바른 답글 구조가 반환되는지 확인 예상 응답: id, content, userId 등의 필드를 포함하는 JSON 구조
/media 미디어 목록 조회 TC09-1 페이지네이션을 통한 미디어 목록 조회 확인 쿼리 파라미터: page = "0", size = "20"
TC09-2 제목 또는 태그로 미디어 검색 확인 쿼리 파라미터: keywords = "쿠키", searchTags = "true"
/comments/{parentId}/replies 특정 댓글에 답글 추가 TC10-1 특정 댓글에 답글을 성공적으로 추가할 수 있는지 확인 경로 파라미터: parentId = "123", 요청 본문: { "content": "This is a reply" }
특정 댓글에 답글 추가 - 오류 TC10-2 존재하지 않는 댓글에 답글을 추가 시도 시 오류 발생 확인 경로 파라미터: parentId = "999", 요청 본문: { "content": "This is a reply" }

미디어 관련 API

API 엔드포인트 테스트 이름 테스트 케이스 ID 설명 테스트 데이터
/media 영상 게시글 생성 TC11-1 업로드된 영상을 성공적으로 게시글로 생성할 수 있는지 확인 요청 본문: { "title": "제목", "description": "설명", "tags": ["tag1", "tag2"], "stoppoints": [{"stop_time": 10, "description": "설명"}] }
영상 게시글 생성 - 필드 누락 TC11-2 필수 필드가 누락된 경우 오류 발생 확인 요청 본문: { "description": "설명" } (제목 누락)
/media/me 내가 업로드한 영상 목록 조회 TC12-1 내가 업로드한 영상 목록을 성공적으로 조회할 수 있는지 확인 쿼리 파라미터: page = "0", size = "20"
내가 업로드한 영상 목록 조회 - 페이지 번호 오류 TC12-2 잘못된 페이지 번호로 요청 시 오류 발생 확인 쿼리 파라미터: page = "-1", size = "20"
/media/quality-stats 미디어 퀄리티 데이터 저장 TC13-1 미디어 퀄리티 데이터를 성공적으로 저장할 수 있는지 확인 요청 본문: { "userId": 10, "mediaId": 1, "timestamp": "2024-12-09T12:00:00Z", "downloadBitrate": 5000.0, "selectedBitrate": 4500.0, "bufferingStart": 0.5, "bufferingEnd": 1.2 }
미디어 퀄리티 데이터 저장 - 필드 누락 TC13-2 필수 필드가 누락된 경우 오류 발생 확인 요청 본문: { "userId": 10, "mediaId": 1 } (타임스탬프 및 비트레이트 누락)
/media/quality-stats 미디어 퀄리티 데이터 조회 TC14-1 미디어 퀄리티 데이터를 성공적으로 조회할 수 있는지 확인 쿼리 파라미터: mediaId = "1"
/media/{id} 미디어 상세 조회 TC15-1 특정 미디어의 상세 정보를 성공적으로 조회할 수 있는지 확인 경로 파라미터: id = "1"
미디어 상세 조회 - 존재하지 않는 ID TC15-2 존재하지 않는 미디어 ID로 조회 시 오류 발생 확인 경로 파라미터: id = "999"
/media/{mediaId}/comments 해당 미디어 ID의 댓글 목록 조회 TC16-1 특정 미디어 ID에 대한 댓글 목록을 성공적으로 조회할 수 있는지 확인 경로 파라미터: mediaId = "1", 쿼리 파라미터: page = "0", size = "10"
해당 미디어 ID의 댓글 목록 조회 - 댓글 없음 TC16-2 댓글이 없는 미디어 ID에 대한 조회 시 빈 배열 반환 확인 경로 파라미터: mediaId = "2", 쿼리 파라미터: page = "0", size = "10"
/media/{mediaId}/comments 해당 미디어에 댓글 추가 TC17-1 특정 미디어에 댓글을 성공적으로 추가할 수 있는지 확인 경로 파라미터: mediaId = "1", 요청 본문: { "content": "This is a comment" }
해당 미디어에 댓글 추가 - 내용 누락 TC17-2 댓글 내용이 누락된 경우 오류 발생 확인 경로 파라미터: mediaId = "1", 요청 본문: {} (내용 누락)
/media/{mediaId}/likes 미디어 좋아요 개수 조회 TC18-1 특정 미디어의 좋아요 개수를 성공적으로 조회할 수 있는지 확인 경로 파라미터: mediaId = "1"
/media/{mediaId}/likes 미디어 좋아요 추가 TC18-1 특정 미디어에 좋아요를 성공적으로 추가할 수 있는지 확인 경로 파라미터: mediaId = "1"
미디어 좋아요 추가 - 이미 좋아요 한 경우 TC18-2 이미 좋아요가 추가된 상태에서 다시 추가 시 오류 발생 확인 경로 파라미터: mediaId = "1"
/media/{mediaId}/likes 미디어 좋아요 삭제 TC19-1 특정 미디어의 좋아요를 성공적으로 삭제할 수 있는지 확인 경로 파라미터: mediaId = "1"
미디어 좋아요 삭제 - 존재하지 않는 경우 TC19-2 존재하지 않는 좋아요를 삭제 시도 시 오류 발생 확인 경로 파라미터: mediaId = "999"
/media/{mediaId}/stoppoints 정지점 생성 TC19-1 특정 미디어에 정지점을 성공적으로 생성할 수 있는지 확인 경로 파라미터: mediaId = "1", 요청 본문: {"stop_time": 30, "description": "새로운 정지점"}
정지점 생성 - 잘못된 시간 TC19-2 잘못된 시간으로 정지점 생성 시 오류 발생 확인 경로 파라미터: mediaId = "1", 요청 본문: {"stop_time": -5, "description": "잘못된 정지점"}
/media/{mediaId}/stoppoints/{stoppointId} 정지점 삭제 TC20-1 특정 미디어의 정지점을 성공적으로 삭제할 수 있는지 확인 경로 파라미터: mediaId = "1", stoppointId = "1"
정지점 삭제 - 존재하지 않는 정지점 TC20-2 존재하지 않는 정지점 삭제 시도 시 오류 발생 확인 경로 파라미터: mediaId = "1", stoppointId = "999"
/playback/all 전체 재생 기록 조회 TC21-1 사용자의 전체 재생 기록을 성공적으로 조회할 수 있는지 확인 쿼리 파라미터: page = "0", size = "10"
전체 재생 기록 조회 - 페이지 범위 초과 TC21-2 존재하지 않는 페이지 요청 시 빈 결과 반환 확인 쿼리 파라미터: page = "999", size = "10"
/playback/all 전체 재생 기록 삭제 TC22-1 사용자의 전체 재생 기록을 성공적으로 삭제할 수 있는지 확인 -
/playback/media/{mediaId} 재생 기록 저장 또는 갱신 TC23-1 특정 미디어의 재생 기록을 성공적으로 저장하거나 갱신할 수 있는지 확인 경로 파라미터: mediaId = "1", 요청 본문: {"lastPlayedTime": 120}
재생 기록 저장 - 잘못된 시간 TC23-2 잘못된 재생 시간으로 저장 시도 시 오류 발생 확인 경로 파라미터: mediaId = "1", 요청 본문: {"lastPlayedTime": -10}
/playback/media/{mediaId} 재생 기록 삭제 TC24-1 특정 미디어의 재생 기록을 성공적으로 삭제할 수 있는지 확인 경로 파라미터: mediaId = "1"
재생 기록 삭제 - 존재하지 않는 기록 TC24-2 존재하지 않는 재생 기록 삭제 시도 시 적절한 응답 확인 경로 파라미터: mediaId = "999"
/playlists 사용자의 재생목록 조회 TC25-1 사용자의 재생목록을 성공적으로 조회할 수 있는지 확인 -
사용자의 재생목록 조회 - 페이지 번호 오류 TC25-2 잘못된 페이지 번호로 요청 시 빈 결과 반환 확인 쿼리 파라미터: page = "999", size = "10"
/playlists 재생목록 생성 TC26-1 새로운 재생목록을 성공적으로 생성할 수 있는지 확인 요청 본문: { "title": "My Playlist", "description": "Description of my playlist" }
재생목록 생성 - 필수 필드 누락 TC26-2 필수 필드가 누락된 경우 오류 발생 확인 요청 본문: { "description": "Description of my playlist" } (제목 누락)
/playlists/{playlistId} 재생목록 삭제 TC27-1 특정 재생목록을 성공적으로 삭제할 수 있는지 확인 경로 파라미터: playlistId = "1"
재생목록 삭제 - 존재하지 않는 ID TC27-2 존재하지 않는 재생목록 ID로 삭제 시도 시 오류 발생 확인 경로 파라미터: playlistId = "999"
/playlists/{playlistId}/items 재생목록의 동영상 조회 TC28-1 특정 재생목록의 동영상을 성공적으로 조회할 수 있는지 확인 경로 파라미터: playlistId = "1", 쿼리 파라미터: page = "0", size = "10"
재생목록의 동영상 조회 - 동영상 없음 TC28-2 동영상이 없는 재생목록 조회 시 빈 배열 반환 확인 경로 파라미터: playlistId = "2", 쿼리 파라미터: page = "0", size = "10"
/playlists/{playlistId}/items 재생목록에 동영상 추가 TC29-1 특정 재생목록에 동영상을 성공적으로 추가할 수 있는지 확인 경로 파라미터: playlistId = "1", 요청 본문: { "mediaId": 1, "orderIndex": 1 }
재생목록에 동영상 추가 - 필수 필드 누락 TC29-2 필수 필드가 누락된 경우 오류 발생 확인 경로 파라미터: playlistId = "1", 요청 본문: {} (mediaId 누락)
/playlists/{playlistId}/items/order 재생목록의 동영상 순서 업데이트 TC30-1 특정 재생목록의 동영상 순서를 성공적으로 업데이트할 수 있는지 확인 경로 파라미터: playlistId = "1", 요청 본문: [{"mediaId": 1, "orderIndex": 1}, {"mediaId": 2, "orderIndex": 2}]
/ranking/top20 상위 20명의 랭킹 조회 TC31-1 상위 20명의 랭킹이 성공적으로 조회되는지 확인 -
랭킹 데이터 형식 검증 TC31-2 반환된 랭킹 데이터가 올바른 형식인지 확인 예상 응답: [{"userId": 1, "username": "user1", "score": 100}, ...]
/ranking/update 랭킹 수동 갱신 TC32-1 랭킹이 성공적으로 수동 갱신되는지 확인 -
갱신 후 랭킹 변경 확인 TC32-2 갱신 후 랭킹 순위가 변경되었는지 확인 -
/tags/recommendation 태그 추천 조회 TC33-1 태그 추천이 성공적으로 조회되는지 확인 -
추천 태그 개수 확인 TC33-2 반환된 추천 태그의 개수가 적절한지 확인 예상 응답: {"recommended_tags": ["태그1", "태그2", ...]}
/upload/image 썸네일 이미지 업로드 TC34-1 썸네일 이미지가 성공적으로 업로드되는지 확인 멀티파트 폼 데이터: image 필드에 이미지 파일
업로드된 썸네일 URL 확인 TC34-2 반환된 썸네일 URL이 유효한지 확인 예상 응답: {"thumbnailUrl": "https://example.com/thumbnail.jpg"}
/upload/video 비디오 업로드 presigned URL 생성 TC35-1 presigned URL이 성공적으로 생성되는지 확인 요청 본문: {"fileSize": 10485760, "fileName": "video.mp4", "key": "generatedKey"}
생성된 URL 유효성 검증 TC35-2 생성된 presigned URL이 유효한지 확인 -
/upload/video/complete 비디오 업로드 완료 처리 TC36-1 업로드 완료 처리가 성공적으로 이루어지는지 확인 요청 본문: {"key": "generatedKey", "uploadId": "uploadId", "results": [{"partNumber": 1, "eTag": "eTag1"}]}
잘못된 업로드 ID로 요청 시 오류 확인 TC36-2 존재하지 않는 uploadId로 요청 시 오류 발생 확인 요청 본문: {"key": "generatedKey", "uploadId": "invalidUploadId", "results": []}
/upload/video/generateKey 업로드 고유키 생성 TC37-1 업로드 고유키가 성공적으로 생성되는지 확인 -
생성된 키 유효성 검증 TC37-2 생성된 고유키가 유효한 형식인지 확인 예상 응답: {"key": "d0d0ce5a-60c9-4e87-8e3c-c53ad2f6ae84"}
/upload/video/isProcessed 영상 처리 상태 확인 TC38-1 영상 처리 상태가 정확히 반환되는지 확인 -
처리 완료된 영상 정보 확인 TC38-2 처리 완료된 영상의 정보가 올바르게 반환되는지 확인 예상 응답: {"fileName": "video.mp4", "isAvailable": true, "fileProcessState": "FINISH", ...}

Frontend System Test Cases

Frontend의 사용자 interaction과 view는 use case를 기반으로 한 system test로 진행한다. 기본적으로 enact serve 명령어를 통해 local 포트에서 실행시킨 후 test를 진행하고, TV에 ares-package로 생성한 .ipk 파일을 설치하여 동일한 test를 수행한다.

1. 사용자 로그인 테스트

Test Case ID: TC01-1

Test Step Test Data Expected Result
사용자가 로그인 페이지에 접속한다. http://localhost:8080 로그인 페이지가 표시된다.
사용자가 이메일과 비밀번호를 입력한다. email: qwer@123.com, pw: qwer123 입력 필드에 값이 반영된다.
사용자가 "로그인" 버튼을 클릭한다. 사용자가 시스템에 성공적으로 로그인된다.
잘못된 이메일/비밀번호를 입력 후 클릭한다. email: wrong@123.com, pw: qwer123 "계정 정보가 올바르지 않습니다" 오류 메시지가 표시된다.
ID/비밀번호 필드를 채우지 않고 클릭한다. "모든 필드를 입력하세요" 오류 메시지가 표시된다.
잘못된 이메일 양식을 입력 후 클릭한다. email: qwer1234, pw: qwer123 "유효한 이메일 주소를 입력하세요" 오류 메시지가 표시된다.

2. 회원가입 테스트

Test Case ID: TC02-1

Test Step Test Data Expected Result
사용자가 버튼을 눌러 회원가입 페이지에 접속한다. http://localhost:8080 회원가입 페이지가 표시된다.
사용자가 이름, 이메일, 비밀번호를 입력한다. name: 서강요리사, email: qwer@123.com, pw: qwer123 입력 필드에 값이 반영된다.
사용자가 "회원가입" 버튼을 클릭한다. 성공 메시지와 함께 로그인 페이지로 리다이렉션된다.
이미 존재하는 이메일을 입력 후 클릭한다. email: existing@example.com "해당 이메일로 가입된 계정이 이미 존재합니다" 오류 메시지 표시

3. 로그아웃 테스트

Test Case ID: TC03-1

Test Step Test Data Expected Result
사용자가 시스템에 로그인 상태로 접속한다. http://localhost:8080 메인 화면이 표시된다.
상단 메뉴에서 "로그아웃" 버튼을 클릭한다. JWT 토큰이 삭제되고 로그인 페이지로 리다이렉션된다.
로그아웃 API 호출 실패 시 처리 확인 "logout failed." 오류 메시지가 표시된다.

4. 마이페이지 보기 테스트

Test Case ID: TC04-1

Test Step Test Data Expected Result
사용자가 로그인 상태에서 "내 정보 보기" 버튼을 클릭한다. 계정 정보, 댓글 목록, 업로드한 비디오 탭과 마이페이지가 표시된다.
사용자가 로그인 상태에서 "계정 정보" 탭을 클릭한다. 사용자의 이름, 이메일, 등급이 표시된다.
사용자가 로그인 상태에서 "댓글 목록" 탭을 클릭한다. 사용자가 작성한 댓글이 표시된다.
사용자가 로그인 상태에서 "업로드한 비디오 목록" 탭을 클릭한다. 사용자가 업로드한 비디오 목록이 표시된다.
네트워크 오류 상황에서 "내 정보 보기" 버튼 클릭 "데이터를 불러올 수 없습니다. 네트워크 상태를 확인하세요" 오류 메시지가 표시된다.

5. 랭킹 조회/승급 테스트

Test Case ID: TC05-1

Test Step Test Data Expected Result
사용자가 상단 메뉴에서 랭킹 아이콘을 클릭한다. 상위 20인 유저 목록이 화면에 표시된다.
랭킹 데이터 로드 실패 상황 확인 "Error fetching rankings." 메시지가 표시된다.

6. 동영상 재생 테스트

Test Case ID: TC06-1

Test Step Test Data Expected Result
사용자가 동영상 목록에서 특정 동영상을 클릭한다. 동영상 ID : 2 동영상이 정상적으로 재생된다.
데이터 로드 실패 상황 확인 "동영상을 불러오지 못했습니다" 오류 메시지가 표시된다.
네트워크 불안정 상황 확인 "네트워크 오류가 발생했습니다" 오류 메시지가 표시된다.

7. 동영상 업로드 테스트

Test Case ID: TC07-1

Test Step Test Data Expected Result
사용자가 "QR 생성" 버튼을 클릭한다. Q개인용 키가 생성되고 QR 코드가 표시된다.
사용자가 QR 코드를 통해 업로드 페이지에 접속한다. 업로드 웹 페이지가 정상적으로 표시된다.
동영상 파일을 업로드한다. testvideo.mp4 동영상 파일이 서버에 업로드되고 변환이 시작된다.
썸네일 이미지 파일을 업로드한다. testImage.jpg 이미지 파일이 서버에 업로드된다.
동영상이 변환 완료된다. "비디오 변환이 완료되었습니다. 설정을 완료하세요." 메시지와 정보 입력란이 표시된다.
사용자가 입력 필드에 제목, 설명을 작성한다. 제목 : "간단한 쿠키 레시피", 설명 "쿠키 레시피입니다." 입력 필드에 값이 반영된다.
사용자가 "설정 완료" 버튼을 클릭한다. 미디어 정보가 서버에 업로드된다.
사용자가 태그를 작성하고 + 버튼을 클릭한다. "쿠키", "베이킹" 태그가 저장되며 화면에 출력된다.
사용자가 북마크 시간과 설명을 작성하고 + 버튼을 클릭한다. "10", "테스트" 북마크 시간과 설명이 저장되며 화면에 출력된다.
사용자가 제목, 설명란을 채우지 않고 "설정 완료" 버튼을 클릭한다. "제목/설명이 입력되지 않았습니다" 오류 메시지가 출력된다.
비디오 정보 업로드 실패 상황 "영상 업로드 중 오류가 발생했습니다." 오류 메시지가 출력된다.

8. 재생 목록 관리 테스트

Test Case ID: TC08-1

Test Step Test Data Expected Result
사용자가 "Playlist" 탭을 클릭한다. 재생 목록 관리 페이지가 표시된다.
사용자가 제목, 설명을 입력하고 "+" 버튼을 클릭한다. 제목: test, 설명: test playlist 새로운 재생 목록이 생성되고 화면에 표시된다.
사용자가 재생 목록 삭제 버튼을 클릭한다. 선택한 재생 목록이 삭제된다.
사용자가 검색어를 입력하고 검색 버튼을 누른다. 조건에 맞는 비디오가 검색되어 표시된다.
사용자가 비디오 "+" 버튼을 누른다. 재생 목록에 영상이 추가된다.

9. 재생 기록 보기 테스트

Test Case ID: TC09-1

Test Step Test Data Expected Result
사용자가 "History" 탭을 클릭한다. 사용자의 재생 기록 목록이 화면에 표시된다.
재생 기록이 없는 경우 확인 "재생 기록이 없습니다" 메시지가 표시된다.

10. AI 추천 태그/영상 조회 테스트

Test Case ID: TC10-1

Test Step Test Data Expected Result
사용자가 "AI 추천" 탭을 클릭한다. 추천 태그 버튼이 표시된다.
사용자가 태그 버튼을 클릭한다. 해당 태그의 영상이 표시된다.
추천 데이터 부족으로 실패 상황 확인 "추천할 태그가 없습니다. 영상을 조금 더 시청한 뒤 다시 시도해 주세요." 메시지가 표시된다.

11. 시스템 사용 현황 조회 테스트

Test Case ID: TC11-1

Test Step Test Data Expected Result
사용자가 "Check Usage" 버튼을 클릭한다. 시스템 사양과 시스템 사용 현황 데이터가 화면에 표시된다.
시스템 데이터 로드 실패 상황 확인 "No system information available." 메시지가 표시된다.
CPU 데이터 로드 실패 상황 확인 "No CPU information available." 메시지가 표시된다.
메모리 데이터 로드 실패 상황 확인 "No Memory information available." 메시지가 표시된다.