
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
此项目包含一个安装了Robot Framework的容器镜像。该镜像还包含Firefox、Chrome、Microsoft Edge浏览器,以及Robot Framework的Selenium和Playwright/RFBrowser库。
本镜像的版本控制遵循Robot Framework的版本规范:
使用的组件版本如下:
根据https://github.com/robotframework/Selenium2Library%E8%AF%B4%E6%98%8E%EF%BC%8C%E4%BB%8E3.0%E7%89%88%E6%9C%AC%E5%BC%80%E5%A7%8B%EF%BC%8CSelenium2Library%E5%B7%B2%E9%87%8D%E5%91%BD%E5%90%8D%E4%B8%BASeleniumLibrary%EF%BC%8C%E8%AF%A5%E9%A1%B9%E7%9B%AE%E4%B8%BB%E8%A6%81%E7%94%A8%E4%BA%8E%E5%B8%AE%E5%8A%A9%E8%BF%87%E6%B8%A1%E3%80%82Selenium2Library 3.0.0是最后一个版本,新版本请关注https://github.com/robotframework/SeleniumLibrary%E9%A1%B9%E7%9B%AE%E3%80%82
可使用以下命令运行容器:
shdocker run \ -v <本地报告文件夹路径>:/opt/robotframework/reports:Z \ -v <本地测试套件文件夹路径>:/opt/robotframework/tests:Z \ ppodgorsek/robot-framework:<版本>
浏览器可轻松切换。建议在Robot变量中定义${BROWSER} %{BROWSER},并在测试用例中使用${BROWSER}。这样如需更改浏览器,只需在一个地方设置。
运行测试时,只需在命令中添加-e BROWSER=chrome、-e BROWSER=firefox或-e BROWSER=edge。
注意:edge可与Selenium配合使用,但不适用于Browser Library,因为后者目前没有简单的机制安装额外浏览器。Browser库依赖的Playwright在非Ubuntu/Debian的Linux平台上无法安装额外浏览器,建议使用Chromium测试Microsoft Edge场景,除非需要Edge特定功能。
可通过修改以下环境变量定义浏览器运行的虚拟屏幕设置:
SCREEN_COLOUR_DEPTH(默认:24)SCREEN_HEIGHT(默认:1080)SCREEN_WIDTH(默认:1920)可使用不同目录读取测试和生成报告,这在复杂测试文件结构时很有用。要修改默认目录,设置以下环境变量:
ROBOT_REPORTS_DIR(默认:/opt/robotframework/reports)ROBOT_TESTS_DIR(默认:/opt/robotframework/tests)可并行执行测试套件。只需定义ROBOT_THREADS环境变量,例如:
shdocker run \ -e ROBOT_THREADS=4 \ ppodgorsek/robot-framework:latest
默认情况下不启用并行化。
并行化选项
使用并行化时,可传递额外的https://github.com/mkorpela/pabot#command-line-options%EF%BC%8C%E5%A6%82%60--testlevelsplit%60%E3%80%81%60--argumentfile%60%E3%80%81%60--ordering%60%E7%AD%89%E3%80%82%E5%8F%AF%E9%80%9A%E8%BF%87%60PABOT_OPTIONS%60%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E4%BC%A0%E9%80%92%EF%BC%8C%E4%BE%8B%E5%A6%82%EF%BC%9A
shdocker run \ -e ROBOT_THREADS=4 \ -e PABOT_OPTIONS="--testlevelsplit" \ ppodgorsek/robot-framework:latest
RobotFramework支持许多选项,如--exclude、--variable、--loglevel等。可通过ROBOT_OPTIONS环境变量传递,例如:
shdocker run \ -e ROBOT_OPTIONS="--loglevel DEBUG" \ ppodgorsek/robot-framework:latest
本项目包含IMAP库,允许Robot Framework连接到邮件服务器。
建议使用https://github.com/estelora/docker-mailcatcher-imap%E8%BF%9B%E8%A1%8C%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E6%B5%8B%E8%AF%95%EF%BC%8C%E7%A1%AE%E4%BF%9D%E6%B5%8B%E8%AF%95%E5%AE%8C%E6%88%90%E5%90%8E%E9%82%AE%E4%BB%B6%E8%A2%AB%E4%B8%A2%E5%BC%83%E3%80%82
本项目旨在允许测试在任何环境运行,有时可能在与本地或测试位置不同的时区。为解决此类问题,此镜像包含https://testautomation.github.io/DateTimeTZ/doc/DateTimeTZ.html%E3%80%82
要设置Docker镜像内使用的时区,可设置TZ环境变量:
shdocker run \ -e TZ=America/New_York \ ppodgorsek/robot-framework:latest
无需扩展镜像,可在运行时动态安装额外依赖。
只需挂载一个包含要通过pip安装的依赖列表的文本文件(默认情况下,如不挂载,该文件为空):
shdocker run \ -v <本地依赖文件路径>:/opt/robotframework/pip-requirements.txt:Z \ -v <本地测试套件文件夹路径>:/opt/robotframework/tests:Z \ ppodgorsek/robot-framework:latest
该文件必须遵循Pip官方要求文件格式。
以下是此类文件的示例内容:
robotframework-docker==1.4.2 rpa==1.50.0
对于大型依赖,仍建议扩展项目镜像并在其中添加依赖,以避免重复安装依赖延迟CI/CD流水线。
通过将环境变量ROBOT_RERUN_FAILED设置为大于0的值,可重跑失败测试。所有失败测试的重跑将在无并行化情况下执行。
环境变量ROBOT_RERUN_FAILED中的数字表示最大重跑轮次。所有重跑轮次仅测试上一轮失败的用例。
报告文件会合并所有轮次的结果,最后一轮结果为最终结果。
ROBOT_RERUN_FAILED的默认值为0,即测试失败后不会重新执行。
shdocker run \ -e ROBOT_RERUN_FAILED=1 \ ppodgorsek/robot-framework:latest
默认情况下,容器隐式使用--user=1000:1000运行,请记得相应调整命令行设置,例如:
shdocker run \ --user=1001:1001 \ ppodgorsek/robot-framework:latest
请记住,该UID/GID应被允许访问挂载的卷,以便读取测试套件和写入输出。
此外,可依靠用户命名空间进一步增强安全性。官方容器文档中有详细说明:
确保容器无法对主机执行不必要的更改是良好的安全实践。在这方面,Podman可能领先于Docker,因为它不依赖root守护进程运行容器。
Azure DevOps提供Docker@2任务,但仅支持有限命令,因此需要使用script任务:
yml- job: FunctionalRegressionTests displayName: Robot Framework测试 steps: - script: | set -x mkdir -p $(Build.Repository.LocalPath)/robot-framework-reports chmod -R ugo+rwx $(Build.Repository.LocalPath)/robot-framework-reports # ROBOT_OPTIONS用于生成特定输出文件,可用于在Azure DevOps流水线中发布测试结果 # 记得将${{ parameters.robotFrameworkFolder }}替换为仓库中的正确文件夹名称 docker run --rm \ --shm-size=1g \ -v $(Build.Repository.LocalPath)/robot-framework-reports:/opt/robotframework/reports:Z \ -v $(Build.Repository.LocalPath)/${{ parameters.robotFrameworkFolder }}:/opt/robotframework/tests:Z \ -e ROBOT_OPTIONS="-x outputxunit.xml" \ -t docker.io/ppodgorsek/robot-framework:latest displayName: 运行Robot Framework测试 - task: PublishTestResults@2 condition: always() displayName: 发布Robot Framework测试结果 inputs: testResultsFormat: 'JUnit' testResultsFiles: '**/outputxunit.xml' searchFolder: '$(Build.Repository.LocalPath)/robot-framework-reports' failTaskOnFailedTests: true failTaskOnFailureToPublishResults: true failTaskOnMissingResultsFile: true
可直接通过shell命令在Jenkins流水线中运行项目:
ymlpipeline { agent any stages { stage('功能回归测试') { steps { sh "docker run --shm-size=1g -e BROWSER=firefox -v $WORKSPACE/robot-tests:/opt/robotframework/tests:Z -v $WORKSPACE/robot-reports:/opt/robotframework/reports:Z ppodgorsek/robot-framework:latest" } } } }
流水线阶段也可依赖Docker代理,如下例所示:
ymlpipeline { agent none stages { stage('功能回归测试') { agent { docker { image 'ppodgorsek/robot-framework:latest' args '--shm-size=1g -u root' } } environment { BROWSER = 'firefox' ROBOT_TESTS_DIR = "$WORKSPACE/robot-tests" ROBOT_REPORTS_DIR = "$WORKSPACE/robot-reports" } steps { sh ''' /opt/robotframework/bin/run-tests-in-virtual-screen.sh ''' } } } }
在使用持续集成工具时,定义测试运行ID(如构建号或分支名称)有助于避免覆盖连续执行报告。
为此引入了ROBOT_TEST_RUN_ID变量:
${ROBOT_REPORTS_DIR}/${ROBOT_REPORTS_DIR}/${ROBOT_TEST_RUN_ID}/可在执行时传递,例如:
shdocker run \ -e ROBOT_TEST_RUN_ID="feature/branch-name" \ ppodgorsek/robot-framework:latest
默认情况下,测试运行ID为空。
要将测试运行报告上传到S3桶,需定义以下环境变量:
shdocker run \ -e AWS_ACCESS_KEY_ID=<您的AWS密钥> \ -e AWS_SECRET_ACCESS_KEY=<您的AWS密钥 secret> \ -e AWS_DEFAULT_REGION=<您的AWS区域,例如 eu-central-1> \ -e AWS_BUCKET_NAME=<您的S3桶名称> \ ppodgorsek/robot-framework:latest
仍有疑问?test/文件夹中已准备简单测试,可使用以下命令运行:
sh# 使用Chromium docker run \ -v `pwd`/reports:/opt/robotframework/reports:Z \ -v `pwd`/test:/opt/robotframework/tests:Z \ -e BROWSER=chrome \ ppodgorsek/robot-framework:latest # 使用Firefox docker run \ -v `pwd`/reports:/opt/robotframework/reports:Z \ -v `pwd`/test:/opt/robotframework/tests:Z \ -e BROWSER=firefox \ ppodgorsek/robot-framework:latest
对于使用PowerShell的Windows用户,命令略有不同:
sh# 使用Chromium docker run \ -v ${PWD}/reports:/opt/robotframework/reports:Z \ -v ${PWD}/test:/opt/robotframework/tests:Z \ -e BROWSER=chrome \ ppodgorsek/robot-framework:latest # 使用Firefox docker run \ -v ${PWD}/reports:/opt/robotframework/reports:Z \ -v ${PWD}/test:/opt/robotframework/tests:Z \ -e BROWSER=firefox \ ppodgorsek/robot-framework:latest
测试结果截图将保存在reports/文件夹中。
Chrome驱动可能因Docker容器中/dev/shm大小不足而崩溃:
UnknownError: session deleted because of page crash
这是Chromium的已知bug。
要避免此错误,请在启动容器时添加以下参数修改shm大小:--shm-size=1g(或其他更适合您测试的大小)
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。



来自真实用户的反馈,见证轩辕镜像的优质服务