LLM을 이용한 테스트 자동 생성
소스코드를 분석하여 GPT를 통해 테스트를 자동 생성하는 itdoc의 강력한 기능입니다.
기능 설명
프로젝트에 Itdoc을 적용하려는데 문서화할 API가 너무 많아 수작업으로 테스트를 작성하기 힘든가요?
const app = require("./expressApp")
const { describeAPI, itDoc, HttpStatus, field, HttpMethod } = require("itdoc")
describeAPI(
HttpMethod.POST,
"/signup",
{
summary: "User Registration API",
tag: "Auth",
description: "Registers a new user with username and password.",
},
app,
(apiDoc) => {
// 여러 테스트 케이스들
// ....
// ....
// ....
});
그렇다면 itdoc의 LLM 기능을 사용해보세요! 본 기능을 통해 위와 같은 itdoc 테스트 코드를 자동으로 생성할 수 있습니다.
LLM 기능을 사용하기 전과 후를 비교해보겠습니다.
- 🚫 Before (수작업)
- ✅ After (LLM 자동 생성)
Express 앱 소스코드
const express = require("express")
const authenticationRouter = require("./authentication")
const app = express()
app.use(express.json())
app.use("/auth", authenticationRouter);
module.exports = app
수작업으로 작성해야 했던 테스트 코드
// 개발자가 직접 분석하고 작성해야 함
// 시간이 많이 소요되고 실수 가능성 높음
// ...
단 한 줄의 명령어로
itdoc generate --app ./app.js
자동으로 생성되는 테스트 코드
const targetApp = app
describeAPI(
HttpMethod.POST,
"/signup",
{
summary: "회원 가입 API",
tag: "Auth",
description: "새로운 사용자를 등록합니다.",
},
targetApp,
(apiDoc) => {
itDoc("username이 없을 경우 400 응답을 반환한다.", async () => {
await apiDoc
.test()
.req()
.body({
password: field("비밀번호", "password123"),
})
.res()
.status(HttpStatus.BAD_REQUEST)
.body({
error: field("에러 메시지", "username is required"),
})
})
itDoc("password가 없을 경우 400 응답을 반환한다.", async () => {
await apiDoc
.test()
.req()
.body({
username: field("사용자명", "newuser"),
})
.res()
.status(HttpStatus.BAD_REQUEST)
.body({
error: field("에러 메시지", "password is required"),
})
})
itDoc("password의 길이가 8자 미만일 경우 400 응답을 반환한다.", async () => {
await apiDoc
.test()
.req()
.body({
username: field("사용자명", "newuser"),
password: field("비밀번호", "short"),
})
.res()
.status(HttpStatus.BAD_REQUEST)
.body({
error: field("에러 메시지", "password must be at least 8 characters"),
})
})
itDoc("모든 조건이 충족되면 201 응답을 반환한다.", async () => {
await apiDoc
.test()
.req()
.body({
username: field("사용자명", "newuser"),
password: field("비밀번호", "password123"),
})
.res()
.status(HttpStatus.CREATED)
})
}
)
LLM 기능으로 Itdoc을 빠르게 도입해보세요~!
기능 사용을 위한 요구 사항
-
CLI 명령어를 사용하기 위해
itdoc
이 설치되어 있어야 합니다. -
이 기능은 ChatGPT API를 사용합니다. 다음과 같이 OpenAI API 키를 설정해야 합니다.
아래 처럼 .env 파일에 키를 입력하세요echo OPENAI_API_KEY={ENTER_YOUR_GPT_KEY} > .env
아니면, 아래와 같이
OPENAI_API_KEY
가 들어있는.env
파일의 특정경로를 입력할 수도 있습니다.itdoc --e {YOUR_ENV_FILE_PATH}
itdoc --env {YOUR_ENV_FILE_PATH}
.env
파일을 .gitignore
에 추가하여 Git 저장소에 업로드되지 않도록 하세요
.env
.env
파일은 기본적으로 현재 작업 디렉토리에서 찾습니다. 다른 위치에 있다면-e
옵션을 사용하여 지정할 수 있습니다.- OpenAI API 키는 OpenAI 계정에서 발급받을 수 있습니다.
- API 사용량에 따라 비용이 발생하니 OpenAI 요금표를 확인하세요.
- 보통의 작은 크기의 앱의 경우 1달러 이하로 충분히 모든 테스트를 생성할 수 있습니다.
사용법
소스코드 기반으로 테스트를 생성 하는 방법
현재 소스코드 기반 테스트 자동 생성 기능은 Express 프레임워크에만 지원됩니다. 만약 다른 프레임워크를 사용하고 있다면, API Spec Markdown 기반으로 작성하여 테스트를 생성하는 방법을 사용하세요.
itdoc generate -a {YOUR_APP_FILE_PATH}
itdoc generate --app {YOUR_APP_FILE_PATH}
옵션 | 설명 |
---|---|
--app (-a) | root app 소스코드 파일 경로 |
명령어를 실행하면 {YOUR_APP_FILE_PATH}
에 정의된 Express 애플리케이션을 분석하여,
해당 애플리케이션의 API 엔드포인트에 대한 테스트를 자동으로 생성합니다.
자체적인 AST 분석을 통해 API Spec Markdown
을 만들고, 이를 ChatGPT에 전달하여 테스트 케이스를 생성합니다.
따라서, 여러분의 소스코드를 외부 서버에 전송하지 않으니 안심하고 사용하세요.
API Spec Markdown
기반으로 테스트를 생성 하는 방법
아래 명령어로 API Spec Markdown
파일을 기반으로 테스트를 자동 생성할 수 있습니다.
itdoc generate -p {API_Spec_Markdown_FILE_PATH}
itdoc generate --path {API_Spec_Markdown_FILE_PATH}
옵션 | 설명 |
---|---|
--path (-p) | API Spec Markdown 파일 경로 |
이때 문서의 형식은 다음과 같은 형식이어야 합니다.
`HTTP 메서드` `엔드포인트`
- Test Case: 테스트 케이스 제목
- Request: 요청에 대한 설명
- Response: 응답에 대한 설명
여러 API 케이스에 대해서 작성 예시를 보여드리겠습니다.
- 🔐 인증 API
- 📁 파일 업로드 API
GET /secret
- Test Case: 올바른 인증으로 비밀 메시지에 접근
- Request: 올바른 인증 헤더와 함께 GET 요청을 보낸다.
- Response: 상태 코드 200, 비밀 메시지를 담은 JSON 응답과 특정 헤더 포함
- Test Case: 인증되지 않은 접근
- Request: 잘못된 인증 헤더와 함께 GET 요청을 보낸다.
- Response: 상태 코드 401를 반환한다.
POST /users/:userId/profile-image
- Test Case: 프로필 이미지를 성공적으로 업로드
- Request: 유효한 이미지 파일과 "multipart/form-data" 콘텐츠 타입으로 POST 요청을 보낸다.
- Response: 상태 코드 200, 이미지 URL이 담긴 JSON 응답
- Test Case: 잘못된 콘텐츠 타입
- Request: "multipart/form-data" 콘텐츠 타입 없이 POST 요청을 보낸다.
- Response: 상태 코드 400, 에러 메시지를 담은 JSON 응답