博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python selenium T3
阅读量:5125 次
发布时间:2019-06-13

本文共 3317 字,大约阅读时间需要 11 分钟。

python selenium T3

  既然要做自动,就得对得起自动化的这个名字。这一章我们将进一步的增加自动化测试的实用,增加

自动发邮件功能、多线程 和定时任务,让我们的自动化工作真正变得高效而又强大起来。

 

EG1 :

with open('report.html' , 'r') as f:    msg = MIMEText(f.read() , _subtype='html' , _charset='utf-8')    msg['Subject'] = Header(subject, 'utf-8')    msg['date'] = datetime.now().strftime('%Y-%m-%d %H-%M-%S')    smtp = smtplib.SMTP()    smtp.connect(smtpserver)    smtp.login(username, password)    smtp.sendmail(sender,receiver , msg.as_string())    smtp.quit()

  

 

EG2:

每个进程都有自己的地址空间,内存,数据栈以及其它记录其运行轨迹的辅助数据。操作系统管理在其上运行的所有进程,并为这些进程公平地分配时间。

 

线程(有时被称为轻量级进程)跟进程有些相似,不同的是,所有的线程运行在同一个进程中,共享

相同的运行环境。我们可以想像成是在主进程或“主线程”中并行运行的“迷你进程”。

 

在单线程中顺序执行两个循环。一定要一个循环结束后,另一个才能开始。总时间是各个循环

运行时间之和

 

thread 提供了低级别的、原始的

线程以及一个简单的锁。threading 基于 Java 的线程模型设计。锁(Lock)和条件变量(Condition)
在 Java 中是对象的基本行为(每一个对象都自带了锁和条件变量),而在 Python 中则是独立的对象。

 

我们应该避免使用 thread 模块,原因是它不支持守护线程。当主线程退出时,所有的子线程不论它

们是否还在工作,都会被强行退出。有时我们并不期望这种行为,这时就引入了守护线程的概念。 threading
模块则支持守护线程。

join()会等到线程结束,或者在给了 timeout 参数的时候,等到超时为止。join()的另一个比较重

要的方面是它可以完全不用调用。一旦线程启动后,就会一直运行,直到线程的函数结束,退出为止。

  

multiprocessing 使用类似于 threading 模块的 API ,multiprocessing 提供了本地和远程的并发性,有

效的通过全局解释锁(Global Interceptor Lock, GIL)来使用进程(而不是线程)。由于 GIL 的存在,在 CPU 密
集型的程序当中,使用多线程并不能有效地利用多核 CPU 的优势,因为一个解释器在同一时刻只会有一
个线程在执行。所以,multiprocessing 模块可以充分的利用硬件的多处理器来进行工作。它支持 Unix 和
Windows 系统上的运行。

 

EG1:

from time import sleep, ctimedef loop0():    print('start loop 0 at:', ctime())    sleep(1)    print('loop 0 done at:', ctime())def loop1():    print('start loop 1 at:', ctime())    sleep(1)    print('loop 1 done at:', ctime())def main():    print('start:', ctime())    loop0()    loop1()    print('all end:', ctime())if __name__ == '__main__':    main()

  

EG2:

import threadingfrom time import sleepfrom datetime import datetimeloops = [2, 4]def loop(nloop , nsec):    print('start loop ' , nloop , ' at : ' , datetime.now())    sleep(nsec)    print('end  loop  ' , nloop , ' at : ' , datetime.now())def main():    print('start main  ' , datetime.now())    threads = []    nloops = range(len(loops))    for i in nloops :        t = threading.Thread(target=loop , args=(i , loops[i]))        threads.append(t)    for i in nloops:        threads[i].start()      #  开启线程    for i in nloops:        threads[i].join()       #  等待线程终止    print('end  main  ', datetime.now())if __name__ == '__main__':    main()

  

EG3:

import threadingfrom time import sleepfrom datetime import datetimeloops = [4, 2]format_date = '%Y-%m-%d-%H-%M-%S'class ThreadFunc(object):    def __init__(self, func, args, name):        self.name = name        self.func = func        self.args = args    def __call__(self):        apply(self.func , self.args)def loop(nloop , nsec):    print('start loop ' , nloop , ' at : ' , datetime.now().strftime(format_date))    sleep(nsec)    print('end  loop  ' , nloop , ' at : ' , datetime.now().strftime(format_date))def main():    print('start  main ' , datetime.now())    threads = []    nloops = range(len(loops))    for i in nloops:        t = threading.Thread(target=ThreadFunc(loop , (i, loops[i]) , loop.__name__))        threads.append(t)    for i in nloops:        threads[i].start()    for i in nloops:        threads[i].join()    print('end main   ' , datetime.now().strftime(format_date))if __name__ == '__main__':    main()

EG4:

  

 

转载于:https://www.cnblogs.com/zsr0401/p/6489860.html

你可能感兴趣的文章
mongodb读取测试
查看>>
【飞谷六期】爬虫项目4
查看>>
Android-Animations的使用大全之二:Frame Animation和其他
查看>>
文档基本结构标签的作用
查看>>
VMware的linux虚拟机实现和windows的文件共享
查看>>
657. Judge Route Circle
查看>>
android旋转动画的两种实现方式
查看>>
Hibernate4之session核心方法
查看>>
HTML5前端开发学习路线建议,学习前端的必备知识点
查看>>
python 运维自动化之路 Day2
查看>>
ASP.NET 错误
查看>>
[转载]抓大放小,要事为先
查看>>
网页快照
查看>>
linq to json for sl
查看>>
iOS OC语言: Block底层实现原理
查看>>
页面分页
查看>>
Sock基础
查看>>
Linux中通过Socket文件描述符寻找连接状态介绍
查看>>
css 水平垂直居中那些事
查看>>
CLIST
查看>>