一下代码是自己结合教材,并结合以往用到的实例编写的代码,可以做为参考

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from HTMLTestRunner import HTMLTestRunner
from email.header import Header
import unittest
import time,os #==============定义发送邮件 =============== def send_mail(file_new):
f = open(file_new,'rb')
#读取测试报告正文
mail_body = f.read()
f.close()
# 发送邮箱服务器
smtpserver = "smtp.163.com"
# 发件人邮箱
sender = 'qwe_test@163.com'
# 接收人邮箱
receiver = 'qwe@163.com'
# 发送邮箱用户信息
username = 'qwe@163.com'
# 客户端授权码
password = 'qweqw18' #通过 模块构造的带附件的邮件如图
msg = MIMEMultipart()
#编写html类型的邮件正文,MIMEtext()用于定义邮件正文
#发送正文
text = MIMEText(mail_body, 'html', 'utf-8')
text['Subject'] = Header('自动化测试报告', 'utf-8')
msg.attach(text)
#发送附件
#Header()用于定义邮件标题
msg['Subject'] = Header('自动化测试报告', 'utf-8')
msg_file = MIMEText(mail_body, 'html', 'utf-8')
msg_file['Content-Type'] = 'application/octet-stream'
msg_file["Content-Disposition"] = 'attachment; filename="TestReport.html"'
msg.attach(msg_file) # 如果只发正文的话,上面的代码 从password 下面到这段注释上面
# 全部替换为下面的两行代码即可,上面的代码是增加了发送附件的功能。
# text = MIMEText(mail_body, 'html', 'utf-8')
# text['Subject'] = Header('自动化测试报告', 'utf-8') #连接发送邮件
# smtp = smtplib.SMTP()
# smtp.connect(smtpserver)
# smtp.login(username, password)
# smtp.sendmail('qwet@163.com', 'qewq@163.com', msg.as_string())
# smtp.quit()
# print("email has send out !") #一样的逻辑,不一样的写法导致上面的发送失败,下面这种发送成功,所以要使用msg['from']这种写法
msg['from'] = 'qweqt@163.com' # 发送邮件的人
msg['to'] = 'q10@163.com'
# smtp = smtplib.SMTP('smtp.163.com', 25) # 连接服务器
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
smtp.login(username, password) # 登录的用户名和密码
smtp.sendmail(msg['from'], msg['to'], msg.as_string()) # 发送邮件
smtp.quit()
print('sendmail success') #======================查找最新的测试报告========================== def new_report(testreport):
#方式1:
# lists = os.listdir(testreport)
# lists.sort(key = lambda fn: os.path.getmtime(testreport + '\\' + fn))
# file_new = os.path.join(testreport,lists[-1])
# print(file_new)
# return file_new #方式2:
dirs = os.listdir(testreport)
dirs.sort()
newreportname = dirs[-1]
print('The new report name: {0}'.format(newreportname))
file_new = os.path.join(testreport, newreportname)
return file_new if __name__ == '__main__':
test_dir = os.path.join(os.getcwd(),'test_case')
#test_report = "D:/SProgram/PySpace/wmq/SendHtmlMail/report"
test_report = os.path.join(os.getcwd(), 'report')
discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py') now = time.strftime("%Y-%m-%d-%H_%M_%S")
filename = test_report+'/result_'+now+'.html'
fp = open(filename,'wb')
runner = HTMLTestRunner(stream=fp,title="测试报告",description='用例执行情况:')
runner.run(discover)
fp.close() new_report = new_report(test_report)
send_mail(new_report)

Python + HTMLTestRunner + smtplib 完成测试报告生成及发送测试报告邮件的更多相关文章

  1. web端自动化——selenium测试报告生成、找到测试报告路径、实现发邮件(整合)

    有这样的一个场景: 假设生成的测试报告与多人相关,每个人都去测试服务器査看就会比较麻烦,如果把这种主动的且不及时的査看变成被动且及时的査收,就方便多了. 整个程序的执行过程可以分为三个步骤: ①    ...

  2. 基于python语言的自动化测试中生成html的测试报告时HtmlTestRunner模块常见问题

    一.导入了HTMLTestRunner模块,报错:No module named StringIO,在python3.x中确实没有,在第94行引入的名称改成import io,539行要改成self. ...

  3. python3修改HTMLTestRunner,生成有截图的测试报告,并发送测试邮件(二)

    3. 如何将第一步得到的地址和名称 输入 进第二步里的表格中呢... 用上述查找元素的方法,发现HTMLTestRunner.py中REPORT_TEST_WITH_OUTPUT_TMPL是用来输出测 ...

  4. Python单元测试框架unittest之生成测试报告(HTMLTestRunner)

    前言 批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的. unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLT ...

  5. Python+unittest发送测试报告

    案例:将E:\Python_script\unittest\Test_Baidu生成的最新测试报告发送到指定邮箱. 我们将之前的unittest的报告生成和Python自动发送邮件结合在一起,就可以完 ...

  6. Python+request+ smtplib 测试结果html报告邮件发送(下)《六》

    目录结构如下: 1.cfg.ini的配置信息写法如下: [email] ;--------------------------使用腾讯企业邮箱作为发件人的操作如下------------------- ...

  7. 记录python接口自动化测试--利用unittest生成测试报告(第四目)

    前面介绍了是用unittest管理测试用例,这次看看如何生成html格式的测试报告 生成html格式的测试报告需要用到 HTMLTestRunner,在网上下载了一个HTMLTestRunner.py ...

  8. python - HTMLTestRunner 测试报告模板设置

    python - HTMLTestRunner 测试报告模板设置 优化模板下载地址: http://download.csdn.net/download/chinayyj2010/10039097   ...

  9. python运维开发常用模块(6)发送电子邮件模块smtplib

    1.模块常用方法 SMTP类定义:smtplib.SMTP([host[,port[,local_hostname[, timeout]]]]),作为SMTP的构造函数,功能是与smtp服务器建立连接 ...

随机推荐

  1. 在linux下使用debugfs恢复rm删除的文件

    原理主要是删除的文件并没有实际上从硬盘上摸去,只是inode索引删除了相关的信息,因此只要找到刚删除文件的block上,就可以恢复已经删除的文件. 以下方法在ext3的文件系统上测试通过,ext2的没 ...

  2. 【框架】Spring和dubbox

    分布式服务框架 dubbo/dubbox 入门示例 https://www.cnblogs.com/yjmyzz/p/dubbox-demo.html 初识Spring Boot框架 https:// ...

  3. MySQL 复合索引

    一. 1.索引越少越好,在修改数据时,第个索引都要进行更新,降低写速度.2.最窄的字段放在键的左边3.避免file sort排序,临时表和表扫描. 二.复合索引的建立原则: 如果您很可能仅对一个列多次 ...

  4. Spring Boot @ControllerAdvice+@ExceptionHandler处理controller异常

    需求: 1.spring boot 项目restful 风格统一放回json 2.不在controller写try catch代码块简洁controller层 3.对异常做统一处理,同时处理@Vali ...

  5. iOS学习之UITableView中Cell的操作

    接着iOS学习之Table View的简单使用 这篇,这里主要讲UITableView 中的Cell的操作,包括标记.移动.删除.插入. 为了简单快捷,直接从原来那篇的代码开始,代码下载地址:http ...

  6. shell编程——日志输出的同时显屏

    在执行脚本的时候我们常常需要将执行过程全部输出到日志里,以备出现报错时可以跟踪分析,开始我用的是exec: exec 1>info.log #把全部执行过程输出到info日志中 exec 2&g ...

  7. C#发送和接受POST请求

    1.发送Post请求代码 /// <summary> /// 发起Http请求 /// </summary> /// <param name="flightDa ...

  8. 前端开发之CSS入门篇

    一.CSS介绍和语法 二.CSS引入方式 三.基本选择器 四.高级选择器 五.伪类选择器 六.伪元素选择器 1️⃣  CSS介绍和语法 1. CSS的介绍 (1)为什么需要CSS? 使用css的目的就 ...

  9. Java Socket编程之UDP

    UDP编程: 将要传输的数据定义成数据包(Datagram),在数据报中指明所要到达的Socket(主机地址和端口号),然后再将数据报发送出去. 相关操作类:     DatagramPacket   ...

  10. java算法 第七届 蓝桥杯B组(题+答案) 7.剪邮票

    7.剪邮票  (结果填空) 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红 ...