Python-自动发邮件 二

Python-自动发邮件

      上一篇博客介绍了如何使用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)


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):             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

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


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

Python-自动发邮件 二_第1张图片


3、点击“创建任务”

Python-自动发邮件 二_第2张图片


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

Python-自动发邮件 二_第3张图片


5、新建触发器

Python-自动发邮件 二_第4张图片


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

Python-自动发邮件 二_第5张图片


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

Python-自动发邮件 二_第6张图片


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

Python-自动发邮件 二_第7张图片

你可能感兴趣的:(自动化测试,python,自动化测试)