Python多线程应用于自动化测试操作示例


Posted in Python onDecember 06, 2018

本文实例讲述了Python多线程应用于自动化测试操作。分享给大家供大家参考,具体如下:

多线程执行测试用例

实例:

import threading
from time import sleep,ctime
from selenium import webdriver
#测试用例1
def test_baidu(browser,search):
  print("开始,现在时间是%s"%ctime())
  print("浏览器是%s"%browser)
  if browser =="ff":
    driver = webdriver.Firefox()
  elif browser =="chrome":
    driver = webdriver.Chrome()
  elif browser =="ie":
    driver =webdriver.Ie()
  else:
    print("浏览器输入错误!")
  driver.get(r"http://www.baidu.com")
  driver.implicitly_wait(5)
  driver.find_element_by_xpath("//*[@id='kw']").send_keys(search)
  driver.find_element_by_id("su").click()
  sleep(2)
  driver.quit()
if __name__ =="__main__":
  #定义字典存放test_baidu函数的参数
  dicts = {"ff": "python", "chrome": "selenium", "ie": "unittest"}
  #创建空列表存放线程
  threads =[]
  #遍历字典,并把线程append进threads
  for browser,search in dicts.items():
    t = threading.Thread(target=test_baidu,args=(browser,search))
    threads.append(t)
  #把字典内容索引替代
  file = range(len(dicts))
  #启动线程
  for i in file:
    threads[i].start()
  #守护线程
  for i in file:
    threads[i].join()

测试结果:

Python多线程应用于自动化测试操作示例

由测试结果得到:多线程同时开始执行测试用例,大大缩小测试总时间。

多线程结合分布式执行测试用例

Selenium Girl 只是提供了多操作系统、多浏览器的执行环境,但不提供并行执行测试用例,Selenium Girl只能现在一个系统或浏览器上执行完测试用例外再从另一个操作系统或浏览器上执行测试用例。

启动Selenium server

在本机启动一个主hub和一个node节点:本机IP地址(192.168.0.101),节点端口4444/5555

java -jar selenium-server-standalone-2.48.0.jar -role hub

java -jar selenium-server-standalone-2.48.0.jar -role node -port 5555

启动一个远程node:p(192.168.0.102)在虚拟机里面:端口是6666

java -jar selenium-server-standalone-2.48.0.jar -role node -port 6666 -hub http://192.168.0.101:4444/gird/register

测试脚本:

'''
在不同主机、不同浏览器同时执行测试用例,多线程;
利用Selenium Girl提供分布式执行测试用例;
先启动Selenium server,这里分别在本地主机启动一个hub和一个node,在其他主机(虚拟机)启动一个node。
'''
from selenium.webdriver import Remote
import threading
from time import *
#测试用例
def test_baidu(host,browser):
  print("开始:%s"%ctime())
  print(host,browser)
  dc ={'browserName':browser}
  driver = Remote(
          command_executor=host,
          desired_capabilities=dc
  )
  driver.get(r'http://www.baidu.com')
  driver.implicitly_wait(10)
  driver.find_element_by_link_text("新闻").click()
  sleep(2)
  driver.get_screenshot_as_file(r'D:\testscreen\baidu.jpg')
  driver.quit()
if __name__ =='__main__':
  #启动参数,指定运行主机和浏览器
  lists={'http://127.0.0.1:4444/wd/hub':'chrome',
      'http://127.0.0.1:5555/wd/hub':'internet explorer',
      'http://192.168.216.128:6666/wd/hub':'firefox' #远程节点node
      }
  threads =[]
  files = range(len(lists))
  #创建线程,并append进线程组
  for host,browser in lists.items():
    t = threading.Thread(target=test_baidu,args=(host,browser))
    threads.append(t)
  #启动每一个线程
  for i in files:
    threads[i].start()
  #守护每一个线程
  for i in files:
    threads[i].join()

运行结果:

Python多线程应用于自动化测试操作示例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python实现下载文件的三种方法
Feb 09 Python
Python入门_浅谈数据结构的4种基本类型
May 16 Python
pandas.dataframe按行索引表达式选取方法
Oct 30 Python
PyCharm+PySpark远程调试的环境配置的方法
Nov 29 Python
解决Python运行文件出现out of memory框的问题
Dec 03 Python
在python下读取并展示raw格式的图片实例
Jan 24 Python
Django中的cookie和session
Aug 27 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
在终端启动Python时报错的解决方案
Nov 20 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 Python
一文带你掌握Pyecharts地理数据可视化的方法
Feb 06 Python
Python实现多属性排序的方法
Dec 05 #Python
python通过ffmgep从视频中抽帧的方法
Dec 05 #Python
Python中xml和json格式相互转换操作示例
Dec 05 #Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
Dec 05 #Python
python_opencv用线段画封闭矩形的实例
Dec 05 #Python
在python中实现将一张图片剪切成四份的方法
Dec 05 #Python
python实现对任意大小图片均匀切割的示例
Dec 05 #Python
You might like
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
javascript 动态添加表格行
2006/06/22 Javascript
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
JS简单实现文件上传实例代码(无需插件)
2013/11/15 Javascript
js中的for如何实现foreach中的遍历
2014/05/31 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
结合mint-ui移动端下拉加载实践方法总结
2017/11/08 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
python不换行之end=与逗号的意思及用途
2017/11/21 Python
python导入模块交叉引用的方法
2019/01/19 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
利用pyinstaller打包exe文件的基本教程
2019/05/02 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
python应用文件读取与登录注册功能
2019/09/23 Python
Django视图扩展类知识点详解
2019/10/25 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
韩国流行时尚女装网站:Dintchina(中文)
2018/07/19 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
杭州时比特电子有限公司SQL
2013/08/22 面试题
专升本个人自我评价
2013/12/22 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle
教你使用TensorFlow2识别验证码
2021/06/11 Python