删除了docker-compose文件,现在在run-e2e-tests.sh中构建测试容器,ci脚本也作相应修改
This commit is contained in:
@@ -32,23 +32,16 @@ jobs:
|
|||||||
|
|
||||||
- name: 2.8. Get IP & Wait for DevStar (Health Check)
|
- name: 2.8. Get IP & Wait for DevStar (Health Check)
|
||||||
run: |
|
run: |
|
||||||
echo "===== 2.8. 获取 DevStar IP 并等待就绪... ====="
|
echo "===== 2.8. 获取 DevStar IP 并等待就绪... ====="
|
||||||
|
|
||||||
CONTAINER_NAME=$(docker ps -a --filter "ancestor=devstar-studio:latest" --format "{{.Names}}" | head -n 1)
|
CONTAINER_NAME=$(docker ps -a --filter "ancestor=devstar-studio:latest" --format "{{.Names}}" | head -n 1)
|
||||||
echo "Found Container Name: $CONTAINER_NAME"
|
echo "Found Container Name: $CONTAINER_NAME"
|
||||||
|
|
||||||
DEVSTAR_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $CONTAINER_NAME)
|
DEVSTAR_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $CONTAINER_NAME)
|
||||||
echo "Found DevStar Internal IP: $DEVSTAR_IP"
|
echo "Found DevStar Internal IP: $DEVSTAR_IP"
|
||||||
sleep 30
|
sleep 30
|
||||||
- name: 3. Run E2E Tests
|
- name: 3. Run E2E Tests
|
||||||
run: |
|
run: |
|
||||||
COMPOSE_FILE="tests/e2e/docker-compose.test.yml"
|
|
||||||
echo " Modifying network_mode to host..."
|
|
||||||
sed -i 's|network_mode: "${E2E_NETWORK_MODE:-bridge}"|network_mode: host|g' "$COMPOSE_FILE"
|
|
||||||
grep "network_mode" "$COMPOSE_FILE" || echo "警告:文件中未找到 network_mode 字段!"
|
|
||||||
TARGET_URL="http://localhost:80"
|
TARGET_URL="http://localhost:80"
|
||||||
make e2e-test TARGET_URL="$TARGET_URL" || true
|
make e2e-test TARGET_URL="$TARGET_URL"
|
||||||
env:
|
env:
|
||||||
GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: "true"
|
GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: "true"
|
||||||
E2E_NETWORK_MODE: "host"
|
|
||||||
##TODO 如何输出一份可读的测试报告,现在成功的输出了一些截图和日志
|
##TODO 如何输出一份可读的测试报告,现在成功的输出了一些截图和日志
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -945,7 +945,7 @@ docker:
|
|||||||
# support also build args docker build --build-arg GITEA_VERSION=v1.2.3 --build-arg TAGS="bindata sqlite sqlite_unlock_notify"
|
# support also build args docker build --build-arg GITEA_VERSION=v1.2.3 --build-arg TAGS="bindata sqlite sqlite_unlock_notify"
|
||||||
|
|
||||||
.PHONY: e2e-test
|
.PHONY: e2e-test
|
||||||
e2e-test: $(E2E_DEPS)
|
e2e-test:
|
||||||
@echo "正在启动E2E-TEST..."
|
@echo "正在启动E2E-TEST..."
|
||||||
@TARGET_URL=$(TARGET_URL) E2E_USERNAME=$(E2E_USERNAME) E2E_PASSWORD=$(E2E_PASSWORD) ./tests/e2e/run-e2e-tests.sh
|
@TARGET_URL=$(TARGET_URL) E2E_USERNAME=$(E2E_USERNAME) E2E_PASSWORD=$(E2E_PASSWORD) ./tests/e2e/run-e2e-tests.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
version: '3.8'
|
|
||||||
|
|
||||||
services:
|
|
||||||
# 服务: Playwright
|
|
||||||
test-runner:
|
|
||||||
# 从 'tests/' 目录下的 Dockerfile 构建
|
|
||||||
build:
|
|
||||||
context: ../../
|
|
||||||
dockerfile: tests/e2e/Dockerfile
|
|
||||||
# 等待 devstar 的 "healthcheck" 通过后,才启动
|
|
||||||
user: "${CURRENT_UID}:${CURRENT_GID}"
|
|
||||||
network_mode: "host"
|
|
||||||
environment:
|
|
||||||
- DEVSTAR_URL=${DEVSTAR_URL}
|
|
||||||
- E2E_SKIP_INSTALL=${E2E_SKIP_INSTALL}
|
|
||||||
- E2E_USERNAME=${E2E_USERNAME}
|
|
||||||
- E2E_PASSWORD=${E2E_PASSWORD}
|
|
||||||
- E2E_MODE=${E2E_MODE}
|
|
||||||
volumes:
|
|
||||||
# 也挂载 Docker Socket
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
# 将测试报告写回到宿主机的 ./reports 目录
|
|
||||||
- ./reports:/app/playwright-report
|
|
||||||
# 覆盖默认命令,强制运行测试并生成我们想要的报告
|
|
||||||
command: >
|
|
||||||
npx playwright test
|
|
||||||
@@ -3,65 +3,110 @@
|
|||||||
# 它会处理所有清理、权限、拉取和执行工作
|
# 它会处理所有清理、权限、拉取和执行工作
|
||||||
# 任何命令失败立即退出
|
# 任何命令失败立即退出
|
||||||
set -e
|
set -e
|
||||||
#
|
|
||||||
|
# 获取脚本所在目录和项目根目录,test/e2e和devstar项目根目录
|
||||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
#
|
|
||||||
PROJECT_ROOT=$( cd -- "$SCRIPT_DIR/../.." &> /dev/null && pwd )
|
PROJECT_ROOT=$( cd -- "$SCRIPT_DIR/../.." &> /dev/null && pwd )
|
||||||
|
|
||||||
|
# 导出当前用户 ID,防止 Docker 生成 root 权限文件
|
||||||
export CURRENT_UID=$(id -u)
|
export CURRENT_UID=$(id -u)
|
||||||
export CURRENT_GID=$(id -g)
|
export CURRENT_GID=$(id -g)
|
||||||
#
|
# 切换到项目根目录
|
||||||
cd "$PROJECT_ROOT"
|
cd "$PROJECT_ROOT"
|
||||||
echo "===== [1/5] 清理旧的测试环境... ====="
|
echo "===== [1/4] 清理旧的测试环境... ====="
|
||||||
# 彻底销毁旧的 compose 环境,-v 会删除关联的数据卷
|
#删除旧的e2e-runner
|
||||||
docker compose -f tests/e2e/docker-compose.test.yml down -v --remove-orphans
|
if [ "$(docker ps -aq -f name=e2e-test-runner-container)" ]; then
|
||||||
|
docker rm -f e2e-test-runner-container
|
||||||
|
fi
|
||||||
|
#清理旧的构建缓存
|
||||||
docker image prune -f
|
docker image prune -f
|
||||||
# 清理并重建报告和数据目录
|
#清理并重建报告和数据目录
|
||||||
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
|
mkdir -p ./tests/e2e/reports/html ./tests/e2e/test-data/devstar_data
|
||||||
|
#赋予目录权限,防止挂载后容器无权写入
|
||||||
|
chmod -R 777 ./tests/e2e/reports
|
||||||
echo "清理完成。"
|
echo "清理完成。"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "===== [2/3] 启动并运行测试... ====="
|
echo "===== [2/4] 准备环境变量... ====="
|
||||||
# 检查从 Makefile 传来的 TARGET_URL 变量是否为空
|
# 检查从 Makefile 传来的 TARGET_URL 变量是否为空
|
||||||
echo " 模式: [URL模式]. 目标: $TARGET_URL"
|
echo " 检查devstar位置:TARGET_URL"
|
||||||
export DEVSTAR_URL=$TARGET_URL
|
export DEVSTAR_URL=$TARGET_URL
|
||||||
export E2E_MODE="url"
|
export E2E_MODE="url"
|
||||||
if [ -n "$CI" ] || [ "$CI" = "true" ]; then
|
if [ -n "$CI" ] || [ "$CI" = "true" ]; then
|
||||||
echo " [CI环境] 检测到 CI 环境,跳过 curl 安装状态检查..."
|
echo " [CI环境] 检测到 CI 环境,跳过 curl 安装状态检查..."
|
||||||
export E2E_SKIP_INSTALL="false"
|
export E2E_SKIP_INSTALL="false"
|
||||||
else
|
else
|
||||||
echo " 正在检查安装状态..."
|
echo " 正在检查安装状态..."
|
||||||
PATH_TO_CHECK="/user/login"
|
PATH_TO_CHECK="/user/login"
|
||||||
EXPECTED_CODE_IF_INSTALLED="200"
|
EXPECTED_CODE_IF_INSTALLED="200"
|
||||||
PROBE_URL="${TARGET_URL}${PATH_TO_CHECK}"
|
PROBE_URL="${TARGET_URL}${PATH_TO_CHECK}"
|
||||||
HTTP_CODE=$(curl -L -s -o /dev/null -w "%{http_code}" "$PROBE_URL")
|
# 使用 curl 检测目标是否已安装
|
||||||
if [ "$HTTP_CODE" -eq "$EXPECTED_CODE_IF_INSTALLED" ]; then
|
HTTP_CODE=$(curl -L -s -o /dev/null -w "%{http_code}" "$PROBE_URL")
|
||||||
|
if [ "$HTTP_CODE" -eq "$EXPECTED_CODE_IF_INSTALLED" ]; then
|
||||||
echo " 探测结果: 目标已安装 (在 ${PROBE_URL} 收到 HTTP ${HTTP_CODE})."
|
echo " 探测结果: 目标已安装 (在 ${PROBE_URL} 收到 HTTP ${HTTP_CODE})."
|
||||||
export E2E_SKIP_INSTALL="true"
|
export E2E_SKIP_INSTALL="true"
|
||||||
export E2E_USERNAME
|
else
|
||||||
export E2E_PASSWORD
|
echo " 探测结果: 目标未安装 (HTTP $HTTP_CODE),将执行安装脚本!"
|
||||||
export E2E_ADMIN_ID
|
|
||||||
else
|
|
||||||
echo "没有安装,下面执行安装脚本! "
|
|
||||||
export E2E_SKIP_INSTALL="false"
|
export E2E_SKIP_INSTALL="false"
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
command docker compose \
|
fi
|
||||||
-f tests/e2e/docker-compose.test.yml \
|
echo ""
|
||||||
up \
|
|
||||||
--build \
|
echo "===== [3/4] 构建测试镜像... ====="
|
||||||
--exit-code-from test-runner \
|
|
||||||
test-runner
|
docker build -t e2e-test-runner -f tests/e2e/Dockerfile .
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "===== [4/4] 启动容器并运行测试... ====="
|
||||||
|
set +e
|
||||||
|
|
||||||
|
docker run --rm --init --ipc=host \
|
||||||
|
--name e2e-test-runner-container \
|
||||||
|
\
|
||||||
|
`# 网络模式:host` \
|
||||||
|
--network host \
|
||||||
|
\
|
||||||
|
`# 用户权限映射` \
|
||||||
|
-u "$CURRENT_UID:$CURRENT_GID" \
|
||||||
|
\
|
||||||
|
`# 环境变量注入` \
|
||||||
|
-e DEVSTAR_URL="$DEVSTAR_URL" \
|
||||||
|
-e E2E_SKIP_INSTALL="$E2E_SKIP_INSTALL" \
|
||||||
|
-e E2E_USERNAME="$E2E_USERNAME" \
|
||||||
|
-e E2E_PASSWORD="$E2E_PASSWORD" \
|
||||||
|
-e E2E_MODE="$E2E_MODE" \
|
||||||
|
-e CI="$CI" \
|
||||||
|
\
|
||||||
|
`# 挂载 Volume ` \
|
||||||
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
|
-v "$(pwd)/tests/e2e/reports":/app/playwright-report \
|
||||||
|
\
|
||||||
|
`# 镜像名` \
|
||||||
|
e2e-test-runner \
|
||||||
|
\
|
||||||
|
`# 运行命令` \
|
||||||
|
npx playwright test
|
||||||
|
|
||||||
# 捕获 test-runner 的退出码
|
# 捕获 test-runner 的退出码
|
||||||
EXIT_CODE=$?
|
EXIT_CODE=$?
|
||||||
echo ""
|
set -e
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo "===== [3/3] 测试运行完成 ====="
|
echo "========================================"
|
||||||
echo "HTML 报告已生成在: ./reports/html"
|
if [ $EXIT_CODE -eq 0 ]; then
|
||||||
ls -l ./tests/e2e/reports/html
|
echo "测试执行成功!"
|
||||||
|
else
|
||||||
|
echo "测试执行失败!"
|
||||||
|
fi
|
||||||
|
echo "========================================"
|
||||||
|
REPORT_DIR="./tests/e2e/reports"
|
||||||
|
if [ -f "$REPORT_DIR/html/index.html" ]; then
|
||||||
|
echo "HTML 报告已生成: $REPORT_DIR//html/index.html"
|
||||||
|
else
|
||||||
|
echo "未检测到HTML报告 "
|
||||||
|
echo "可能是测试运行中途崩溃,或者未生成报告。"
|
||||||
|
echo "请检查日志或目录: $REPORT_DIR"
|
||||||
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 以 test-runner 的退出码退出
|
# 以 test-runner 的退出码退出
|
||||||
exit $EXIT_CODE
|
exit $EXIT_CODE
|
||||||
Reference in New Issue
Block a user