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. STL_容器_删除

    1.erase()函数 用于删除由迭代器指定的元素,或者一个区间. 2.clear()函数 用于删除容器中所有元素 3.remove()函数 用于删除指定的元素,无需知道元素在容器的哪个位置,会删除掉 ...

  2. Win10玩游戏时听歌音量忽大忽小

    问题原因是你的声卡被识别成了5.1声道,解决方法: 1.右键桌面右下角小喇叭选择“声音” 2.右键当前的播放设备选择“配置扬声器” 3.选择“立体声”,可以测试一下,然后点击下一步退出,可能会中断当前 ...

  3. 《JAVA---day03---运算符》

    /*[位运算符] 运算符: 运算 范例 说明 <<: 左移 3<<2=12--->3*2*2=12 >>: 右移 3>>2=1---->3/ ...

  4. jquery 实现内容的级联选取

  5. liunx中安装包及其应用

    1. dpkg -i <package>  安装包 dpkg -r <package>   删除包 dpkg -P <package> 移除包和配置文件 dpkg ...

  6. CentOS LAMP环境 配置详解

    要想在linux上实现网页服务器(www)需要Apache这个服务器软件,不过Apache仅能提供最基本的静态网站数据而已,想要实现动态网站的话,最好还是要PHP与MySQL的支持,所以下面我们将会以 ...

  7. 20155304 2016-2017-2 《Java程序设计》第九周学习总结

    20155304 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC ...

  8. 简单介绍Spring的ContextLoaderListener

    在开发Spring的Web项目中,通常我们都会在web.xml中配置一个Spring的核心监听器,就是把Spring的IOC容器纳入Servlet容器中,配置如下: <listener> ...

  9. Laravel学习之旅(二)

    控制器 一.怎么编写控制器? 1.控制器文件存放路径:app\Http\Controllers: 2.命名规范如:TestController.php 3.完整的控制器例子如下: <?php n ...

  10. Hibernate4获取sessionFactory

    /** * Location of hibernate.cfg.xml file. * Location should be on the classpath as Hibernate uses * ...