案例:将E:\Python_script\unittest\Test_Baidu生成的最新测试报告发送到指定邮箱。

我们将之前的unittest的报告生成和Python自动发送邮件结合在一起,就可以完成自动发送最新报告到指定邮箱的操作。

代码示例:

runtest_email.py

import unittest
from BSTestRunner import BSTestRunner
import time
import smtplib # 发送邮件模块
from email.mime.text import MIMEText # 定义邮件内容
from email.header import Header # 定义邮件标题
import os def send_mail(latest_report):
f = open(latest_report, 'rb')
mail_content = f.read()
f.close()
smtpserver = 'smtp.163.com'
# 发送邮箱用户名密码
user = 'nancyrm2018@163.com'
password = '输入自己的密码'
# 发送和接收邮箱
sender = 'nancyrm2018@163.com'
receivers = ['nancyrm2018@126.com', '88886666@qq.com']
# 发送邮件主题和内容
subject = "Web Selenium 自动化测试报告"
# HTML邮件正文
msg = MIMEText(mail_content, 'html', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = sender
msg['To'] = ','.join(receivers) smtp = smtplib.SMTP_SSL(smtpserver, 465)
# HELO 向服务器标识用户身份
smtp.helo(smtpserver)
# 服务器返回结果确认
smtp.ehlo(smtpserver)
# 登录邮箱服务器用户名和密码
smtp.login(user, password) print("Send email start...")
smtp.sendmail(sender, receivers, msg.as_string())
smtp.quit()
print("Email send end!") def latest_report(report_dir):
lists = os.listdir(report_dir)
print(lists)
# 按时间顺序对该目录文件夹下面的文件进行排序
lists.sort(key=lambda fn: os.path.getatime(report_dir + "\\" + fn))
print("The latest report is:" + lists[-1]) file = os.path.join(report_dir, lists[-1])
print(file)
return file if __name__ == '__main__':
report_dir = './test_report'
test_dir = './test_case' discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
now = time.strftime("%Y-%m-%d %H_%M_%S")
report_name = report_dir + '/' + now + 'result.html'
with open(report_name, "wb") as f:
runner = BSTestRunner(stream=f, title='测试报告', description='用例执行情况:')
runner.run(discover)
f.close() # h获取最新测试报告
latest_report = latest_report(report_dir)
# 发送邮件报告
send_mail(latest_report)

代码分析:
可以将代码分为3个部分来理解:

  1. 通过unittest框架的discovery()找到匹配测试用例,由HTMLTestRunner 的run()方法执行测试用例并生成最新的测试报告
  2. 调用new_report()函数找到测试报告目录(test_report)下最新生成的测试报告,返回测试报告的路径
  3. 将得到的最新测试报告的完整路径传给send_mail()函数,实现发邮件功能

代码实现:

 

最新文章

  1. swift的后台编码路
  2. Android -- 关闭AsyncTask(异步任务)
  3. 【Swift学习】Swift编程之旅---Subscripts下标(十六)
  4. perl 从文件里读出变量无法使用解决办法
  5. rds材资收集
  6. Sqoop安装及操作
  7. UITableView加载显示更多内容
  8. NOI全国赛(1998)——围巾裁剪
  9. Nodejs安装后修改全局路径配置
  10. jquery-post get 同步问题
  11. arttemplate与webpack的应用
  12. 19.C++-(=)赋值操作符、智能指针编写(详解)
  13. sql的left join 、right join 、inner join之间的区别
  14. 剑指Offer——笔试题+知识点总结
  15. ELK快速搭建日志平台
  16. Spark排序与去重遇见的问题
  17. 题解-Atcoder_agc005D ~K Perm Counting
  18. python day10 数据库(mysql基础)
  19. Git学习笔记(三)
  20. Sass进阶之路,之二(进阶篇)

热门文章

  1. CI模板中如何引入模板
  2. 后端 node 项目工具集
  3. SpringBoot 2.x (12):整合Elasticsearch
  4. Django分组查询
  5. JS权威指南-概述学习
  6. linux服务器上的jenkins远程触发构建windows server 2012服务器上的jenkins任务
  7. 设置umask
  8. SM2-DE
  9. JS 语言基础
  10. Android学习总结(十四) ———— ListView Item多布局的实现