diff --git a/tests/e2e/README.md b/tests/e2e/README.md index 4a8f19e4b6..75579183f8 100644 --- a/tests/e2e/README.md +++ b/tests/e2e/README.md @@ -14,7 +14,7 @@ E2E_USERNAME="your_name" E2E_PASSWORD="your_password" E2E_ADMIN_ID="your_id" mak ##注意:url不可以是localhost,这样容器无法访问,也无法正常安装webterminal ##说明:目前有两种测试的用法, - 主要的流程是通过make devstar 本地代码构建镜像,public/assets/install.sh start --image=devstar-studio:latest 通过install.sh脚本创建容器,并在make e2e-test TAGRET_URL="..."中输入devstar容器的url,如果首次安装会执行安装脚本,如果已经安装过,请输入你的账号,密码,id,否则按默认账号和密码登录。 - 单机部署CI使用make e2e-test,由脚本执行容器的创建,安装和测试,需要docker环境和项目代码。 +1.主要的流程是通过make devstar 本地代码构建镜像,public/assets/install.sh start --image=devstar-studio:latest 通过install.sh脚本创建容器,并在make e2e-test TAGRET_URL="..."中输入devstar容器的url,如果首次安装会执行安装脚本,如果已经安装过,请输入你的账号,密码,id,否则按默认账号和密码登录。 +2.单机CI使用make e2e-test,由脚本执行容器的创建,安装和测试,需要docker环境和项目代码。 diff --git a/tests/e2e/global-setup.ts b/tests/e2e/global-setup.ts index df8468078a..d994981ead 100644 --- a/tests/e2e/global-setup.ts +++ b/tests/e2e/global-setup.ts @@ -19,7 +19,6 @@ async function globalSetup(config: FullConfig) { const url1=env.DEVSTAR_URL; await page.goto(url1, { timeout: 15000 }); console.log('[GlobalSetup] 检测到安装界面!正在开始自动化安装...'); - // (你提供的所有 "testuser" 安装步骤...) await page.getByText('Server and Third-Party Service Settings').click(); await page.getByRole('checkbox', { name: 'Enable user sign-in via Wechat QR Code.' }).uncheck(); await page.getByRole('checkbox', { name: 'Require a CAPTCHA for user' }).uncheck(); @@ -46,7 +45,6 @@ async function globalSetup(config: FullConfig) { console.log('[GlobalSetup] 检测到安装界面!正在开始自动化安装...'); await page.getByRole('textbox', { name: 'Server Domain *' }).fill(serverDomain); await page.getByRole('textbox', { name: 'Gitea Base URL *' }).fill(giteaBaseURL); - // (你提供的所有 "testuser" 安装步骤...) await page.getByText('Server and Third-Party Service Settings').click(); await page.getByRole('checkbox', { name: 'Enable user sign-in via Wechat QR Code.' }).uncheck(); await page.getByRole('checkbox', { name: 'Require a CAPTCHA for user' }).uncheck(); diff --git a/tests/e2e/run-e2e-tests.sh b/tests/e2e/run-e2e-tests.sh index f11aa2eb16..10822d6342 100755 --- a/tests/e2e/run-e2e-tests.sh +++ b/tests/e2e/run-e2e-tests.sh @@ -21,7 +21,7 @@ echo "清理完成。" echo "" echo "===== [2/5] 设置权限... =====" -# 容器内的用户(通常 UID 1000)需要写入数据目录 +# 容器内的用户需要写入数据目录 chmod -R 777 ./tests/e2e/test-data/devstar_data # 【关键】允许容器访问宿主机的 Docker Socket @@ -85,12 +85,12 @@ else # --- [B] 构建模式 --- echo "==> 模式: [构建模式]. 正在本地启动 devstar..." - # 1. 导出内部 URL (这会成为 compose 里的默认值) + # 1. 导出内部 URL export DEVSTAR_URL="http://devstar:3000" export E2E_MODE="compose" export E2E_SKIP_INSTALL="false" echo "即将执行: docker compose -f tests/e2e/docker-compose.test.yml up --build --wait --exit-code-from test-runner" - # 2. [关键] 运行你原来的命令, 启动所有服务 + # 2. 启动所有服务 command docker compose \ -f tests/e2e/docker-compose.test.yml \ -f tests/e2e/docker-compose.override.yml \ @@ -110,5 +110,4 @@ ls -l ./tests/e2e/reports/html echo "" # 以 test-runner 的退出码退出 -# 这将告诉 CI (或你自己) 测试是成功还是失败 exit $EXIT_CODE diff --git a/tests/e2e/specs/devcontainer.e2e.test.ts b/tests/e2e/specs/devcontainer.e2e.test.ts index 3a50e1b744..c419c868e1 100644 --- a/tests/e2e/specs/devcontainer.e2e.test.ts +++ b/tests/e2e/specs/devcontainer.e2e.test.ts @@ -20,12 +20,6 @@ test.beforeEach(async ({ page }) => { await Login(page); }); test('DevContainer 功能和配置', async ({ page,context }) => { - //console.log("正在登陆"); - //await page.goto(GITEA_URL + '/user/login'); - //await page.fill('#user_name',TEST_USER); - //await page.fill('#password', TEST_PASS); - //await page.getByRole('button', { name: 'Sign In' }).click(); - //await expect(page).toHaveURL(GITEA_URL + '/'); console.log(`正在创建新仓库: ${repoName}`); await page.goto(GITEA_URL + '/repo/create'); @@ -45,66 +39,66 @@ test('DevContainer 功能和配置', async ({ page,context }) => { console.log("模板已创建. 正在点击 'Edit' 按钮..."); await expect(page.getByText('devcontainer.json')).toBeVisible(); - //await page.getByRole('link', { name: 'Edit' }).click(); + await page.getByRole('link', { name: 'Edit' }).click(); await page.waitForTimeout(5000); - //console.log("已跳转到编辑器. 正在修改内容"); - //const newJsonAsObject = { - //"name": "Gitea DevContainer", - //"image": "mcr.microsoft.com/devcontainers/go:1.24-bookworm", - //"features": { - //"ghcr.io/devcontainers/features/node:1": { - //"version": "lts" - //}, - // "ghcr.io/devcontainers/features/git-lfs:1.2.2": {}, - // "ghcr.io/devcontainers-extra/features/poetry:2": {}, - // "ghcr.io/devcontainers/features/python:1": { - // "version": "3.12" - // }, - //"ghcr.io/warrenbuckley/codespace-features/sqlite:1": {} - //}, - //"customizations": { - // "vscode": { - // "settings": {}, - // "extensions": [ - // "editorconfig.editorconfig", - // "dbaeumer.vscode-eslint", - // "golang.go", - // "stylelint.vscode-stylelint", - /// "DavidAnson.vscode-markdownlint", - // "Vue.volar", - // "ms-azuretools.vscode-docker", - //// "vitest.explorer", - // "cweijan.vscode-database-client2", - // "GitHub.vscode-pull-request-github", - // "Azurite.azurite" - //] - // } - //}, - //"portsAttributes": { - //"3000": { - // "label": "Gitea Web", - // "onAutoForward": "notify" - // } - // }, - //"postCreateCommand": "make deps" - // }; + console.log("已跳转到编辑器. 正在修改内容"); + const newJsonAsObject = { + "name": "Gitea DevContainer", + "image": "mcr.microsoft.com/devcontainers/go:1.24-bookworm", + "features": { + "ghcr.io/devcontainers/features/node:1": { + "version": "lts" + }, + "ghcr.io/devcontainers/features/git-lfs:1.2.2": {}, + "ghcr.io/devcontainers-extra/features/poetry:2": {}, + "ghcr.io/devcontainers/features/python:1": { + "version": "3.12" + }, + "ghcr.io/warrenbuckley/codespace-features/sqlite:1": {} + }, + "customizations": { + "vscode": { + "settings": {}, + "extensions": [ + "editorconfig.editorconfig", + "dbaeumer.vscode-eslint", + "golang.go", + "stylelint.vscode-stylelint", + "DavidAnson.vscode-markdownlint", + "Vue.volar", + "ms-azuretools.vscode-docker", + "vitest.explorer", + "cweijan.vscode-database-client2", + "GitHub.vscode-pull-request-github", + "Azurite.azurite" + ] + } + }, + "portsAttributes": { + "3000": { + "label": "Gitea Web", + "onAutoForward": "notify" + } + }, + "postCreateCommand": "make deps" + }; - // 转换为JSON 字符串 - //const newJsonString = JSON.stringify(newJsonAsObject); + //转换为JSON 字符串 + const newJsonString = JSON.stringify(newJsonAsObject); // 设置焦点 - // await page.locator('.view-lines > div:nth-child(20)').click(); - // console.log("正在手动删除模板内容 "); - //for (let i = 0; i < 500; i++) { - // await page.keyboard.press('Backspace'); - // } - /// 粘贴字符串 - //console.log("正在粘贴JSON 内容..."); - // await page.keyboard.insertText(newJsonString); - //await page.getByRole('button', { name: 'Commit Changes' }).click(); - //console.log("devcontainer.json 修改并提交成功."); - //console.log("正在导航回 Dev Container 标签页进行验证..."); - //await page.getByRole('link', { name: 'Dev Container' }).click(); + await page.locator('.view-lines > div:nth-child(20)').click(); + console.log("正在手动删除模板内容 "); + for (let i = 0; i < 500; i++) { + await page.keyboard.press('Backspace'); + } + //粘贴字符串 + console.log("正在粘贴JSON 内容..."); + await page.keyboard.insertText(newJsonString); + await page.getByRole('button', { name: 'Commit Changes' }).click(); + console.log("devcontainer.json 修改并提交成功."); + console.log("正在导航回 Dev Container 标签页进行验证..."); + await page.getByRole('link', { name: 'Dev Container' }).click(); console.log("创建开发容器"); await page.getByRole('button', { name: 'Create Dev Container' }).click(); @@ -150,13 +144,6 @@ test('DevContainer 功能和配置', async ({ page,context }) => { //console.log("test3检查通过"); }); test('权限修改相关', async ({ page }) => { - //console.log("正在登陆"); - //await page.goto(GITEA_URL + '/user/login'); - //await page.fill('#user_name', TEST_USER); - //await page.fill('#password', TEST_PASS); - //await page.getByRole('button', { name: 'Sign In' }).click(); - //await expect(page).toHaveURL(GITEA_URL + '/'); - //console.log("登录成功! "); console.log('权限配置'); await page.goto(GITEA_URL+ '/-/admin/users/' + TEST_ADMIN_USER_ID + '/edit'); diff --git a/tests/e2e/specs/utils.e2e.ts b/tests/e2e/specs/utils.e2e.ts index 2f880cf539..1085eca328 100644 --- a/tests/e2e/specs/utils.e2e.ts +++ b/tests/e2e/specs/utils.e2e.ts @@ -15,7 +15,7 @@ let wasUsingDefault = false; if(mode === 'url'){ const url1=env.DEVSTAR_URL; if (isInstalled) { - // 【"已安装" 模式 + // "已安装" 模式 username = env.E2E_USERNAME || DEFAULT_E2E_USER; password = env.E2E_PASSWORD || DEFAULT_E2E_PASS; @@ -24,7 +24,7 @@ if(mode === 'url'){ } console.log(`"已安装"模式, 尝试用 ${username} 登录...`); } else { - // 【"未安装" 模式】 + // "未安装" 模式 username = DEFAULT_E2E_USER; password = DEFAULT_E2E_PASS; wasUsingDefault=true;