如何用Docker构建基于NUnit+C#的Selenium测试镜像?
简易容器化NUnit+Selenium测试步骤
1. 编写最简Dockerfile
在测试项目根目录创建Dockerfile,根据你的.NET版本调整镜像标签(示例适配.NET 8):
# 构建阶段:编译测试项目 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src COPY YourTestProject.csproj . RUN dotnet restore COPY . . RUN dotnet build -c Release -o /app/build # 运行阶段:执行测试并处理Selenium依赖 FROM mcr.microsoft.com/dotnet/runtime:8.0 AS test-runner WORKDIR /app COPY --from=build /app/build . # 安装Linux版Chrome和ChromeDriver RUN apt-get update && apt-get install -y chromium chromium-driver # 设置Selenium环境变量,启用无头模式 ENV CHROME_BIN=/usr/bin/chromium ENV CHROMEDRIVER_EXECUTABLE=/usr/bin/chromedriver # 执行测试并生成NUnit XML报告 ENTRYPOINT ["dotnet", "test", "--logger:nunit;LogFilePath=TestResults.xml"]
替换YourTestProject.csproj为实际项目文件名;若用.NET 6/7,将镜像版本改为6.0/7.0即可。
2. 本地构建验证
进入Dockerfile所在目录,执行命令:
# 构建镜像 docker build -t selenium-nunit-tests . # 本地运行并映射结果目录到本地 docker run -v $(pwd)/test-results:/app/test-results selenium-nunit-tests
运行后本地test-results文件夹会生成TestResults.xml,确认测试正常执行。
3. 上传镜像到Linux服务器
方式1:Docker Hub中转
# 给镜像打标签(替换为你的Docker Hub用户名) docker tag selenium-nunit-tests your-hub-username/selenium-nunit-tests:v1 # 推送至Docker Hub docker push your-hub-username/selenium-nunit-tests:v1 # 服务器拉取镜像 docker pull your-hub-username/selenium-nunit-tests:v1
方式2:离线导出导入
# 本地导出镜像为tar包 docker save -o selenium-tests.tar selenium-nunit-tests # 传输到服务器(示例用scp) scp selenium-tests.tar user@server-ip:/opt/ # 服务器导入镜像 docker load -i /opt/selenium-tests.tar
4. 服务器设置每日自动执行
用Linuxcron实现定时任务:
- 编辑crontab配置:
crontab -e
- 添加定时规则(每天凌晨2点执行,结果保存到服务器
/opt/test-results目录):
0 2 * * * docker run --rm -v /opt/test-results:/app/test-results selenium-nunit-tests
- 保存退出后cron自动生效。
关键注意事项
- 测试代码需配置无头Chrome,示例:
var options = new ChromeOptions(); options.AddArgument("--headless=new"); options.AddArgument("--no-sandbox"); options.AddArgument("--disable-dev-shm-usage"); var driver = new ChromeDriver(options);
- 服务器需提前安装Docker;若测试访问内部服务,需确保容器与服务在同一Docker网络。
内容的提问来源于stack exchange,提问作者MrBeardy
相关产品推荐
相关产品推荐

