1.本机上同时执行多个浏览器

import threading,sys
from time import sleep,ctime
from selenium import webdriver
path_list=sys.path[0].split("/")
index = path_list.index("SeleniumOfJenkins")+1
driver_path="/".join(path_list[:index])+"/driver/"
def BaiduSearch(browser,search):
print(browser,search)
base_url="http://www.baidu.com"
if browser=="chrome":
driver=webdriver.Chrome(executable_path=driver_path+"chromedriver")
elif browser=="firefox":
driver=webdriver.Firefox(executable_path=driver_path+"geckodriver")
elif browser == "safari":
driver=webdriver.Safari()
driver.implicitly_wait(10)
driver.get(base_url+"/")
driver.find_element_by_xpath("//input[@id='kw' and @class='s_ipt']").send_keys(search)
driver.find_element_by_xpath("//input[@value='百度一下' and @id='su']").click()
result_text = driver.find_element_by_xpath("//span[@class='nums_text']").text
assert "百度为您找到相关结果约" in result_text
sleep(3)
driver.quit()
if __name__=="__main__":
lists = {"chrome": "谷歌", "firefox": "火狐", "safari": "苹果"}
file = range(len(lists))
threads = []
for b, s in lists.items():
t = threading.Thread(target=BaiduSearch, args=(b, s))
threads.append(t)
for i in file:
threads[i].start()
print("线程%s 启动 %s"%(i,ctime()))
for i in file:
threads[i].join()
print("线程%s 运行 %s"%(i,ctime()))

2.分布式执行测试用例

import threading,sys
from time import sleep,ctime
from selenium import webdriver
path_list=sys.path[0].split("/")
index = path_list.index("SeleniumOfJenkins")+1
driver_path="/".join(path_list[:index])+"/driver/"
def BaiduSearch(host,browser):
print(host,browser)
base_url="http://www.baidu.com"
dc={"browserName":browser}
driver = webdriver.Remote(command_executor=host,desired_capabilities=dc)
driver.implicitly_wait(10)
driver.get(base_url+"/")
driver.find_element_by_xpath("//input[@id='kw' and @class='s_ipt']").send_keys(browser)
driver.find_element_by_xpath("//input[@value='百度一下' and @id='su']").click()
result_text = driver.find_element_by_xpath("//span[@class='nums_text']").text
assert "百度为您找到相关结果约" in result_text
sleep(3)
driver.quit()
if __name__=="__main__":
lists = {"http://192.168.63.143:5555/wd/hub":"chrome", "http://127.0.0.1:4444/wd/hub":"firefox", "http://127.0.0.1:5555/wd/hub":"safari"}
file = range(len(lists))
threads = []
for b, s in lists.items():
t = threading.Thread(target=BaiduSearch, args=(b, s))
threads.append(t)
for i in file:
threads[i].start()
print("线程%s 启动%s"% (i,ctime()))
for i in file:
threads[i].join()
print("线程%s 运行%s" % (i,ctime()))
print("全部结束",ctime())

3FAQ

3.1.分布式执行时,写入了3个浏览器,但只执行了2个

lists = {"http://127.0.0.1:5555/wd/hub":"chrome", "http://127.0.0.1:4444/wd/hub":"firefox", "http://127.0.0.1:5555/wd/hub":"safari"}
print(len(lists))
for i,j in lists.items():
print(i,j)


原因:字典中key必须唯一。否则后面传入键值对会替换掉重名的键值对。

python 自动化多线程的应用的更多相关文章

  1. Day1 老男孩python自动化运维课程学习笔记

    2017年1月7日老男孩python自动化运维课程正式开课 第一天学习内容: 上午 1.python语言的基本介绍 python语言是一门解释型的语言,与1989年的圣诞节期间,吉多·范罗苏姆为了在阿 ...

  2. python自动化开发学习 进程, 线程, 协程

    python自动化开发学习 进程, 线程, 协程   前言 在过去单核CPU也可以执行多任务,操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换任务2,任务2执行0.01秒,在切换到任务3,这 ...

  3. python自动化开发学习 I/O多路复用

    python自动化开发学习 I/O多路复用   一. 简介 socketserver在内部是由I/O多路复用,多线程和多进程,实现了并发通信.IO多路复用的系统消耗很小. IO多路复用底层就是监听so ...

  4. Python的多线程(threading)与多进程(multiprocessing )

    进程:程序的一次执行(程序载入内存,系统分配资源运行).每个进程有自己的内存空间,数据栈等,进程之间可以进行通讯,但是不能共享信息. 线程:所有的线程运行在同一个进程中,共享相同的运行环境.每个独立的 ...

  5. Python GIL 多线程机制 (C source code)

    最近阅读<Python源码剖析>对进程线程的封装解释: GIL,Global Interpreter Lock,对于python的多线程机制非常重要,其如何实现的?代码中实现如下: 指向一 ...

  6. flow.ci + Github + Slack 一步步搭建 Python 自动化持续集成

    理想的程序员必须懒惰,永远追随自动化法则.Automating shapes smarter future. 在一个 Python 项目的开发过程中可能会做的事情:编译.手动或自动化测试.部署环境配置 ...

  7. Selenium2+python自动化23-富文本(自动发帖)

    前言 富文本编辑框是做web自动化最常见的场景,有很多小伙伴遇到了不知道无从下手,本篇以博客园的编辑器为例,解决如何定位富文本,输入文本内容 一.加载配置 1.打开博客园写随笔,首先需要登录,这里为了 ...

  8. Selenium2+python自动化24-js处理富文本(带iframe)

    前言 上一篇Selenium2+python自动化23-富文本(自动发帖)解决了富文本上iframe问题,其实没什么特别之处,主要是iframe的切换,本篇讲解通过js的方法处理富文本上iframe的 ...

  9. Selenium2+python自动化7-xpath定位

    前言 在上一篇简单的介绍了用工具查看目标元素的xpath地址,工具查看比较死板,不够灵活,有时候直接复制粘贴会定位不到.这个时候就需要自己手动的去写xpath了,这一篇详细讲解xpath的一些语法. ...

随机推荐

  1. float、clear、overflow

    浮动: float:  none|left|right 作用使得标签失去块级标签的独占一行效果,向某个方向靠拢 标签浮动了,也需要占地方,有时候出现未浮动的div覆盖部分浮动div是浏览器的bug情况 ...

  2. Ubuntu:系统启动服务

    系统启动服务 针对Ubuntu 5级别服务的说明 安装sysv-rc-conf sudo apt-get install sysv-rc-conf acpi-support 高级电源管理支持 acpi ...

  3. QT 5.4.1 for Android Windows环境搭建

    QT 5.4.1 for Android Windows环境搭建 2015-5-13 目录 一.参考文章: 二.准备软件: 三.安装准备好的软件: 四.配置Qt 5.4.1 for Android 五 ...

  4. Tensorflow中的滑动平均模型

    原文链接 在Tensorflow的教程里面,使用梯度下降算法训练神经网络时,都会提到一个使模型更加健壮的策略,即滑动平均模型. 基本思想 在使用梯度下降算法训练模型时,每次更新权重时,为每个权重维护一 ...

  5. pymysql中如何将动态的插入数据库中

    data = { ', 'name': 'zengsf', 'age': 20 } table = 'students' #获取到一个以键且为逗号分隔的字符串,返回一个字符串 keys = ', '. ...

  6. Linq 增删改查

    数据库访问技术: ADO.net EF框架 LinQ LinQ是一种高集成化的数据库访问技术,他将数据库中的表映射成程序中的类 数据库的表名变成类名 数据库的列名变成字段名/属性名 所有的操作都是通过 ...

  7. Alternative Thinking 找规律

    Kevin has just recevied his disappointing results on the USA Identification of Cows Olympiad (USAICO ...

  8. (1)集合 ---遍历map集合

    Map接口     实现Map接口的类用来存储键(key)-值(value) 对.Map 接口的实现类有HashMap和TreeMap等.Map类中存储的键-值对通过键来标识,所以键值不能重复. Ha ...

  9. 思维题(两点逼近)LeetCode11 Container with Most Water

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai).  ...

  10. PHP经典乱码“口”字与解决办法

    这几天看了看 Ajax 的基础知识,在练习一个简单的 请求和响应时,PHP 返回来的数据 在 IE 中开头总显示 一个 “锘” 字!上网 Baidu 了一下,发现这是由于 系统 处理 UTF-8 的方 ...