zoukankan      html  css  js  c++  java
  • 快速搞定selenium grid分布式

    写这篇文章,似乎有点重复造轮子的嫌疑。当看了几篇相关文章后,我还是决定把半年前的半成品给完成了。

    以传统的方式部署分布式Selenium Grid集群需要耗费大量时间和机器成本来准备测试环境。

    Snake用docker来搭建Selenium grid环境,用ptest框架来写代码,尝试简化这个过程。

    屏幕快照 2017-05-10 下午11.46.56.png

    NO.1 搭环境

    首先你得把docker加个阿里云加速器,不然那个等待是漫长的。
    写个docker-compose.yml

    hub:
      image: selenium/hub
      ports:
        - "4444:4444"
    firefox:
      image: selenium/node-firefox
      ports:
        - 5901:5900
      links:
        - hub
    chrome:
      image: selenium/node-chrome
      ports:
        - 5902:5900
      links:
        - hub
    

    启动起来:

    docker-compose up
    

    看起来是这样的
    Screen Shot 2017-05-10 at 5.30.39 PM.png
    启动成功。
    环境部分,就大功告成了。So easy!

    NO.2 写代码

    写了一个很简单的例子,用了同事写的ptest框架。
    这个框架改进了很多市面上框架用起来不爽的地方,比如:报告,并发,写log, 传参等。

    __author__ = 'anderson'
    
    # coding=utf-8
    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    from selenium.webdriver.support.ui import WebDriverWait
    
    from ptest.decorator import TestClass, Test, BeforeMethod, AfterMethod
    
    @TestClass(run_mode="parallel")  # the test cases in this class will be executed by multiple threads
    class SeleniumClass:
        @BeforeMethod(description="Prepare test Enviroment.")
        def before(self):
            preporter.info("set up driver")
            browser = config.get_property("browser")
            if browser == "firefox":
                self.driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',
                                               desired_capabilities=DesiredCapabilities.FIREFOX)
            elif browser == "chrome":
                self.driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',
                                               desired_capabilities=DesiredCapabilities.CHROME)
    
        @Test(tags=["regression", "smoke"])
        def test1(self):
            preporter.info("start to test")
            self.driver.get("http://www.baidu.com")
            inputElement = self.driver.find_element_by_name("wd")
            inputElement.send_keys("docker")
            inputElement.submit()
            WebDriverWait(self.driver, 20).until(lambda driver: driver.title.startswith("docker"))
            assert_true(self.driver.title.startswith("docker"))
    
        @AfterMethod(always_run=True, description="Clean up")
        def after(self):
            preporter.info("cleaning up")
            self.driver.quit()
    

    运行,得到结果:
    Screen Shot 2017-05-10 at 5.19.03 PM.png
    Oopos, 出错了!
    Screen Shot 2017-05-10 at 5.19.59 PM.png
    仔细看log和截图,原来是没有支持中文。
    解决方案是: 换docker image 源,搜到了支持中文的。
    重启后再运行。

    Screen Shot 2017-05-10 at 6.00.48 PM.png
    Nice!
    Screen Shot 2017-05-10 at 5.59.00 PM.png

    NO.3 并发

    其实第二步里面已经打开了并发。运行的时候,输入并发数就可以了。

    ptest3 -t test -n 2 -Dbrowser=firefox
    

    这里的n是并发数,参数是firefox. 让firefox做为浏览器。(可以根据case 数量来设定。也可以设置多种浏览器)
    当然,也可以在yml里面多注册几个hub也能实现并发, up to you!

    感想

    其实在这里,我都没做啥,只是做了个搬运工而已,报告,截图,并发,重跑等等,我都不用操心,只要设置几个参数就行。好的框架,能事半功倍。

    更多精彩,请关注微信公众号: python爱好部落

    qrcode_for_gh_ca85abea157e_430.jpg

  • 相关阅读:
    Hdu 3564 Another LIS 线段树+LIS
    利用ESLINT进行js 语法检查,以及局部安装时遇到的一些坑
    操作系统杂谈
    算法杂谈
    前端杂谈
    操作系统复习
    vue之——从彩笔的进步之路
    一丢丢学习之webpack4 + Vue单文件组件的应用
    计蒜客 2017复赛 百度地图导航
    electron打包之真的恶心
  • 原文地址:https://www.cnblogs.com/lucklly/p/7243483.html
Copyright © 2011-2022 走看看