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 相关文章推荐
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
Python如何通过subprocess调用adb命令详解
Aug 27 Python
Python面向对象编程基础解析(一)
Oct 26 Python
python检索特定内容的文本文件实例
Jun 05 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 Python
Python考拉兹猜想输出序列代码实践
Jul 05 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
Aug 19 Python
使用python实现数组、链表、队列、栈的方法
Dec 20 Python
如何通过Django使用本地css/js文件
Jan 20 Python
python新手学习使用库
Jun 11 Python
opencv 分类白天与夜景视频的方法
Jun 05 Python
Python中seaborn库之countplot的数据可视化使用
Jun 11 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一些服务器端特性的配置加强php的安全
2006/10/09 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
php使用include 和require引入文件的区别
2017/02/16 PHP
Javascript开发包大全整理
2006/12/22 Javascript
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
return false,对阻止事件默认动作的一些测试代码
2010/11/17 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
javascript实现日期时间动态显示示例代码
2015/09/08 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
遍历json 对象的属性并且动态添加属性的实现
2016/12/02 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
vue中添加mp3音频文件的方法
2018/03/02 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
layui动态表头的实现代码
2019/08/22 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
用js实现放大镜效果
2020/10/28 Javascript
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
python dataframe NaN处理方式
2019/12/26 Python
python 递归相关知识总结
2021/03/03 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
曼城官方网上商店:Manchester City
2019/09/10 全球购物
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
招聘与培训专员岗位职责
2014/01/30 职场文书
节约用水倡议书
2014/04/16 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书
Vue详细的入门笔记
2021/05/10 Vue.js