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. C++静态成员变量和静态成员函数

    数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配 ...

  2. WebGL编程指南理论分析之物体的运动和点光源

    之前的所有案例中物体都是静止的并且是平行光照射,这里我们来讨论一下运动物体和点光源. 一.运动物体 我们知道对于一个提供原始顶点坐标和原始顶点法向量数据的着色器绘制出来的图形看上去是这样的: 看上去很 ...

  3. 一起来点React Native——常用组件之TextInput

    一.前言 文本输入框,相当于OC中的UITextField,在用法和属性方面,两者都有很大的借鉴之处:通过键盘将文本输入到应用程序的一个基本的组件: 二.TextInput的常见属性 因为TextIn ...

  4. NBUT 1221 Intermediary 2010辽宁省赛

    Time limit 1000 ms Memory limit 131072 kB It is widely known that any two strangers can get to know ...

  5. [leetcode] 94. Binary Tree Inorder Traversal 二叉树的中序遍历

    题目大意 https://leetcode.com/problems/binary-tree-inorder-traversal/description/ 94. Binary Tree Inorde ...

  6. Magento邮件发送完美设置

    Magento新站上线伊始,不料在邮件上遇到了问题.此时常用的邮件模板已经编辑完毕,诸如New Account, New Order, Password Forget等. CentOS下发送邮件很简单 ...

  7. [LeetCode&Python] Problem 412. Fizz Buzz

    Write a program that outputs the string representation of numbers from 1 to n. But for multiples of ...

  8. CSU 1112: 机器人的指令

    1112: 机器人的指令 Submit Page          Description 数轴原点有一个机器人.该机器人将执行一系列指令,你的任务是预测所有指令执行完毕之后它的位置. ·LEFT:往 ...

  9. 使用animate()完成修改图片src切换图片的动画效果

    如下所示,在动画效果中的回调函数中进行src的修改和动画的切换 $(".TopImg").animate( {opacity:'toggle'}, "slow" ...

  10. citus real-time 分析demo( 来自官方文档)

      citus 对于多租户以及实时应用的开发都是比较好的,官方也提供了demo 参考项目 https://github.com/rongfengliang/citus-hasuar-graphql 环 ...