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 07 Python
python爬虫中get和post方法介绍以及cookie作用
Feb 08 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
基于Python中的yield表达式介绍
Nov 19 Python
Python如何输出整数
Jun 07 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
Python发送邮件实现基础解析
Aug 14 Python
python 5个顶级异步框架推荐
Sep 09 Python
python基于socket模拟实现ssh远程执行命令
Dec 05 Python
10个顶级Python实用库推荐
Mar 04 Python
两行代码解决Jupyter Notebook中文不能显示的问题
Apr 24 Python
Python 全局空间和局部空间
Apr 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
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
php 运算符与表达式详细介绍
2016/11/30 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
2018/03/03 Javascript
JavaScript累加、迭代、穷举、递归等常用算法实例小结
2018/05/08 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
python数据批量写入ScrolledText的优化方法
2018/10/11 Python
Python chardet库识别编码原理解析
2020/02/18 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
国培教师自我鉴定
2014/02/12 职场文书
迎新晚会主持词
2014/03/24 职场文书
公司股权转让协议书
2014/04/12 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
运动会主持人开幕词
2016/03/04 职场文书