废话不多说,直接上代码:

import unittest
import time
import os
import smtplib
from HTMLTestRunner import HTMLTestRunner
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from models import driver def new_report(report_dir):
'''
:param report_dir:报告路径
:return:返回最新的文件
'''
#获取路径下的文件
lists = os.listdir(report_dir)
#按照时间顺序排序
lists.sort(key=lambda fn: os.path.getmtime(report_dir + fn))
#获取最近时间的
new_report = os.path.join(report_dir,lists[-1])
return new_report def send_mail(new_report,new_report_fail,now):
'''
:param new_report:获取最新的文件
:param new_report_fail:获取最新的文件的路径
:param now:当前生成报告的时间
:return:
''' senduser = 'xxx@126.com'
sendpswd = 'xxx'
receuser = 'xxx@xxx.com.cn' #获取报告文件:'related'43行
f = open(new_report,'rb')
body_main = f.read() msg = MIMEMultipart()
# 邮件标题
msg['Subject'] = Header('TCS系统自动化测试报告','utf-8')
msg['From'] = senduser
msg['To'] = receuser
#邮件内容
text = MIMEText(body_main,'html','utf-8')
msg.attach(text) #发送附件
att = MIMEApplication(open(new_report_fail, 'rb').read())
# att = MIMEText(sendfile, 'base64', 'utf-8')
att['Content-Type'] = 'application/octet-stream'
att.add_header('Content-Disposition', 'attachment', filename=('utf-8', '',now + "_report.html"))
msg.attach(att) smtp = smtplib.SMTP()
smtp.connect('smtp.126.com')
smtp.login(senduser,sendpswd)
smtp.sendmail(senduser,receuser,msg.as_string()) if __name__ == '__main__':
startime = time.strftime('%H:%M:%S')
print("开始时间为:%s" % startime)
#测试路径
test_dir = './tcs/test_case'
#报告路径
report_dir = './tcs/report/' now = time.strftime('%Y-%m-%d_%H-%M-%S')
# 创建完整报告文件
new_report_fail = report_dir + now + '_result.html'
fp = open(new_report_fail,'wb') runner = HTMLTestRunner(stream=fp,
title="大标题:测试报告",
description='执行测试用例如下:')
# 查找测试文件
discover = unittest.defaultTestLoader.discover(test_dir,pattern='*_sta.py') runner.run(discover)
fp.close() #②搜索最新生成的文件
new_report = new_report(report_dir)
#③发送邮件
send_mail(new_report,new_report_fail,now) #展示测试报告html
driver = driver.browser()
driver.get("F:/PyProject/project/tcs/report/"+ now +"_result.html") stoptime = time.strftime('%H:%M:%S')
print("结束时间为:%s" %stoptime)

【Selenium + Python】自动化测试之发送邮件正文以及附件同时发送的更多相关文章

  1. selenium+python自动化98--文件下载弹窗处理(PyKeyboard)

    前言 在web自动化下载操作时,有时候会弹出下载框,这种下载框不属于web的页面,是没办法去定位的(有些同学一说到点击,脑袋里面就是定位!定位!定位!) 有时候我们并不是非要去定位到这个按钮再去点击, ...

  2. selenium+python自动化79-文件下载(SendKeys)

    前言 文件下载时候会弹出一个下载选项框,这个弹框是定位不到的,有些元素注定定位不到也没关系,就当没有鼠标,我们可以通过键盘的快捷键完成操作. SendKeys库是专业的处理键盘事件的,所以这里需要用S ...

  3. python自动化测试之连接几组测试包实例

    python自动化测试之连接几组测试包实例 本文实例讲述了python自动化测试之连接几组测试包的方法,分享给大家供大家参考.具体方法如下: 具体代码如下:     class RomanNumera ...

  4. python自动化---各类发送邮件方法及其可能的错误

    一.发送文本邮件 可能的问题1.:需要注意,目前QQ邮箱来讲,不能收到完整的邮件,即有些内容不能显示,最好全部使用网易邮箱: 可能的问题2.:在以往的文本邮件发送中,只写了 msg = MIMETex ...

  5. python+selenium简易自动化框架,包含生成测试报告以及发送结果至Email

    Selenium+python环境搭建见虫师的pdf文档,非常详尽 简易框架: 1.文件目录:

  6. selenium+python自动化登录脚本

    利用selenium+python写的一个关于登录的自动化脚本

  7. 【python-excel】Selenium+python自动化之读取Excel数据(xlrd)

    Selenium2+python自动化之读取Excel数据(xlrd) 转载地址:http://www.cnblogs.com/lingzeng86/p/6793398.html ·········· ...

  8. selenium+python自动化102-登录页面滑动解锁(ActionChains)

    前言 登录页面会遇到滑动解锁,滑动解锁的目的就是为了防止别人用代码登录(也就是为了防止你自动化登录),有些滑动解锁是需要去拼图这种会难一点. 有些直接拖到最最右侧就可以了,本篇讲下使用 seleniu ...

  9. 邮件正文及其附件的发送的C++实现

     这段代码我花了整整一天来编写,假设转载,请注明出处,谢谢!    前面的一篇文章已经讲了怎样发送邮件正文,原理我就不再叙述了.要了解的同学请到这里查看!    http://blog.csdn.ne ...

随机推荐

  1. (转)Unity3D协同程序(Coroutine)

    一.什么是协同程序 协同程序,即在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行.换句话说,开启协同程序就是开启一个线程. 二.协同程序的开启与终止 在Unity3D中,使用MonoBeha ...

  2. Java判断中文字符

    package com.jsoft.test; import java.util.regex.Pattern; /** * 判断中文字符 * * @author jim * @date 2017-12 ...

  3. Lazy Scheduler:我的轻量级任务调度框架

    一.背景 工作中经常涉及任务调度,一直都是采用while(true) => if hitted DO => Thread.Sleep(interval)的模式.但是最近实在是感觉这种实现模 ...

  4. RS-232

    RS-232 锁定 同义词 rs232一般指RS-232 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . 个人计算机上的通讯接口之一,由电子工业协会(Electronic Industr ...

  5. 制作ubuntu16.04的docker镜像

    来自http://www.jianshu.com/p/029a1ed4fd64 背景 因为笔者是在vagrant转移到docker的玩家,所以对系统镜像情有独钟.如果你是windows.mac用户,那 ...

  6. [置顶] kubernetes资源类型--Service

    为了适应快速的业务需求,微服务架构已经逐渐成为主流,微服务架构的应用需要有非常好的服务编排支持.K8S中的核心要素Service便提供了一套简化的服务代理和发现机制,天然适应微服务架构. 实现原理 S ...

  7. Git的微操作

    合并分支代码,简单操作: 1.切换到master主干代码 2.到git repositories 视图,点击需要合并的分支,例如v1.1.9 点击merge 进行合并 3.然后push to Upst ...

  8. testng执行报错:org.testng.TestNGException: Cannot find class in classpath

    org.testng.TestNGException: Cannot find class in classpath 解决办法:project->clean 再次执行正常运行  

  9. HBase伪分布式安装及简单使用

    HBase是Hadoop的数据库,基于Hadoop执行.是一种NoSQL数据库. 特点:分布式.多版本号.面向列的存储模型.可以大规模的数据实时随机读写,可直接使用本地文件系统. 不适合:与关系型数据 ...

  10. apt-update 更新失败 (无法连接到ubuntu服务器)

    解决方法: 找一个可以更新的系统,拷贝里面的sources.list文件,并将原系统的sources.list进行备份.