在写Unittest接口和UI自动化测试的时候,须要封装邮件模块来进行发送邮件。如何做呢?简略做一下整顿。

1、在框架工具集中封装send_mail.py

如图,我的在common中封装了send_mail.py

代码如下:

#coding=utf-8from email.mime.text import MIMETextimport timeimport smtplibimport getpassfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.base import MIMEBasefrom email import encodersimport emailimport osdef sendmain(file_path,mail_to = 'xxxx@sdsdsd.com'):    mail_from = 'xxx@126.com' # 发送邮件账号    f = open(file_path,'rb')    mail_body=f.read()    f.close()        #msg = email.MIMEMultipart.MIMEMultipart()    msg = MIMEMultipart()    # 结构MIMEBase对象做为文件附件内容并附加到根容器      contype = 'application/octet-stream'      maintype, subtype = contype.split('/', 1)          ## 读入文件内容并格式化      data = open(file_path, 'rb')    file_msg = MIMEBase(maintype, subtype)    file_msg.set_payload(data.read( ))      data.close( )      encoders.encode_base64(file_msg)        ## 设置附件头      basename = os.path.basename(file_path)      file_msg.add_header('Content-Disposition',                          'attachment', filename = basename)      msg.attach(file_msg)      print(u'msg 附件增加胜利')        msg1 = MIMEText(mail_body,_subtype='html',_charset='utf-8')    msg.attach(msg1)        if isinstance(mail_to,str):        msg['To'] = mail_to    else:         msg['To'] = ','.join(mail_to)    msg['From'] = mail_from    msg['Subject'] = u'zzzz我的项目接口自动化测试'    msg['date']=time.strftime('%Y-%m-%d-%H_%M_%S')    print(msg['date'])    smtp = smtplib.SMTP()    smtp.connect('smtp.126.com')    smtp.login('xxx@126.com','123456') # 发送邮件账号密码    smtp.sendmail(mail_from, mail_to, msg.as_string())    smtp.quit()    print('email has send out !')if __name__=='__main__':    sendmain('../report/2017-08-18-10_18_57_result.html')

2、 在主框架入口调用邮件模块

    # HTML报告    now = datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S')    htmlreport = reportpath + "/" + now + r"result.html"    print("测试报告生成地址:%s"% htmlreport)    fp = open(htmlreport, "wb")    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, verbosity=2, title="xxxx我的项目接口自动化测试报告", description="用例执行状况")    # 调用add_case函数返回值    runner.run(all_case)    fp.close()    time.sleep(2)    sendmain(htmlreport, mail_to=['yyyyy@qq.com']) # 填写须要发送给对方邮件账号,用逗号隔开,可写多个