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 Deque 模块使用详解
Jul 04 Python
Python数据类型详解(四)字典:dict
May 12 Python
Python 操作文件的基本方法总结
Aug 10 Python
Django使用unittest模块进行单元测试过程解析
Aug 02 Python
通过实例了解python property属性
Nov 01 Python
python为QT程序添加图标的方法详解
Mar 09 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
Apr 22 Python
python Matplotlib模块的使用
Sep 16 Python
如何快速一次性卸载所有python包(第三方库)呢
Oct 20 Python
Python logging自定义字段输出及打印颜色
Nov 30 Python
Python实现滑雪小游戏
Sep 25 Python
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
Apr 21 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
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
php使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
Javascript 面向对象 命名空间
2010/05/13 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
javascript操作数组详解
2014/12/17 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
2015/02/20 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
Jquery如何使用animation动画效果改变背景色的代码
2020/07/20 jQuery
javascript实现页面的实时时钟显示示例
2020/08/06 Javascript
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
Python设计模式之代理模式实例
2014/04/26 Python
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
Python实现股市信息下载的方法
2015/06/15 Python
numpy判断数值类型、过滤出数值型数据的方法
2018/06/09 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
Python 高效编程技巧分享
2020/09/10 Python
大学生护理专业自荐信
2013/10/03 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python
Springboot配置suffix指定mvc视图的后缀方法
2021/07/03 Java/Android
mysql中整数数据类型tinyint详解
2021/12/06 MySQL
Go web入门Go pongo2模板引擎
2022/05/20 Golang