Testcasecraft 에 테스트 케이스를 작성하면 Testcasecraft-agent 를 통해서 LLM 이 테스트 케이스를 읽어서 브라우저에서 실행되어 실행해주는 Agent 입니다.
"로그인 화면을 열고 잘못된 비밀번호를 넣어 오류 문구를 확인한다"
↓
브라우저가 실제로 열리고 스텝마다 화면이 남고 PASS / FAIL 결과를 기입합니다.
# 에이전트 화면·API 열쇠. 제품의 「에이전트 연동」 설정에도 같은 값을 넣습니다.
AGENT_API_TOKEN=<길고 임의의 문자열>
# 프로필 컨텍스트(계정·데이터) 암호화 키. 바꾸면 저장해 둔 계정을 읽지 못합니다.
AGENT_SECRET_KEY=<아래 명령으로 생성>
# 결과를 올릴 제품 계정. 대상 프로젝트에서 CONTRIBUTOR 이상이어야 합니다.
AGENT_TMS_USERNAME=qa-agent
AGENT_TMS_PASSWORD=<그 계정 비밀번호>
# 사람이 브라우저로 여는 제품 주소
AGENT_TMS_PUBLIC_URL=https://tms.example.com
# 선택 — 기본값이 있어 없어도 됩니다
# AGENT_TMS_BASE_URL=http://app:8080
# AGENT_EXPOSE_ADDR=127.0.0.1
# AGENT_KEEP_RUNS=100
# AGENT_CODEX_HOME=/home/사용자/.codex
AGENT_SECRET_KEY 는 아래 명령이 만들어 줍니다.
python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
32바이트를 urlsafe base64 로 인코딩해 44자로 넣습니다. 파이썬이 없는 서버에서는
아래 명령으로 만듭니다.
openssl rand -base64 32 | tr '+/' '-_'
# 또는
head -c 32 /dev/urandom | base64 | tr '+/' '-_'
tr 로 +·/ 를 -·_ 로 바꾸는 부분을 빼면 안 됩니다. 만들어진 값에 그 두 글자가
섞이면 키가 거부되는데, 안 섞인 값도 자주 나오므로 한동안 모르고 지나갑니다. 암호가 아니라 키 자체라 아무 문자열이나
넣을 수 없고, 형식이 어긋나면 프로필의 계정을 저장하지 못합니다.
agent:
image: xmlangel/testcasecraft-agent:latest
container_name: testcasecraft-agent
restart: unless-stopped
environment:
AGENT_ENGINE: browser-use
AGENT_BIND_ADDR: 0.0.0.0
AGENT_PORT: 8090
# 실행 기록·화면·프로필이 볼륨에 남게 절대 경로로 못 박습니다.
# 상대 경로면 이미지 안에 쌓여 컨테이너를 지울 때 함께 사라집니다.
AGENT_STORE_PATH: /data/store/agent.db
AGENT_PROFILE_DIR: /data/profiles
AGENT_KEEP_RUNS: ${AGENT_KEEP_RUNS:-100}
AGENT_API_TOKEN: ${AGENT_API_TOKEN}
AGENT_SECRET_KEY: ${AGENT_SECRET_KEY}
# 결과를 올릴 제품 주소. 같은 compose 면 서비스 이름을 넣습니다.
TCC_BASE_URL: ${AGENT_TMS_BASE_URL:-http://app:8080}
# 사람이 브라우저로 여는 제품 주소. 기본 프로필의 허용 도메인이 이 값을 받습니다.
TCC_PUBLIC_URL: ${AGENT_TMS_PUBLIC_URL:-}
TCC_USERNAME: ${AGENT_TMS_USERNAME}
TCC_PASSWORD: ${AGENT_TMS_PASSWORD}
CODEX_HOME: /home/agent/.codex
ports:
# 기본은 루프백에만 엽니다. 밖에서 열려면 AGENT_EXPOSE_ADDR 를 바꿉니다.
- "${AGENT_EXPOSE_ADDR:-127.0.0.1}:${AGENT_PORT:-8090}:8090"
volumes:
- ./agent-data:/data
# codex 로그인 자격. 호스트에서 한 번 로그인하면 컨테이너가 그 파일을 읽습니다.
# 토큰이 갱신되므로 읽기 전용으로 물리면 안 됩니다.
- ${AGENT_CODEX_HOME:-${HOME}/.codex}:/home/agent/.codex
networks:
- testcasecraft-network
# Chromium 이 /dev/shm 을 많이 씁니다. 기본 64MB 로는 탭이 죽습니다.
shm_size: "1gb"
security_opt:
- seccomp=unconfined
healthcheck:
test: ["CMD", "python3", "-c", "import httpx,sys; sys.exit(0 if httpx.get('http://127.0.0.1:8090/health',timeout=2).status_code==200 else 1)"]
interval: 30s
timeout: 5s
retries: 3
start_period: 20s
데이터 폴더에는 컨테이너 안의 agent 사용자(uid 10001)가 기록합니다. 소유를
맞추지 않으면 PermissionError: /data/store 로 재시작을 반복합니다.
mkdir -p agent-data && sudo chown -R 10001:10001 agent-data
docker compose up -d agent
http://localhost:8090Content type
Image
Digest
sha256:90663dfb1…
Size
1.1 GB
Last updated
11 days ago
docker pull xmlangel/testcasecraft-agent