Robotframework Docker容器运行测试报Name does not resolve错误如何解决
排查操作指南
报错根因定位
Errno -2 Name does not resolve属于DNS域名解析失败错误,并非Robotframework依赖缺失导致,核心原因是容器内部无法解析测试代码中请求的目标服务域名。
优先级最高:排查容器网络配置
旧镜像删除前大概率做过自定义网络相关配置,新启动的容器未继承对应参数:
- 进入运行中的容器执行
nslookup <测试代码中访问的目标域名>,如果返回解析失败即可确认是网络配置问题 - 检查容器启动参数是否配置了内部DNS:如果测试需要访问私有内网服务,启动容器时需添加
--dns=<内网DNS服务器IP>参数 - 检查是否配置了静态域名映射:如果旧容器做过hosts绑定,启动时需添加
--add-host=<目标域名>:<对应服务IP>参数,也可直接挂载宿主机/etc/hosts文件到容器内 - 确认容器所属网络:如果目标服务是Docker部署的服务,需将Robotframework容器加入目标服务所在的Docker网络,启动时添加
--network=<目标服务所属网络名>参数
次优先级:排查依赖包差异
如果网络排查全部正常,再验证依赖差异:
- 进入容器执行
pip list输出已安装的Python库,和之前能正常运行的环境依赖列表做对比,补装缺失的库,重点核对测试用到的SeleniumLibrary、RequestsLibrary等第三方扩展库 - 如果是UI自动化测试,确认容器内是否安装了对应版本的浏览器、驱动,或者远程Selenium Grid的地址配置正确,注意Grid地址如果是域名也需要确保容器能正常解析
- 执行
robot --version确认Robotframework核心版本和旧环境一致,大版本跨度可能导致请求逻辑的默认配置变化
快速验证方案
启动容器时添加--network=host参数复用宿主机网络,同时挂载测试用例到容器内运行,如果此时测试正常执行,即可100%确认是容器网络配置问题,和依赖无关。
内容的提问来源于stack exchange,提问作者NKumar
相关产品推荐
相关产品推荐

