Skip to content

UI自动化测试-docker-compose 搭建

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注