添加了ci脚本,修改了测试脚本的默认语言为中文
This commit is contained in:
@@ -1,15 +1,20 @@
|
||||
name: DevStar E2E Debug Workflow
|
||||
|
||||
name: DevStar E2E Workflow
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
jobs:
|
||||
e2e-test-standalone:
|
||||
e2e-test:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v4
|
||||
- name: make devstar
|
||||
run: |
|
||||
make devstar
|
||||
- name: 1.5 Clean Up Old Data & Containers
|
||||
run: |
|
||||
echo "正在清理旧环境..."
|
||||
@@ -20,7 +25,7 @@ jobs:
|
||||
run: |
|
||||
echo "===== 2. 正在启动容器... ====="
|
||||
# 说明:install.sh 默认使用宿主机路径 (~/devstar_data) 挂载。
|
||||
# 在 CI 环境中,这会导致严重的权限问题 。
|
||||
# 在 CI 环境中,可能会导致严重的权限问题 ,比如之前写入文件失败导致容器一直重启。
|
||||
# 解决方案:动态修改脚本副本,强制将其替换为 Docker 命名卷 。
|
||||
# 这种修改仅在本次 CI 运行中生效,不会影响源码仓库。
|
||||
|
||||
@@ -47,40 +52,12 @@ jobs:
|
||||
- name: 3. Run E2E Tests
|
||||
run: |
|
||||
COMPOSE_FILE="tests/e2e/docker-compose.test.yml"
|
||||
echo "锁定目标文件: $COMPOSE_FILE"
|
||||
echo " Modifying network_mode to host..."
|
||||
# 写法 A: 变量形式
|
||||
sed -i 's|network_mode: "${E2E_NETWORK_MODE:-bridge}"|network_mode: host|g' "$COMPOSE_FILE"
|
||||
grep "network_mode" "$COMPOSE_FILE" || echo "警告:文件中未找到 network_mode 字段!"
|
||||
|
||||
# 4. 运行测试
|
||||
TARGET_URL="http://localhost:80"
|
||||
make e2e-test TARGET_URL="$TARGET_URL" || true
|
||||
env:
|
||||
GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: "true"
|
||||
E2E_NETWORK_MODE: "host"
|
||||
|
||||
- name: 3.5. Rescue Screenshot from Container
|
||||
if: always()
|
||||
run: |
|
||||
CONTAINER_ID=$(docker ps -a --filter "name=test-runner" --format "{{.ID}}" | head -n 1)
|
||||
|
||||
if [ -z "$CONTAINER_ID" ]; then
|
||||
echo "::warning:: 未找到 'test-runner' 容器。无法抢救截图。"
|
||||
else
|
||||
echo "正在从容器 $CONTAINER_ID 中复制..."
|
||||
docker cp $CONTAINER_ID:/tmp/DEBUG-install-page.png ./tests/e2e/reports/DEBUG-install-page.png || echo "Docker CP 失败或截图文件不存在。"
|
||||
echo "复制完成。"
|
||||
fi
|
||||
- name: 4. Upload E2E Test Report
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: e2e-test-report
|
||||
path: tests/e2e/reports/
|
||||
- name: 5. Display DevStar Container Logs
|
||||
if: always()
|
||||
run: |
|
||||
echo "===== 5. 正在抓取 DevStar (Gitea) 容器日志... ====="
|
||||
# 'devstar-studio' 是 install.sh 启动的容器的默认名称
|
||||
docker logs Devstar-Studio || echo "::warning:: 未能获取 'devstar-studio' 容器日志。"
|
||||
##TODO 如何输出一份可读的测试报告,现在成功的输出了一些截图和日志
|
||||
|
||||
@@ -16,5 +16,6 @@ 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.单机CI使用make e2e-test,由脚本执行容器的创建,安装和测试,需要docker环境和项目代码。
|
||||
|
||||
|
||||
3.测试用例的添加方法:所有的测试按照功能分组:devcontainer,appstore,runner等等,每一个test函数对应一组或一个测试用例。
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import { test, expect } from '@playwright/test';
|
||||
import { link } from 'node:fs';
|
||||
import { env } from 'node:process';
|
||||
import { Login } from './utils.e2e';
|
||||
import { time } from 'node:console';
|
||||
|
||||
|
||||
const DEFAULT_E2E_USER = 'testuser';
|
||||
@@ -60,9 +61,24 @@ test('DevContainer 功能和配置', async ({ page,context }) => {
|
||||
|
||||
console.log("创建开发容器");
|
||||
await page.getByRole('button', { name: '创建开发容器' }).click();
|
||||
console.log("正在创建");
|
||||
await expect(page.getByRole('button', { name: '停止开发容器' }))
|
||||
.toBeVisible({ timeout: 180000 });
|
||||
console.log("正在创建");
|
||||
const stopButton = page.getByRole('button', { name: '停止开发容器' });
|
||||
try {
|
||||
console.log('正在等待容器创建');
|
||||
//第一阶段刷新页面
|
||||
await expect(stopButton).toBeVisible({ timeout: 60000 });
|
||||
|
||||
} catch (error) {
|
||||
//刷新第一次
|
||||
await page.reload({ waitUntil: 'domcontentloaded' });
|
||||
console.log('60s,正在刷新页面...');
|
||||
//加载service可能比较慢
|
||||
await page.waitForTimeout(180000);
|
||||
console.log('刷新页面完成,继续等待 (阶段2: 60s)...');
|
||||
//第二次刷新,容器应该正常启动了
|
||||
await page.reload({ waitUntil: 'domcontentloaded' });
|
||||
await expect(stopButton).toBeVisible({ timeout: 30000 });
|
||||
}
|
||||
console.log("Dev container 创建成功!");
|
||||
await page.getByRole('button',{ name: '停止开发容器'}).click();
|
||||
console.log("正在停止");
|
||||
@@ -84,7 +100,8 @@ test('DevContainer 功能和配置', async ({ page,context }) => {
|
||||
await page.locator('#delete-repo-devcontainer-of-user-modal')
|
||||
.getByRole('button', { name: '确认操作' })
|
||||
.click();
|
||||
console.log('正在删除!');
|
||||
console.log('正在删除!,可能较慢请等待');
|
||||
await page.waitForTimeout(3000);
|
||||
await expect(page.getByRole('button', { name: '创建开发容器' })).toBeVisible();
|
||||
console.log('成功删除!');
|
||||
console.log("test1 检查通过!");
|
||||
@@ -135,7 +152,7 @@ test('权限修改相关', async ({ page }) => {
|
||||
await page.locator('#repo_name_to_delete').fill(repoName);
|
||||
|
||||
console.log("正在点击最终的删除确认按钮...");
|
||||
await page.getByRole('button', { name: '删除本仓库' }).click();
|
||||
await page.locator('#delete-repo-modal').getByRole('button', { name: '删除本仓库' }).click();
|
||||
});
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user