使用 Docker 进行软件测试可以显著提高测试环境的可重复性和效率。以下是详细的实践指南:
# Python 单元测试示例
FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "-m", "unittest discover"]
构建并运行:
docker build -t unittest-app .
docker run --rm unittest-app
# 使用 Docker Compose 搭建测试环境
version: '3'
services:
app:
build: .
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: testpass
运行测试:
docker-compose up --abort-on-container-exit
# 运行 Selenium 测试
docker run -d --name selenium -p 4444:4444 selenium/standalone-chrome
docker run --network container:selenium your-test-image
# 构建阶段
FROM maven:3.8 AS builder
COPY src /src
RUN mvn package
# 测试阶段
FROM builder AS tester
RUN mvn test
# 最终镜像
FROM openjdk:11
COPY --from=builder target/app.jar .
docker run -v ./test-data:/data test-image
# 使用不同端口并行运行
docker run -p 8081:8080 test-image & \
docker run -p 8082:8080 test-image
GitLab CI 配置示例:
test:
stage: test
image: docker:20.10
services:
- docker:dind
script:
- docker build -t app .
- docker run --rm app npm test
- 使用 .dockerignore
排除无关文件
- 多阶段构建减少最终镜像大小
- 固定基础镜像版本(如 python:3.9
而非 python:latest
)
# 查看测试容器日志
docker logs -f test-container
# 获取测试退出码
docker inspect --format='{{.State.ExitCode}}' test-container
# 测试后自动清理
docker run --rm test-image
# 批量清理测试容器
docker ps -aq --filter "name=test-" | xargs docker rm -f
# 创建专用测试网络
docker network create test-net
docker run --network test-net service1
docker run --network test-net service2
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime
# 分离依赖安装步骤加速构建
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
通过 Docker 实现测试自动化可以显著提升软件质量保证效率。建议从简单场景开始,逐步构建完整的容器化测试流水线。