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并 ...
随机推荐
- Mac系统下配置JAVA Maven Ant 环境变量
Mac 启动加载文件位置(可设置环境变量) ------------------------------------------------------- (1)首先要知道你使用的Mac OS X是什 ...
- 提交文件到ng-pages分支
一.提交dist文件夹到ng-pages分支 git subtree push --prefix=dist origin gh-pages 二.提交所有文件到ng-pages分支 text git:( ...
- Java中线程同步的理解
我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread). 线程(Thread)是一份独立运行的程序,有自己专用的运行栈.线程有可能和其他线程共享一些资源, ...
- 常用的layer弹出层
本文来自 松耦合 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/dunegao/article/details/78978448?utm_source=copy 常用 ...
- 一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate
一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点 ...
- 360极速浏览器用ie8模式打开网页(360浏览器同理)
在访问年代久远的的网页时经常会遇到兼容性的问题,用360浏览器(或360极速浏览器)中通过设置可解决. 在360极速浏览器中分别依次选择:选项->高级设置->内核模式->内核切换设置 ...
- 技巧:Vimdiff 使用(改)
技巧:Vimdiff 使用(改) 各种 IDE 大行其道的同时,传统的命令行工具以其短小精悍,随手可得的特点仍有很大的生存空间,这篇短文介绍了一个文本比较和合并的小工具:vimdiff.希望能对在 U ...
- 一道关于js正则表达式的面试题
这道面试题明显是要用到正则表达式来解决的,由于太久没有写正则表达式了,一时之间竟然写不出来,所以记录一下笔记,下面直接上代码: function parseUrl(str) { // 判断是否传入参数 ...
- Python学习:10.Python装饰器讲解(一)
情景介绍 一天,在你正在努力加班的时候,老板给交给你了一个任务,就是在这段代码里将所有函数开始输出一个‘hello’最后输出当前时间,再输出一个“end”,这段代码里包含了大量的函数,你会怎么做? d ...
- 插入排序,C语言实现
插入排序是稳定排序,时间复杂度最低为O(n),最高为O(n^2),平均为O(n^2). 插入排序是将数组分为两部分,一部分已经排好序,另一部分未排好序,每次从未排好序的部分取第一个元素插入到已经排好序 ...