selenium,unittest——参数化url,并多线程加快脚本运行速度
利用参数化连续打开网页:
#encoding=utf-8
import unittest
import paramunittest
import time
from selenium import webdriver
@paramunittest.parametrized(
      {"url":"http://www.baidu.com","result": "百度"},
      {"url":"http://www.sina.com","result": "新浪"},
      {"url":"http://www.taobao.com","result": "淘宝"},
)
class TestDemo(unittest.TestCase):
      def setParameters(self, url, result):
            self.url = url
            self.result = result
  def test_login(self):
            self.driver=webdriver.Firefox()
            self.driver.get(self.url)
            print("开始执行用例:--------------")
            time.sleep(0.5)
            print("期望结果:%s " % self.result)
if __name__ == "__main__":
    unittest.main(verbosity=2)
为了看结果特意没关浏览器:


一些新的想法,由于每次都需要等一个参数运行完之后才能运行下一个,导致如果一个网站比如新浪,访问时间很长,则下面的淘宝就需要等待,很浪费时间,于是做了个多线程:
#encoding=utf-8
import unittest
import paramunittest
import time
from selenium import webdriver
@paramunittest.parametrized(
  {"url":"http://www.baidu.com","result": "百度"},
  {"url":"http://www.sina.com","result": "新浪"},
  {"url":"http://www.taobao.com","result": "淘宝"},
)
class TestDemo(unittest.TestCase):
  def setParameters(self, url, result):
    self.url = url
    self.result = result
  def test_login(self):
    self.driver=webdriver.Firefox()
t = threading.Thread(target=self.driver.get, args=(self.url,))
t.start()
    self.driver.get(self.url)
    print("开始执行用例:--------------")
    time.sleep(0.5)
    print("期望结果:%s " % self.result)
if __name__ == "__main__":
unittest.main(verbosity=2)

运行结果变成了6.729,比之前的92.458真的是。。。快了不少啊

补充内容:
上面写的内容确实能提高脚本运行速度,但是因为脚本比较简单,只有登录这步操作,如果是比较复杂的步骤单单一步多线程反而会使得之后的动作fail,下面是学习到的是可以完整执行多个操作的用例,并使得多个这种用例进行并发操作,但是这种方式还无法融合unittest和paramunittest,回报类的错误,当然可以利用HTMLTestRunner来将用例放在多个,py文件然后多线程批量运行
#encoding=utf-8
from threading import Thread
from selenium import webdriver
from time import ctime, sleep
def test_baidu(browser, search):
      print('start:%s' % ctime())
      print('browser:%s,' % browser)
if browser == "ie":
          driver = webdriver.Firefox()#Ie()
    elif browser == "chrome":
          driver = webdriver.Firefox()#Chrome()
    elif browser == "ff":
          driver = webdriver.Firefox()
    else:
          print("browser参数有误,只能为ie,ff,chrome")
driver.get('http://www.baidu.com')
    driver.find_element_by_id("kw").send_keys(search)
    driver.find_element_by_id("su").click()
    sleep(2)
    #driver.quit()
if __name__ == '__main__':
    lists = {'ie': 'threading', 'chrome': 'driver', 'ff': 'python'}
    threads = []
    files = range(len(lists))
    for brow, sea in lists.items():
          t = Thread(target=test_baidu, args=(brow, sea))
          threads.append(t)
    for t in files:
          threads[t].start()
for t in files:
          threads[t].join()
print('end:%s' % ctime())


有一点需要注意,就是判断时一定要用elif,否则由于多线程过快,导致会直接跳到else将其内容print出来如下:

selenium,unittest——参数化url,并多线程加快脚本运行速度的更多相关文章
- python+selenium+unittest,爬虫电影网站
		以前经常在这个网站上下载电影下来看,这个网站比较坑的就是,主页上只有电影的名称,但是评分是看不到的:只有再点击电影名字,进入电影主页时才能看到评分.一般下载的电影都是评分高的才看,低的就忽略掉了.每次 ... 
- Selenium & Webdriver 远程测试和多线程并发测试
		Selenium & Webdriver 远程测试和多线程并发测试 Selenium Webdriver自动化测试,初学者可以使用selenium ide录制脚本,然后生成java程序导入ec ... 
- Python+selenium+unittest+HTMLTestReportCN单元测试框架分享
		分享一个比较基础的,系统性的知识点.Python+selenium+unittest+HTMLTestReportCN单元测试框架分享 Unittest简介 unittest是Python语言的单元测 ... 
- Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构
		1.Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_pa ... 
- Selenium 进行参数化
		Selenium参数化分为大小: 小:list.dict.函数 大:txt.excel.mysql.redis 哪种方式使自己的工作简单高效就选那种!!! Selenium进行参数化有多种形式: 本文 ... 
- Python+Unittest+Requests+PyMysql+HTMLReport 多线程并发接口化框架
		整体框架使用的是:Python+Unittest+Requests+PyMysql+HTMLReport 多线程并发模式 主要依赖模块 Unittest.Requests.PyMysql.HTMLRe ... 
- python3 应用 nose_parameterized 实现unittest 参数化
		一.读取变量的值,实现unittest 参数化 import nose_parameterized,unittest def calc(a:int,b:int): return a+b case_da ... 
- python自动化测试学习笔记-unittest参数化
		做接口测试的时候,当一个参数需要输入多个值的时候,就可以使用参数来实现: python中unittest单元测试,可以使用nose_parameterized来实现: 首先需要安装:pip inst ... 
- 如何实现shell并发 一个入门级可控多线程shell脚本方案
		如何实现shell并发 很多人都问我如何写shell脚本,如何实现同时给三台ftp服务器上传文件,如何同时检测三台服务器是否alive等,其实这就是想实现shell的并发.那么shell并 ... 
随机推荐
- select下拉框之默认选项清空
			最近和小伙伴发现,select默认选项一般是提示信息,怎么才能让当我们点击下拉框时,可选的选项中没有默认的提示信息呢? 思路: 1.当点击下拉框时,让默认提示信息,即下拉框第一个选项移除. 2.当没有 ... 
- 用LinkedList list实现栈的功能
			package homework; public class Dog extends Pet { String strain = "dogxx"; int love=80; pub ... 
- oracle空间分析
			相交 sdo_relate(t.geom, sdo_geometry(:geometry,null),\'mask=ANYINTERACT\')=\'TRUE\' 
- [转]HTTP报文接口及客户端和服务器端交互原理
			1. 协议 a. TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型.传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务.该模型的目的 ... 
- TestNG注解使用技巧 - @Factory
			之前在测试中一直使用testNG的@Test注解都很顺利没有碰到什么问题,今天突然遇到@Test不能用的情况,运行后提示: org.testng.TestNGException: Can't invo ... 
- Swift_TableView(delegate,dataSource,prefetchDataSource 详解)
			Swift_TableView(delegate,dataSource,prefetchDataSource 详解) GitHub import UIKit let identifier = &quo ... 
- GPUImage源码解读之GPUImageFramebufferCache
			简介 由于GPUImage添加滤镜可以形成一个FilterChain,因此,在渲染的过程中,可能会需要很多个FrameBuffer,但是正如上文所说,每生成一个FrameBuffer都需要占用一定的内 ... 
- Oracle->oracle单实例Shell脚本[20180122]
			脚本主要用于redhat平台安装11g和12c软件 依赖包检查与安装 用户.组检查与安装 系统内核.用户限制 防火墙.selinux关闭 注意,linux组脚本 ... 
- 04.nginx使用
			博客为日常工作学习积累总结: 1.安装依赖包 安装pcre :yum install pcre pcre-devel -y 安装openssl:yum install openssl o ... 
- day04-decorator
			# Author: 刘佳赐-Isabelle # Email: jiaci.liu@gmail.com ''' 练习题: 1.整理装饰器的形成过程,背诵装饰器的固定格式 2.编写装饰器,在每次执行被装 ... 
