快速搞定selenium grid分布式
写这篇文章,似乎有点重复造轮子的嫌疑。当看了几篇相关文章后,我还是决定把半年前的半成品给完成了。
以传统的方式部署分布式Selenium Grid集群需要耗费大量时间和机器成本来准备测试环境。
Snake用docker来搭建Selenium grid环境,用ptest框架来写代码,尝试简化这个过程。

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
看起来是这样的
启动成功。
环境部分,就大功告成了。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()
运行,得到结果:
Oopos, 出错了!
仔细看log和截图,原来是没有支持中文。
解决方案是: 换docker image 源,搜到了支持中文的。
重启后再运行。

Nice!
NO.3 并发
其实第二步里面已经打开了并发。运行的时候,输入并发数就可以了。
ptest3 -t test -n 2 -Dbrowser=firefox
这里的n是并发数,参数是firefox. 让firefox做为浏览器。(可以根据case 数量来设定。也可以设置多种浏览器)
当然,也可以在yml里面多注册几个hub也能实现并发, up to you!
感想
其实在这里,我都没做啥,只是做了个搬运工而已,报告,截图,并发,重跑等等,我都不用操心,只要设置几个参数就行。好的框架,能事半功倍。
更多精彩,请关注微信公众号: python爱好部落

快速搞定selenium grid分布式的更多相关文章
- 用docker搭建selenium grid分布式环境实践之路
最近需要测试zoom视频会议,同时模拟100个人加入会议.经过了解,zoom提供了直接通过url链接加入会议的方式(只能通过chrome浏览器或者FireFox浏览器,因为用的协议是webrtc). ...
- 使用docker搭建selenium grid 分布式环境
本文章只做docker搭建selenium grid 分布式环境步骤说明,对于selenium grid中的参数.流程.原理等不做说明.selenium grid的详细情况可查看官方文档https:/ ...
- Selenium Grid分布式测试入门详解
本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chr ...
- 手把手教你制作微信小程序,开源、免费、快速搞定
最近做了个"罗孚传车"的小程序 一时兴起,做了一个小程序,将个人收集的同汽车相关的行业资讯和学习资料,分享到小程序中,既作为历史资料保存,又提供给更多的人学习和了解,还能装一下:) ...
- Selenium Grid分布式测试环境搭建
Selenium Grid简介 Selenium Grid实际上是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成.Hub用来管理各个代理节点的注册信息 ...
- 10分钟快速搞定pandas
本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook .习惯 ...
- 【python+selenium】selenium grid(分布式)
前言 原文:https://blog.csdn.net/real_tino/article/details/53467406 Selenium grid是用来分布式执行测试用例脚本的工具,比如测试人员 ...
- 使用selenium grid分布式执行之一
目前ui框架会做一个更新,把原有的Jenkins分布式方式换成grid方式,换成grid方式有两个好处,1.grid的资源占用比Jenkins的jnlp占用资源少 2.grid可控制不同浏览器同时跑 ...
- 吐血整理:二叉树、红黑树、B&B+树超齐全,快速搞定数据结构
前言 没有必要过度关注本文中二叉树的增删改导致的结构改变,规则操作什么的了解一下就好,看不下去就跳过,本文过多的XX树操作图片纯粹是为了作为规则记录,该文章主要目的是增强下个人对各种常用XX树的设计及 ...
随机推荐
- 《Python编程从入门到实践》第二章_变量和简单数据类型
什么是变量呢? 举例: >>> message = "Hello,Python!" >>> print (message) Hello,Pyth ...
- TeamViewer——可以实现在手机上随时远程控制你的电脑
小编今天给大家推荐一款强大的远程控制软件——TeamViewer,可以让你的手机连接你自己的电脑,不管你身处何处,只要电脑和手机都能联网,那么你就可以在手机上控制你的电脑了.以下介绍下如何安装和使用方 ...
- Webpack 代码分离
Webpack 代码分离 代码分离是 webpack 中最引人注目的特性之一. 你可以把你的代码分离到不同的 bundle 中,然后你就可以去按需加载这些文件. 总的来说, webpack 分离可以分 ...
- iframe访问子页面方法
在Iframe中调用子页面的Js函数 调用IFRAME子页面的JS函数 说明:假设有2个页面,index.html和inner.html.其中index.html中有一个iframe,这个iframe ...
- NLTK学习笔记(八):文法--词关系研究的工具
[TOC] 对于一门语言来说,一句话有无限可能.问题是我们只能通过有限的程序来分析结构和含义.尝试将"语言"理解为:仅仅是所有合乎文法的句子的大集合.在这个思路的基础上,类似于 w ...
- url地址栏拼接参数写法
<script> function jiedan_do(elm){ var id=$(elm).attr("a"); window.location="__U ...
- Web前端总结(小伙伴的)
以下总结是我工作室的小伙伴的心得,可以参考一下 html+css知识点总结 HTMl+CSS知识点收集 1.letter-spacing和word-spacing的区别 letter-spacing: ...
- django-xadmin隐藏菜单不显示
环境:https://github.com/y2kconnect/xadmin-for-python3.git python3.5 django1.9.12 在adminx.py中的Admin类增加属 ...
- PHP接入阿里云市场 阿里短信服务DEMO
阿里短信服务:支持三大运营商短信.智能管道等优质能力,产品特点:3秒可达.99%到达率.超低资费. 使用阿里短信服务步骤: 1.购买服务 到https://market.aliyun.com/prod ...
- Python中字典和集合
Python中字典和集合 映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元 ...