Docker环境下跑WebUI脚本文件上传问题
问题背景:在Linux服务器Docker环境下跑WebUI脚本
在Linux服务器Docker环境下跑WebUI脚本,发现在Web页面测试附件上传问题总是找不到文件,同样的脚本在本地Windows环境下跑脚本是可以成功的,问题找不到思路和方案,后来一步步排查才知道问题的根源卡在哪里了,请看下图
脚本报错:
理清了下思路,在宿主机上跑UI自动化脚本是浏览器容器在跑,所以在跑附件上传时候是在容器里面来找路径,而不是宿主机里面,所以问题就卡在这里:
解决思路:
方案一:Jenkins持续集成创建job拉取代码后,将想要做文件上传的目录直接copy到指定的浏览器docker容器里面的某个路径下,然后将代码里面文件上传的upload()方法的路径指明docker的路径即可。
方案二:每次构建的时候,我写个shell脚本,然后来创建容器,做路径映射,然后每次保证用你这个新启动的浏览器
我们以方案一为例子:
1.用存在的镜像madehao/selenium-node-chrome:latest来创建容器,并命名容器的NAMES为chrome74_jiawenheng
查看镜像:docker images
查看seleniumHub
创建容器,并将容器新命名为chrome74_jiawenheng,为了方便和别人区分
docker run -d -p 5946:5900 --name chrome74_jiawenheng --link selehub_new:hub --shm-size=512m madehao/selenium-node-chrome:latest
查看运行的容器:docker ps -a
2.进入到chrome74_jiawenheng容器里面,创建指定的目录
docker exec -it 容器ID /bin/bash
创建一个文件夹
cd opt/
sudo mkdir autotest
pwd
/opt/autotest
3.进入到jinkins里面,在Build构建的时候写shell命令,即将宿主机download文件目录copy到指定的chrome74_jiawenheng容器/opt/autotest文件下,shell命令如下:
#!/bin/bash
docker cp src/test/resources/download/ chrome74_jiawenheng:/opt/autotest
4.修改java涉及路径的代码
如果是linux要定义docker容器的路径即:
String filePath = null;
filePath = “/opt/autotest/download/”+ fileName;
然后selenium脚本用这个filePath路径
5.修改testng.xml版本号
这个版本号是指的selehub_new:hub是唯一的,因为第1步骤里面在selehub_new:hub挂载这个命名为chrome74_jiawenheng浏览器的版本号就是74.0.3729.108,要写shell脚本向这个NAMES命名为chrome74_jiawenheng的Chrome容器里面copy要上传附件的路径;
具体版本号通过http://remoteIP:4444/grid/console来查看(remoteIP指的是宿主机IP)
6.然后通过IDEA提交代码,合并代码,触发Jenkins的Job后查看日志的报告;
job状态运行完毕
构建日志,查看文件上传OK
查看测试报告,成功
进入到docker容器NAMES为chrome74_jiawenheng里面查看文件copy过来了没有
至此结束!