转:Python-自动发邮件 二

      上一篇博客介绍了如何使用python发送qq邮件,下面介绍怎么定时自动执行测试用例完并发送邮件。 

一、整合自动发邮件功能
  1、代码如下

autoTest.py:

1. #coding=utf-8  
2. import unittest  
3. import HTMLTestRunner  
4. import os ,time,datetime  
5. import smtplib  
6. from email.mime.text import MIMEText  
7. from email.mime.multipart import MIMEMultipart  
8. from email.mime.image import MIMEImage  
9.   
10. #不要删!!!  
11. #定义发送邮件  
12. def set_email(file_new):  
13. "814981923@qq.com"  
14. "qapzlsqaorhkbaja"  
15. "404110318@qq.com"  
16. "rb")  
17.     mail_body=f.read()  
18.     f.close()  
19. 'html',_charset="utf-8")  
20.   
21. "Subject"]=u"灵枢自动化测试报告"  
22. "date"]=time.strftime("%a,%d %b %Y %H:%M:%S %z")  
23. "smtp.qq.com", 465)  
24.     smtp.login(mail_from, mail_password)  
25.     smtp.sendmail(mail_from, mail_to, msg.as_string())  
26.     smtp.quit()  
27. print ("email has send out!")  
28.   
29. #查找测试报告,调用发邮件功能  
30. def sendreport():  
31. "E:\\selenium_python2\\report"  
32.     lists = os.listdir(result_dir)  
33. lambda fn: os.path.getmtime(result_dir + "\\" + fn) if not  
34. "\\" + fn) else 0)  
35.   
36. print("最新的文件为:" + lists[-1])  
37. 1])  
38. print(file)  
39.     set_email(file)  
40.   
41. if __name__=="__main__":  
42. "E:\\selenium_python2\\test_case"  
43.   
44. def createsuite1():  
45.         testunit = unittest.TestSuite()  
46. 'start_*.py', top_level_dir=None)  
47. for test_suite in discover:  
48. for test_case in test_suite:  
49.                 testunit.addTests(test_case)  
50. print(testunit)  
51. return testunit  
52.   
53.   
54.     alltestnames = createsuite1()  
55. "%Y-%m-%d %H_%M_%S", time.localtime())  
56. "E:\\selenium_python2\\report\\" + now + "_result.html"  
57. 'wb')  
58.   
59.     runner = HTMLTestRunner.HTMLTestRunner(  
60.         stream=fp,  
61. '百度搜索测试报告',  
62. '用例执行情况:')  
63.   
64. ######控制什么时间脚本执行########  
65. 1  
66. while k<2:  #由于k=1,所以该循环一直执行,直到运行break语句  
67. '%H_%M',time.localtime(time.time()))  
68. if timing=='15_25':  
69. print(u"开始运行脚本:")  
70. #执行测试用例  
71. #关闭文件流  
72. #发送测试报告  
73. print('运行完成退出')  
74. break  
75. else:  
76. 5)  
77. print(timing)

2、关键代码解释:

set_email(file_new):

定义一个set_email(file_new)发邮件函数,接收一个参数file_new,表示接收最新生成的测试报告文件

lists = os.listdir(result_dir):

isdir()函数判断某一路径是否为目录 

lists.sort(key=lambda fn: os.path.getmtime(result_dir + "\\" + fn) if not os.path.isdir(result_dir + "\\" + fn) else 0):           方法用于改变列表中元素的位置;key 是带一个参数的函数,用来为每个元素提取比较值.默认为 None,即直接比较每个元素,lambda提供了一个运行时动态创建函数的方法,这里创建了 fn函数。  

file = os.path.join(result_dir, lists[-1]):

lists[-1]中的-1 表示取文件列表中的最大值,也就是最新被创建的文件

file = os.path.join(result_dir, lists[-1]):

join()方法用来连接字符串,通过路径与文件名的拼接,我们将得到目录下最新被创建的的文件名的完整路径 

listaa = "E:\\selenium_python2\\test_case":存放测试用例的目录
discover = unittest.defaultTestLoader.discover(listaa, pattern='start_*.py', top_level_dir=None):

  找到指定目录listaa下所有测试模块;递归查到子目录下名称以start开头的测试用例,只有匹配到文件名才能被加载;如果启动的不是顶层目录,那么顶层目录必须要单独指定,如果没有顶层目录,默认为None 

now = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime()):

 获取当前时间,第一个参数设置时间格式,第二个参数是得到struct_time 形式的当前时间 

二、windows7添加定时任务

1、添加定时任务之前要建一个.bat文件,用这个.bat文件来调用autoTest.py运行

autoTest.bat代码如下:

1. F:  
2. start python autoTest.py

第一行表示autoTest.py的路径,本例是放在F盘下的 

2、在开始菜单搜索“任务计划”,打开“任务计划程序”对话框

python smtplib 连续发送 python每天自动发送邮件_测试报告

 

3、点击“创建任务”

python smtplib 连续发送 python每天自动发送邮件_测试用例_02

 

4、填写任务名称,点击确定

python smtplib 连续发送 python每天自动发送邮件_python_03

 

5、新建触发器

python smtplib 连续发送 python每天自动发送邮件_python_04

 

6、新建“操作”,选择刚刚新建的bat文件

python smtplib 连续发送 python每天自动发送邮件_python smtplib 连续发送_05

 

7、可以在任务列表里看到刚刚创建的任务,这个任务每天到了设置的时间就会运行了

python smtplib 连续发送 python每天自动发送邮件_python smtplib 连续发送_06

 

8、自动执行测试用例后发送的邮件如下:

python smtplib 连续发送 python每天自动发送邮件_测试报告_07