diff --git a/.gitea/workflows/devstar-studio-e2e.yaml b/.gitea/workflows/devstar-studio-e2e.yaml index 2a09ffd0f1..f8cd1501fe 100644 --- a/.gitea/workflows/devstar-studio-e2e.yaml +++ b/.gitea/workflows/devstar-studio-e2e.yaml @@ -12,32 +12,17 @@ jobs: steps: - name: Check out repository code uses: actions/checkout@v4 - - name: 1.0 make devstar + - name: 1. Build Devstar image run: | make devstar - name: 1.5 Clean Up Old Data & Containers run: | echo "正在清理旧环境..." public/assets/install.sh clean - - name: 2. Deploy DevStar Container + - name: 2. start DevStar Container run: | echo "===== 2. 正在启动容器... =====" public/assets/install.sh start --image=devstar-studio:latest - - name: 2.5. Create Report Directory - run: | - echo "===== 2.5. 正在创建报告目录... =====" - - mkdir -p tests/e2e/reports/ - sudo chmod -R 777 tests/e2e/reports/ - - - name: 2.8. Get IP & Wait for DevStar (Health Check) - run: | - echo "===== 2.8. 获取 DevStar IP 并等待就绪... =====" - CONTAINER_NAME=$(docker ps -a --filter "ancestor=devstar-studio:latest" --format "{{.Names}}" | head -n 1) - echo "Found Container Name: $CONTAINER_NAME" - DEVSTAR_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $CONTAINER_NAME) - echo "Found DevStar Internal IP: $DEVSTAR_IP" - sleep 30 - name: 3. Run E2E Tests run: | TARGET_URL="http://localhost:80" @@ -45,3 +30,6 @@ jobs: env: GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: "true" ##TODO 如何输出一份可读的测试报告,现在成功的输出了一些截图和日志 + - name: report E2E TESTS results + run: | + ##TODO 这里后续完善测试报告的生成和上传到指定的pr评论中 diff --git a/.gitignore b/.gitignore index 87323b6756..c798790f6e 100644 --- a/.gitignore +++ b/.gitignore @@ -69,6 +69,8 @@ cpu.out /tests/e2e/gitea-e2e-* /tests/e2e/indexers-* /tests/e2e/reports +/tests/e2e/node_modules/ +/tests/e2e/package-lock.json /tests/e2e/test-data /tests/e2e/test-artifacts /tests/e2e/test-snapshots diff --git a/tests/e2e/.dockerignore b/tests/e2e/.dockerignore deleted file mode 100644 index f0d0cf7e83..0000000000 --- a/tests/e2e/.dockerignore +++ /dev/null @@ -1,11 +0,0 @@ -# 1. 忽略 Node.js 依赖目录 -/node_modules -# 2. 忽略本地的测试报告和结果 -/reports -/test-data -/test-artifacts -/Readme.md -/utils_e2e.ts -/utils_e2e_test.go -/e2e_test.go - diff --git a/tests/e2e/Dockerfile b/tests/e2e/Dockerfile deleted file mode 100644 index 9fdf68f2d5..0000000000 --- a/tests/e2e/Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -# -# 这是 "test-runner" 服务的 Dockerfile -# - -# 1. 使用微软官方的 Playwright 镜像 -# 它已经内置了所有浏览器 (Chromium, Firefox, WebKit) 和操作系统依赖 -FROM mcr.microsoft.com/playwright:v1.53.2-jammy - -# 2. 设置工作目录 -WORKDIR /app - -# 3. 复制 "依赖清单" 文件 -COPY tests/e2e/package*.json ./ -COPY playwright.config.ts ./ - -# 4. 安装npm 依赖 (即 @playwright/test) -RUN npm install - -# 5. 复制所有的测试代码到容器中 -# (包括 global-setup.ts 和 specs/ 目录) -COPY tests/e2e/global-setup.ts ./ -COPY tests/e2e/specs/ ./specs/ - -# 6. 默认命令 -CMD ["npx", "playwright", "test"] diff --git a/tests/e2e/README.md b/tests/e2e/README.md index 6ad7f94ebc..e223a6c405 100644 --- a/tests/e2e/README.md +++ b/tests/e2e/README.md @@ -15,4 +15,3 @@ make e2e-test TARGET_URL="..." E2E_USERNAME="your_name" E2E_PASSWORD="your_passw ##说明:测试的用法 1.通过make devstar 本地代码构建镜像,public/assets/install.sh start --image=devstar-studio:latest 通过install.sh脚本创建容器,并在make e2e-test TARGET_URL="..."中输入devstar容器的url,如果首次安装会执行安装脚本,如果已经安装过,请输入你的账号,密码,否则按默认账号和密码登录。 2.测试用例的添加方法:所有的测试按照功能分组:devcontainer,appstore,runner等等,每一个test函数对应一组或一个测试用例,按照流程增加对应的测试用例和测试脚本。 - diff --git a/tests/e2e/run-e2e-tests.sh b/tests/e2e/run-e2e-tests.sh index ce7bc43cbd..b3c614022e 100755 --- a/tests/e2e/run-e2e-tests.sh +++ b/tests/e2e/run-e2e-tests.sh @@ -13,7 +13,7 @@ export CURRENT_UID=$(id -u) export CURRENT_GID=$(id -g) # 切换到项目根目录 cd "$PROJECT_ROOT" -echo "===== [1/4] 清理旧的测试环境... =====" +echo "===== [1/3] 清理旧的测试环境... =====" #删除旧的e2e-runner if [ "$(docker ps -aq -f name=e2e-test-runner-container)" ]; then docker rm -f e2e-test-runner-container @@ -25,10 +25,20 @@ rm -rf ./tests/e2e/reports ./tests/e2e/test-data mkdir -p ./tests/e2e/reports/html ./tests/e2e/test-data/devstar_data #赋予目录权限,防止挂载后容器无权写入 chmod -R 777 ./tests/e2e/reports +#这里添加的代码是因为需要执行npm install,我们以当前用户启动测试容器,避免root权限冲突,所以先预构建文件夹,也作为缓存,缓存npm install. +echo "处理 node_modules 权限..." +mkdir -p ./tests/e2e/node_modules +chmod 777 ./tests/e2e/node_modules +LOCK_FILE="./tests/e2e/package-lock.json" +if [ ! -f "$LOCK_FILE" ]; then + echo "{}" > "$LOCK_FILE" +fi +# 给它满权限,让 npm 能改 +chmod 666 "$LOCK_FILE" echo "清理完成。" echo "" -echo "===== [2/4] 准备环境变量... =====" +echo "===== [2/3] 准备环境变量... =====" # 检查从 Makefile 传来的 TARGET_URL 变量是否为空 echo " 检查devstar位置:TARGET_URL" export DEVSTAR_URL=$TARGET_URL @@ -53,12 +63,7 @@ else fi echo "" -echo "===== [3/4] 构建测试镜像... =====" - -docker build -t e2e-test-runner -f tests/e2e/Dockerfile . -echo "" - -echo "===== [4/4] 启动容器并运行测试... =====" +echo "===== [3/3] 启动容器并运行测试... =====" set +e docker run --rm --init --ipc=host \ @@ -81,12 +86,23 @@ docker run --rm --init --ipc=host \ `# 挂载 Volume ` \ -v /var/run/docker.sock:/var/run/docker.sock \ -v "$(pwd)/tests/e2e/reports":/app/playwright-report \ + -v "$(pwd)/tests/e2e/package.json":/app/package.json \ + -v "$(pwd)/playwright.config.ts":/app/playwright.config.ts \ + -v "$(pwd)/tests/e2e/global-setup.ts":/app/global-setup.ts \ + -v "$(pwd)/tests/e2e/specs":/app/specs \ + -v "$(pwd)/tests/e2e/node_modules":/app/node_modules \ + -v "$(pwd)/tests/e2e/package-lock.json":/app/package-lock.json \ + \ + -w /app \ + \ + `# 临时 npm 缓存目录,防止权限问题` \ + -e npm_config_cache=/tmp/npm-cache \ + -e HOME=/tmp \ \ `# 镜像名` \ - e2e-test-runner \ - \ + mcr.microsoft.com/playwright:v1.53.2-jammy \ `# 运行命令` \ - npx playwright test + bash -c "echo '正在安装依赖...' && npm install --no-package-lock&& echo '依赖安装完成,开始测试...' && npx playwright test" # 捕获 test-runner 的退出码 EXIT_CODE=$?