终于可以正式开始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进行集群部署,以支持更多,不过目前似乎没有必要。