diff --git a/Makefile b/Makefile index fb9a53d859..6263144e5e 100644 --- a/Makefile +++ b/Makefile @@ -935,7 +935,7 @@ endif .PHONY: e2e-test e2e-test: $(E2E_DEPS) @echo "正在启动E2E-TEST..." - @TARGET_URL=$(TARGET_URL) ./tests/e2e/run-e2e-tests.sh + @TARGET_URL=$(TARGET_URL) E2E_USERNAME=$(E2E_USERNAME) E2E_PASSWORD=$(E2E_PASSWORD) ./tests/e2e/run-e2e-tests.sh # This endif closes the if at the top of the file diff --git a/tests/e2e/Dockerfile b/tests/e2e/Dockerfile index 5732261019..681f919230 100644 --- a/tests/e2e/Dockerfile +++ b/tests/e2e/Dockerfile @@ -1,6 +1,5 @@ # # 这是 "test-runner" 服务的 Dockerfile -# 它构建了一个包含所有浏览器和我们测试代码的镜像 # # 1. 使用微软官方的 Playwright 镜像 @@ -13,10 +12,10 @@ WORKDIR /app # 3. 复制 "依赖清单" 文件 COPY package*.json ./ -# 4. 安装我们的 npm 依赖 (即 @playwright/test) +# 4. 安装npm 依赖 (即 @playwright/test) RUN npm install -# 5. 复制我们所有的测试代码到容器中 +# 5. 复制所有的测试代码到容器中 # (包括 playwright.config.ts, global-setup.ts 和 specs/ 目录) COPY . . diff --git a/tests/e2e/README.md b/tests/e2e/README.md index 75579183f8..00dcd11ea8 100644 --- a/tests/e2e/README.md +++ b/tests/e2e/README.md @@ -6,15 +6,15 @@ make devstar public/assets/install.sh start --image=devstar-studio:latest -make e2e-test TAGRET_URL="..." # 使用默认账号testuser 密码12345678 +make e2e-test TARGET_URL="..." # 使用默认账号testuser 密码12345678 -E2E_USERNAME="your_name" E2E_PASSWORD="your_password" E2E_ADMIN_ID="your_id" make e2e-test TAGRET_URL="..." # 使用你的账号和密码,id是后台管理账号对应的id +make e2e-test TARGET_URL="..." E2E_USERNAME="your_name" E2E_PASSWORD="your_password" # 使用你的账号和密码 `` ##注意:url不可以是localhost,这样容器无法访问,也无法正常安装webterminal ##说明:目前有两种测试的用法, -1.主要的流程是通过make devstar 本地代码构建镜像,public/assets/install.sh start --image=devstar-studio:latest 通过install.sh脚本创建容器,并在make e2e-test TAGRET_URL="..."中输入devstar容器的url,如果首次安装会执行安装脚本,如果已经安装过,请输入你的账号,密码,id,否则按默认账号和密码登录。 +1.主要的流程是通过make devstar 本地代码构建镜像,public/assets/install.sh start --image=devstar-studio:latest 通过install.sh脚本创建容器,并在make e2e-test TARGET_URL="..."中输入devstar容器的url,如果首次安装会执行安装脚本,如果已经安装过,请输入你的账号,密码,否则按默认账号和密码登录。 2.单机CI使用make e2e-test,由脚本执行容器的创建,安装和测试,需要docker环境和项目代码。 diff --git a/tests/e2e/docker-compose.test.yml b/tests/e2e/docker-compose.test.yml index 4f2a428b8a..1b5e851483 100644 --- a/tests/e2e/docker-compose.test.yml +++ b/tests/e2e/docker-compose.test.yml @@ -25,12 +25,12 @@ services: build: context: . # 等待 devstar 的 "healthcheck" 通过后,才启动 + user: "${CURRENT_UID}:${CURRENT_GID}" environment: - DEVSTAR_URL=${DEVSTAR_URL} - E2E_SKIP_INSTALL=${E2E_SKIP_INSTALL} - E2E_USERNAME=${E2E_USERNAME} - E2E_PASSWORD=${E2E_PASSWORD} - - E2E_ADMIN_ID=${E2E_ADMIN_ID} - E2E_MODE=${E2E_MODE} volumes: # 也挂载 Docker Socket diff --git a/tests/e2e/global-setup.ts b/tests/e2e/global-setup.ts index d994981ead..e144b1d154 100644 --- a/tests/e2e/global-setup.ts +++ b/tests/e2e/global-setup.ts @@ -54,6 +54,7 @@ async function globalSetup(config: FullConfig) { await page.getByRole('textbox', { name: 'Password', exact: true }).fill('12345678'); await page.getByRole('textbox', { name: 'Confirm Password' }).fill('12345678'); await page.getByRole('button', { name: 'Install Gitea'}).click(); + console.log("安装中,请耐心等待"); await page.waitForTimeout(90000); } catch (error) { console.error('[GlobalSetup] "构建模式" 安装失败:', error); diff --git a/tests/e2e/run-e2e-tests.sh b/tests/e2e/run-e2e-tests.sh index 10822d6342..c170eb2980 100755 --- a/tests/e2e/run-e2e-tests.sh +++ b/tests/e2e/run-e2e-tests.sh @@ -7,7 +7,8 @@ set -e SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) # PROJECT_ROOT=$( cd -- "$SCRIPT_DIR/../.." &> /dev/null && pwd ) - +export CURRENT_UID=$(id -u) +export CURRENT_GID=$(id -g) # cd "$PROJECT_ROOT" echo "===== [1/5] 清理旧的测试环境... =====" @@ -15,7 +16,7 @@ echo "===== [1/5] 清理旧的测试环境... =====" docker compose -f tests/e2e/docker-compose.test.yml down -v --remove-orphans docker image prune -f # 清理并重建报告和数据目录 -sudo rm -rf ./tests/e2e/reports ./tests/e2e/test-data +rm -rf ./tests/e2e/reports ./tests/e2e/test-data mkdir -p ./tests/e2e/reports/html ./tests/e2e/test-data/devstar_data echo "清理完成。" echo "" @@ -25,9 +26,13 @@ echo "===== [2/5] 设置权限... =====" chmod -R 777 ./tests/e2e/test-data/devstar_data # 【关键】允许容器访问宿主机的 Docker Socket -sudo chmod 666 /var/run/docker.sock -echo "权限设置完成。" -echo "" +if [ -z "$TARGET_URL" ]; then + sudo chmod 666 /var/run/docker.sock + echo "权限设置完成。" + echo "" +else + echo "跳过docker.sock权限修改 =====" +fi if [ -z "$TARGET_URL" ]; then diff --git a/tests/e2e/specs/devcontainer.e2e.test.ts b/tests/e2e/specs/devcontainer.e2e.test.ts index c419c868e1..ad909ae4fb 100644 --- a/tests/e2e/specs/devcontainer.e2e.test.ts +++ b/tests/e2e/specs/devcontainer.e2e.test.ts @@ -146,7 +146,13 @@ test('DevContainer 功能和配置', async ({ page,context }) => { test('权限修改相关', async ({ page }) => { console.log('权限配置'); - await page.goto(GITEA_URL+ '/-/admin/users/' + TEST_ADMIN_USER_ID + '/edit'); + await page.getByRole('link', { name: 'Site Administration' }).click(); + await page.getByText('Identity & Access').click(); + await page.getByRole('link', { name: 'User Accounts' }).click(); + await page.getByRole('row') + .filter({ hasText: TEST_USER }) + .getByRole('link', { name: 'Edit' }) + .click(); const devContainerCheckbox = page.getByLabel(/May Create Devcontainers/i); await devContainerCheckbox.uncheck(); await page.getByRole('button', { name: 'Update User Account' }).click();