Skip to content

lucas234/zalenium-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 

Repository files navigation

在这里插入图片描述

简介

Zalenium 是一个Selenium Grid的扩展,它使用docker-selenium在本地运行基于Firefox和Chrome的测试,同样带有视频录制,实时预览,基本认证和仪表盘等功能;如果需要其他的浏览器,则需要用到云测试提供商(Sauce Labs,BrowserStack,TestingBot),当然这些是收费的。。。不过好在Firefox和Chrome是开源的,基本已经够用了; Zalenium也可以在Kubernetes中使用。

安装
前置条件
  • Docker version >= 1.11.1(可能适用于低版本,没有测试过)
  • 运行 docker info不会报错
下载镜像
docker pull elgalu/selenium
docker pull dosel/zalenium

下载成功后运行:

docker run --rm -ti --name zalenium -p 4444:4444 -v /var/run/docker.sock:/var/run/docker.sock -v /temp/videos:/home/seluser/videos   --privileged dosel/zalenium start

默认只启动一个chrome container和一个Firefox container,如需启动多个则运行(添加参数--desiredContainers 4):

docker run --rm -ti --name zalenium -p 4444:4444 -v /var/run/docker.sock:/var/run/docker.sock -v /temp/videos:/home/seluser/videos   --privileged dosel/zalenium start --desiredContainers 4

查看zalenium的参数用-h --help:

docker run --rm -ti --name zalenium -p 4444:4444 -v /var/run/docker.sock:/var/run/docker.sock -v /temp/videos:/home/seluser/videos   --privileged dosel/zalenium start -h

等待zalenium准备,调用:http://localhost:4444/wd/hub/status 你将会看到类似如下返回值:

{
  "status": 0,
  "value": {
    "ready": true,
    "message": "Hub has capacity",
    "build": {
      "revision": "unknown",
      "time": "unknown",
      "version": "3.141.59"
    },
    "os": {
      "arch": "amd64",
      "name": "Linux",
      "version": "4.9.125-linuxkit"
    },
    "java": {
      "version": "1.8.0_212"
    }
  }
}

然后你将会看到:

或者可以用Docker Compose启动zalenium,docker-compose.yml样例:

    # Usage:
    #   docker-compose up --force-recreate
    version: '2.1'
    
    services:
      #--------------#
      zalenium:
        image: "dosel/zalenium"
        container_name: zalenium
        hostname: zalenium
        tty: true
        volumes:
          - /tmp/videos:/home/seluser/videos
          - /var/run/docker.sock:/var/run/docker.sock
         # - /usr/bin/docker:/usr/bin/docker
        ports:
          - 4444:4444
        command: >
          start --desiredContainers 2
                --maxDockerSeleniumContainers 8
                --screenWidth 800 --screenHeight 600
                --timeZone "Europe/Berlin"
                --videoRecordingEnabled true
                --sauceLabsEnabled false
                --browserStackEnabled false
                --testingBotEnabled false
                --cbtEnabled false
                --startTunnel false
        environment:
          - HOST_UID
          - HOST_GID

创建docker-compose.yml文件后,该文件目录下运行:docker-compose up 即可看到上文描述的结果。

测试配置选项
caps = {'platform': 'ANY',
        'browserName': "chrome",
        'version': '',
        # 是否录制视频
        'recordVideo': True,
        # build 名字
        'build': "my_build_name123",
        # 测试名称
        'name': 'my_test_name123',
        # 超时时间
        'idleTimeout': 90,
        # 分辨率
        'screenResolution': '1280x720',
        # 时区
        # 'tz': 'Asia/Shanghai',
        # 视频文件名称
        'testFileNameTemplate': '{platform}_{browser}_{testStatus}_{timestamp}',
        }
# 标记测试成功、失败
driver.add_cookie({"name": "zaleniumTestPassed", "value": "true"})
# 每一步在视频中添加注释
driver.add_cookie({"name": "zaleniumMessage", "value": "go to baidu page"})
运行用例
  • Python环境
  • pip insatll -U selenium

安装完毕后,运行脚本:

# coding=utf-8
# auther:lucas
# date:2019/7/1 17:40
# tools:PyCharm
# time zone: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
import unittest
from selenium import webdriver


class MyTestCase(unittest.TestCase):

    def setUp(self):
        ds = {'platform': 'ANY',
              'browserName': "chrome",
              'version': '',
              'recordVideo': True,
              'build': "my_build_name123",
              'name': 'my_test_name123',
              'idleTimeout': 90,
              'screenResolution': '1280x720',
              # 'tz': 'Asia/Shanghai',
              'testFileNameTemplate': '{platform}_{browser}_{testStatus}_{timestamp}',
              }
        self.dr = webdriver.Remote('http://localhost:4444/wd/hub', desired_capabilities=ds)

    def test_something(self):
        self.dr.get("https://www.baidu.com")
        self.dr.add_cookie({"name": "zaleniumMessage", "value": "go to baidu page12"})

        self.assertEqual(self.dr.name, "chrome")

    def test_search_button(self):
        self.dr.get("https://www.baidu.com")
        self.dr.add_cookie({"name": "zaleniumMessage", "value": "go to baidu page"})
        self.dr.add_cookie({"name": "zaleniumMessage", "value": "input keyword"})
        self.dr.find_element_by_id("kw").send_keys("zalenium")
        self.dr.add_cookie({"name": "zaleniumMessage", "value": "click search button"})
        self.dr.find_element_by_id("su").click()
        self.assertTrue(self.dr.find_element_by_id("su").is_displayed())

    def tearDown(self):
        print(self.dr.get_cookies())
        self.dr.add_cookie({"name": "zaleniumTestPassed", "value": "true"})
        self.dr.quit()


if __name__ == '__main__':
    unittest.main()

运行完将会通过上面的Dashboard实时预览即可看到结果(视频可能需要等一下才可以生成) 关于并发的脚本:

# coding=utf-8
# auther:Liul5
# date:2019/7/12 10:50
# tools:PyCharm
# Python:3.7.3
import threading
from selenium import webdriver
import time


caps = {'platform': 'ANY',
        'browserName': None,
        'version': '',
        # "enableVNC": True,
        # 'javascriptEnabled': True,
        'recordVideo': True,
        'build': "build_%s" % time.strftime("%Y-%m-%d_%H-%M-%S", time.gmtime()),
        'name': 'test_%s' % time.strftime("%Y-%m-%d_%H-%M-%S", time.gmtime()),
        'idleTimeout': 90,
        'screenResolution': '1280x720',
        # 'tz': 'Asia/Shanghai',
        # 'tz': 'America/Montreal',
        'testFileNameTemplate': '{platform}_{browser}_{testStatus}_{timestamp}',
        # 'name': 'my_test_name',
        }


def run_browser(browser="chrome"):
    if browser.lower() == "chrome":
        caps['browserName'] = "chrome"
    if browser.lower() == "firefox":
        caps['browserName'] = "firefox"
    # print(caps)
    dr = webdriver.Remote('http://localhost:4444/wd/hub', desired_capabilities=caps)
    dr.get("https://www.baidu.com")
    dr.add_cookie({"name": "zaleniumMessage", "value": "go to baidu page"})
    dr.add_cookie({"name": "zaleniumMessage", "value": "input keyword"})
    dr.find_element_by_id("kw").send_keys("zalenium")
    dr.add_cookie({"name": "zaleniumMessage", "value": "click search button"})
    dr.find_element_by_id("su").click()
    print(dr.find_element_by_id("su").is_displayed())


threads = []
temp_thrad = threading.Thread(target=run_browser, args=())
temp_thrad1 = threading.Thread(target=run_browser, args=("firefox",))
threads.append(temp_thrad)
threads.append(temp_thrad1)
for t in threads:
    t.setDaemon(True)
    t.start()
for i in threads:
    i.join()

将会看到结果(同时运行两个浏览器): 在这里插入图片描述

参考

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages