终于可以正式开始UI自动化测试了,UI自动化还是使用的selenium,结合robotframework.基本是比较常见的技术方案。
当然这部分已经做好了,那么搭建环境接入jenkins自动化,整个流程也算是有闭环了。
事前准备
自动化脚本使用gitlab进行协同开发,jenkins 已经配置了相应的robotframework任务.
方案大致为:
coder->gitlab<-jenkins->docker(robotframework task)->docekr-compose(selenium )
本文主要介绍红色部分的搭建。
资料准备
经过一番查询之后,docker-selenium 基本为比较好的解决方案。
组成部分:
hub(集群中心)
node(集群节点-一般为指定浏览器节点)
其中node可以为firefox,chrome
搭建
为了方便,使用docker-compose进行搭建,只需要配置一下就好。
docker-compose.yml:
version: "3"
services:
selenium-hub:
image: selenium/hub:3.141.59-radium
container_name: selenium-hub
ports:
- "4444:4444"
chrome:
image: selenium/node-chrome:3.141.59-radium
volumes:
- /dev/shm:/dev/shm
depends_on:
- selenium-hub
environment:
- HUB_HOST=selenium-hub
- HUB_PORT=4444
ports:
- "5901:5900"
firefox:
image: selenium/node-firefox:3.141.59-radium
volumes:
- /dev/shm:/dev/shm
depends_on:
- selenium-hub
environment:
- HUB_HOST=selenium-hub
- HUB_PORT=4444
ports:
- "5902:5900"
其中firefox,chrome中的ports只在image带debug,也就是
selenium/node-firefox-debug
的情况下将可以使用NVC通过端口进行远程桌面访问,以方便调试。
最后使用命令:
docker-compose up -d
进行启动。
成功之后通过hub的http://127.0.0.1:4444 访问控制界面。
当然配置中可以启动多个firefox,chrome,当然需要你的服务器硬件够用,这样就可以支持多个自动化测试的同时进行。
验证
搭建完成之后,当然得测试一下,这里给出我用python写测试用例。
selenium-cqmaple.py
#coding=utf-8
from selenium import webdriver
from time import sleep
chrome_capabilities={
"browserName":"chrome",
"version": "75.0.3770.90",#注意版本号一定要写对
"platform": "ANY",
"javascriptEnabled": True,
"marionette": True,
}
browser=webdriver.Remote("http://127.0.0.1:4444/wd/hub",desired_capabilities=chrome_capabilities)#注意端口号4444是我们上文中映射的宿主机端口号
try:
browser.get("http://www.baidu.com")
browser.find_element_by_id("kw").send_keys("www.cqmaple.com")
browser.find_element_by_id("su").click()
sleep(3)
browser.get_screenshot_as_file("baidu_img.png")
finally:
browser.quit()
print("end...")
最后在运行目录下,查看baidu_img.png。
其中需要注意主要是浏览器版本。使用的是 webdriver.Remote ,写脚本的时候需要注意。
后续
完成搭建之后,如果后续有更多自动化的需求,可能还是需要使用通过docker-swarm,或者k8s进行集群部署,以支持更多,不过目前似乎没有必要。