目的
最近公司发展比较快,业务规模迅速扩大,作为一个测试不希望研发的提测质量过低导致投入大量的时间重复去做冒烟测试
所以我希望用Selenium把冒烟测试自动化掉,在研发将自测环境部署完成之后自动执行冒烟脚本并反馈测试结果。
根据脚本执行结果决定本次迭代是否有效,这样可以节省研发和测试大量人力。
为什么不选择在Windows机器上面直接执行Selenium脚本呢?
1.被测程序安装在Linux Server上,使用Windows机器执行脚本必然需要一台额外的服务器资源
2.运行脚本的Windows服务器必然需要测试组去维护,研发自测在VDI内,测试不经常使用必然会加大维护成本
Docker-Selenium
SeleniumHQ官方项目:https://github.com/SeleniumHQ/docker-selenium
通过官方的文档,我们可以发现docker-selenium其实是使用了Selenium Grid
如果大家不知道什么是Selenium Grid可以网上搜一搜相关的资料,这里就不多做解释了。
- 下载selenium hub镜像
sudo docker pull selenium/hub
- 下载一个node镜像,这里以chrome为例
sudo docker pull selenium/node-chrome
- 查看下载的镜像
sudo docker images
- 运行Selenium hub容器
sudo docker run -d -p 8080:4444 --name selenium-hub selenium/hub
- 运行node chrome容器
sudo docker run -d --link selenium-hub:hub selenium/node-chrome
- 查看容器是否正常运行
sudo docker ps
调用链:Your Code ->Linux Server:8080 -> Selenium hub -> Node Chrome
创建测试脚本
由于不希望执行的Selenium脚本的执行还是依赖于部署环境的python,所以笔者把Selenium脚本丢到容器里面执行。
官方其实也提供了脚本的执行容器selenium/base,但是这个镜像是基于Java的,所以笔者在Docker hub上面找了一个Python的运行容器。
- 编写Selenium脚本(Demo.py)
from selenium import webdriver
from time import sleep
driver = webdriver.Remote(
command_executor='http://Linux Server IP:8080/wd/hub',
desired_capabilities={'browserName': 'chrome'}
)
driver.get('https://www.baidu.com')
print("open baidu")
driver.find_element_by_id("kw").send_keys("Hello World!")
sleep(1)
driver.get_screenshot_as_file("./baidu_img.png")
driver.quit()
print("test end")
- 下载Selenium-Python镜像
sudo docker pull ruelala/selenium-python
- 编写Dockerfile文件
FROM ruelala/selenium-python
Demo.py /selenium/docker/Demo.py
ENTRYPOINT ["/bin/sh"]
- 执行命令构建镜像
sudo docker build -t selenium-python:test .
- 运行selenium-python容器并启动测试脚本
sudo docker run -tid selenium-python:test
sudo docker exec 43a64d467ef3 python /selenium/docker/Demo.py
结果有正常返回,最后我们看下测试脚本里面的图来确认下是否真的跑了