转: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、在开始菜单搜索“任务计划”,打开“任务计划程序”对话框
3、点击“创建任务”
4、填写任务名称,点击确定
5、新建触发器
6、新建“操作”,选择刚刚新建的bat文件
7、可以在任务列表里看到刚刚创建的任务,这个任务每天到了设置的时间就会运行了
8、自动执行测试用例后发送的邮件如下: