selenium grid执行分布式测试

简介

Selenium Grid是Selenium的三大组件之一,作用就是分布式执行测试。讲分布式之前还是要说说UI自动化的优势来突出Selenium Grid,最简单的两点解决重复执行测试、解决多浏览器兼容这是UI自动化的价值;那分布式是什么概念?简单的说就是老大收到任务,分发给手下去干;通过Selenium Grid的可以控制多台机器多个浏览器执行测试用例,分布式上执行的环境在Selenium Grid中称为node节点。

使用背景

当自动化测试用例达到一定数量的时候,比如上万,一台机器执行全部测试用例耗时5个小时(只是举例,真正的耗时是需要根据测试用例场景的复杂度决定的),而如果需要覆盖主流浏览器比如Chrome、Firefox,加起来就是10个小时;这时候领导跟你说有什么办法可以解决这个执行速度?当然最笨的办法就是另外拿台机器,然后部署环境,把测试用例分开去执行然后合并结果即可。而Selenium也想到了这点,所以有了Selenium Grid的出现,它就是解决分布式执行测试的痛点。

工作原理

Selenium Grid实际它是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成。Hub用来管理各个代理节点的注册信息和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令转发给代理节点来执行。下面结合环境部署来理解Hub与node节点的关系。

环境部署
  1. 下载jar包
    http://selenium-release.storage.googleapis.com/index.html

  2. 命令行启动服务
    启动本地一个hub,一个node。

java -jar selenium-server-standalone-4.0.0-alpha2.jar -role hub - port
java -jar selenium-server-standalone-4.0.0-alpha2.jar -role hub - port 5555
  1. 运行下面的代码
from threading import Thread
from selenium import webdriver
from time import ctime

#测试用例
def test_baidu(host, browser):
    print('start: %s' %ctime())
    print(host, browser)
    dc = {'browserName': browser}
    driver = webdriver.Remote(command_executor=host, desired_capabilities=dc)
    driver.get('http://www.baidu.com')
    driver.find_element_by_id('kw').send_keys(browser)
    driver.find_element_by_id('su').click()
    driver.close()

if __name__ == '__main__':
     # 启动参数(指定运行主机与浏览器)
     lists = {'http://127.0.0.1:4444/wd/hub': 'chrome',
            'http://127.0.0.1:5555/wd/hub': 'firefox',
            }
     threads = []
     files = range(len(lists))

     for host, browser in lists.items():
         t = Thread(target=test_baidu,args=(host, browser))
         threads.append(t)
     for i in files:
         threads[i].start()
     for j in files:
         threads[j].join()

     print('end: %s:' %ctime())

参考:https://blog.csdn.net/qq_37884273/java/article/details/81704134

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容