上一篇博客介绍了如何使用python发送qq邮件,下面介绍怎么定时自动执行测试用例完并发送邮件。
一、整合自动发邮件功能
1、代码如下
autoTest.py:
#coding=utf-8
import unittest
import HTMLTestRunner
import os ,time,datetime
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
#不要删!!!
#定义发送邮件
def set_email(file_new):
mail_from = "[email protected]"
mail_password="qapzlsqaorhkbaja"
mail_to="[email protected]"
f=open(file_new,"rb")
mail_body=f.read()
f.close()
msg=MIMEText(mail_body,_subtype='html',_charset="utf-8")
msg["Subject"]=u"灵枢自动化测试报告"
msg["date"]=time.strftime("%a,%d %b %Y %H:%M:%S %z")
smtp = smtplib.SMTP_SSL("smtp.qq.com", 465)
smtp.login(mail_from, mail_password)
smtp.sendmail(mail_from, mail_to, msg.as_string())
smtp.quit()
print ("email has send out!")
#查找测试报告,调用发邮件功能
def sendreport():
result_dir = "E:\\selenium_python2\\report"
lists = os.listdir(result_dir)
lists.sort(key=lambda fn: os.path.getmtime(result_dir + "\\" + fn) if not
os.path.isdir(result_dir + "\\" + fn) else 0)
print("最新的文件为:" + lists[-1])
file = os.path.join(result_dir, lists[-1])
print(file)
set_email(file)
if __name__=="__main__":
listaa = "E:\\selenium_python2\\test_case"
def createsuite1():
testunit = unittest.TestSuite()
discover = unittest.defaultTestLoader.discover(listaa, pattern='start_*.py', top_level_dir=None)
for test_suite in discover:
for test_case in test_suite:
testunit.addTests(test_case)
print(testunit)
return testunit
alltestnames = createsuite1()
now = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime())
filename = "E:\\selenium_python2\\report\\" + now + "_result.html"
fp = open(filename, 'wb')
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title=u'百度搜索测试报告',
description=u'用例执行情况:')
######控制什么时间脚本执行########
k=1
while k<2: #由于k=1,所以该循环一直执行,直到运行break语句
timing=time.strftime('%H_%M',time.localtime(time.time()))
if timing=='15_25':
print(u"开始运行脚本:")
runner.run(alltestnames) #执行测试用例
fp.close() #关闭文件流
sendreport() #发送测试报告
print('运行完成退出')
break
else:
time.sleep(5)
print(timing)
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): sort()方法用于改变列表中元素的位置; key=lambda fn: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代码如下:
F:
start python autoTest.py
2、在开始菜单搜索“任务计划”,打开“任务计划程序”对话框
3、点击“创建任务”
4、填写任务名称,点击确定
5、新建触发器
6、新建“操作”,选择刚刚新建的bat文件
7、可以在任务列表里看到刚刚创建的任务,这个任务每天到了设置的时间就会运行了
8、自动执行测试用例后发送的邮件如下: