Sign inSign up

xmlangel/testcasecraft-agent

By xmlangel

Updated 11 days ago

testcasecraft-agent

Image
0

1.6K

xmlangel/testcasecraft-agent repository overview

Testcasecraft-agent

Testcasecraft 에 테스트 케이스를 작성하면 Testcasecraft-agent 를 통해서 LLM 이 테스트 케이스를 읽어서 브라우저에서 실행되어 실행해주는 Agent 입니다.

"로그인 화면을 열고 잘못된 비밀번호를 넣어 오류 문구를 확인한다"
        ↓
브라우저가 실제로 열리고 스텝마다 화면이 남고  PASS / FAIL 결과를 기입합니다.

.env

# 에이전트 화면·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+·/-·_ 로 바꾸는 부분을 빼면 안 됩니다. 만들어진 값에 그 두 글자가 섞이면 키가 거부되는데, 안 섞인 값도 자주 나오므로 한동안 모르고 지나갑니다. 암호가 아니라 키 자체라 아무 문자열이나 넣을 수 없고, 형식이 어긋나면 프로필의 계정을 저장하지 못합니다.

docker compose 로 띄우기

  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:8090

Tag summary

Content type

Image

Digest

sha256:90663dfb1

Size

1.1 GB

Last updated

11 days ago

docker pull xmlangel/testcasecraft-agent