Python发送邮件测试报告操作实例详解

本文实例讲述了Python发送邮件测试报告操作。分享给大家供大家参考,具体如下:

发邮件需要用到python两个模块,smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib模块主要负责发送邮件,email模块主要负责构造邮件。其中MIMEText()定义邮件正文,Header()定义邮件标题。MIMEMulipart模块构造带附件

发送HTML格式的邮件:

send_email_html.py

import smtplib
from email.mime.text import MIMEText    #MIMEText()定义邮件正文
from email.header import Header      #Header()定义邮件标题
#发送邮箱服务器
smtpserver = 'smtp.sina.com'
#发送邮箱用户/密码(登录邮箱操作)
user = "username@sina.com"
password = "password"
#发送邮箱
sender = "username@sina.com"
#接收邮箱
receiver = "8888@qq.com"
#发送主题
subject = 'email by python'
#编写HTML类型的邮件正文(把HTML代码写进入)
msg = MIMEText('<html><body><a href="">百度一下</a></p></body></html>','html','utf-8')
msg['Subject'] = Header(subject,'utf-8')
#连接发送邮件(smtplib模块基本使用格式)
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(user,password)
smtp.sendmail(sender,receiver,msg.as_string())
smtp.quit()

说明:

smtplib.SMTP():实例化SMTP()
connect(host,port):
host:指定连接的邮箱服务器。
port:指定连接服务器的端口号,默认为25.
login(user,password):user:登录邮箱的用户名。password:登录邮箱的密码。
sendmail(from_addr,to_addrs,msg,...)
from_addr:邮件发送者地址
to_addrs:邮件接收者地址。字符串列表['接收地址1','接收地址2','接收地址3',...]或'接收地址'
msg:发送消息:邮件内容。一般是msg.as_string()as_string()是将msg(MIMEText对象或者MIMEMultipart对象)变为str。
quit():用于结束SMTP会话。

发送带附件的邮件

send_email_file.py

import smtplib
from email.mime.text import MIMEText      #MIMRText()定义邮件正文
from email.mime.multipart import MIMEMultipart #MIMEMulipart模块构造带附件
#发送邮件的服务器
smtpserver = 'smtp.sina.com'
#发送邮件用户和密码
user ="xxx@sina.com"
password = "xxx"
#发送者
sender = "xxx@sina.com"
#接收者
receiver = "1xxx@qq.com"
#邮件主题
subject = "附件的邮件"
#发送附件
sendfile = open("C:\\Users\\Administrator\\Desktop\\html5.txt","r").read()
att = MIMEText(sendfile,"base64","utf-8")
att["Content-Type"] = "application/octet-stream"
att["Content-Disposition"] = "attachment;filename = 'html5.txt'"
msgRoot = MIMEMultipart('related')
msgRoot['Subject'] = subject
msgRoot.attach(att)
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(user,password)
smtp.sendmail(sender,receiver,msgRoot.as_string())
smtp.quit()

查找最新的测试报告

find_file.py

import os
#定义文件目录
result_dir = "E:\\自动化测试项目\\子项目_bbs\\report"
lists = os.listdir(result_dir) #获取该目录下的所有文件、文件夹,保存为列表
#对目录下的文件按创建的时间进行排序
lists.sort(key=lambda fn: os.path.getmtime(result_dir + "\\" + fn))
#lists[-1]取到的是最新生成的文件或文件夹
print(('最新的文件是:' + lists[-1]))
file = os.path.join(result_dir,lists[-1])
print(file)

整合自动化测试发送测试报告邮件

from HTMLTestRunner import HTMLTestRunner
from email.mime.text import MIMEText
from email.header import Header
import smtplib
import unittest
import time
import os
#==============定义发送邮件==========
def send_mail(file_new):
  f = open(file_new,'rb')
  mail_body = f.read()
  f.close()
  msg = MIMEText(mail_body,'html','utf-8')
  msg['Subject'] = Header("自动化测试报告",'utf-8')
  smtp = smtplib.SMTP()
  smtp.connect('smtp.sina.com')                   #邮箱服务器
  smtp.login("sender@sina.com","password")              #登录邮箱
  smtp.sendmail("sender@sina.com","receiver@qq.com",msg.as_string()) #发送者和接收者
  smtp.quit()
  print("邮件已发出!注意查收。")
#======查找测试目录,找到最新生成的测试报告文件======
def new_report(test_report):
  lists = os.listdir(test_report)                  #列出目录的下所有文件和文件夹保存到lists
  lists.sort(key=lambda fn:os.path.getmtime(test_report + "\\" + fn))#按时间排序
  file_new = os.path.join(test_report,lists[-1])           #获取最新的文件保存到file_new
  print(file_new)
  return file_new
if __name__ == "__main__":
  test_dir = "测试用例存放目录"
  test_report = "测试报告存放目录"
  discover = unittest.defaultTestLoader.discover(test_dir,
                          pattern = 'test_*.py')
  now = time.strftime("%Y-%m-%d_%H-%M-%S")
  filename = test_report + '\\' + now + 'result.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)   #发送测试报告

1.通过unittest框架的discover()找到匹配的测试用例,由HTMLTestRunner的run()方法执行测试用例并生成最新的测试报告。

2.调用new_report()函数找到测试报告目录下最新生成的测试报告,返回测试报告的路径。

3.将得到的最新测试报告的完整路径传给send_mail()函数,实现发邮件功能。

参考:python自动发送邮件总结

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

(0)

相关推荐

  • 详解Python多线程Selenium跨浏览器测试

    前言 在web测试中,不可避免的一个测试就是浏览器兼容性测试,在没有自动化测试前,我们总是苦逼的在一台或多台机器上安装N种浏览器,然后手工在不同的浏览器上验证主业务流程和关键功能模块功能,以检测不同浏览器或不同版本浏览器上,我们的web应用是否可以正常工作. 下面我们看看怎么利用python selenium进行自动化的跨浏览器测试. 什么是跨浏览器测试 跨浏览器测试是功能测试的一个分支,用以验证web应用能在不同的浏览器上正常工作. 为什么需要跨浏览器测试 通常情况下,我们都期望web类应用

  • python selenium执行所有测试用例并生成报告的方法

    直接上代码. # -*- coding: utf-8 -*- import time import os import os.path import re import unittest import HTMLTestRunner import shutil shutil.copyfile("setting.ini","../setting.ini") casepaths = [] def createsuite(casepath): testunit = unit

  • python自动化报告的输出用例详解

    1.设计简单的用例 2.设计用例 以TestBaiduLinks.py命名 # coding:utf-8 from selenium import webdriver import unittest class BaiduLinks(unittest.TestCase): def setUp(self): base_url = 'https://www.baidu.com' self.driver = webdriver.Chrome() self.driver.implicitly_wait(

  • 如何在python中使用selenium的示例

    最近基于selenium写了一个python小工具,记录下学习记录,自己运行的环境是Ubuntu 14.04.4, Python 2.7,Chromium 49.0,ChromeDriver 2.16 selenium简介 selenium提供了一个通用的接口,可模拟用户来操作浏览器,比如用于自动化测试等. selenium的核心是WebDriver,它提供了一组接口,这些接口能够操作各种跨平台的浏览器.各大浏览器厂商. 各大浏览器厂商也支持Selenium,将其作为浏览器的一部分. selen

  • python自动发送测试报告邮件功能的实现

    自动化发邮件功能也是自动化测试项目中的重要需求之一.在自动化脚本运行完成之后,邮箱就可以收到最新的测试报告结果,把这种主动的且不及时的查看变成被动且及时的查收,就方便多了. 首先我们需要一份漂亮且通俗易懂的测试报告来展示自动化测试成果, HTMLTestRunner 是 python 标准库 unittest 单元测试框架的一个扩展,它生成易于使用的HTML测试报告. 下载地址: http://tungwaiyip.info/software/HTMLTestRunner.html 这个扩展非常

  • python使用 HTMLTestRunner.py生成测试报告

    本文介绍了python使用 HTMLTestRunner.py生成测试报告 ,分享给大家,具体如下: HTMLTestRunner.py python 2版本 下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html 使用时,先建立一个"PyDev Package",将下载下来的HTMLTestRunner.py文件拷贝在该目录下. 例子:testcase5_dynamic.py import unittest from dev.

  • Selenium(Python web测试工具)基本用法详解

    本文实例讲述了Selenium基本用法.分享给大家供大家参考,具体如下: Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等.这个工具的主要功能包括:测试与浏览器的兼容性--测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上.测试系统功能--创建回归测试检验软件功能和用户需求.

  • Python中selenium实现文件上传所有方法整理总结

    文件上传是所有UI自动化测试都要面对的一个头疼问题,今天博主在这里给大家分享下自己处理文件上传的经验,希望能够帮助到广大被文件上传坑住的seleniumer. 首先,我们要区分出上传按钮的种类,大体上可以分为两种,一种是input框,另外一种就比较复杂,通过js.flash等实现,标签非input 我们分别对这两种进行分析: 1.input标签 众所周知,input标签是可以直接send_keys的,这里也不例外,来看代码示例: 代码: # -*- coding: utf-8 -*- from

  • Python发送邮件测试报告操作实例详解

    本文实例讲述了Python发送邮件测试报告操作.分享给大家供大家参考,具体如下: 发邮件需要用到python两个模块,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email模块主要负责构造邮件.其中MIMEText()定义邮件正文,Header()定义邮件标题.MIMEMulipart模块构造带附件 发送HTML格式的邮件: send_email_html.py import smtplib from email.mim

  • Python复制文件操作实例详解

    本文实例讲述了Python复制文件操作用法.分享给大家供大家参考,具体如下: 这里用python实现了一个小型的自动发版本的工具.这个"自动发版本"有点虚, 只是简单地把debug 目录下的配置文件复制到指定目录,把Release下的生成文件复制到同一指定,过滤掉不需要的文件夹(.svn),然后再往这个指定目录添加几个特定的文件. 这个是我的第一个python小程序. 下面就来看其代码的实现. 首先插入必要的库: import os import os.path import shut

  • Python 文件读写操作实例详解

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法.1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()2.返回指定目录下的所有文件和目录名:os.listdir()3.函数用来删除一个文件:os.remove()4.删除多个目录:os.removedirs(r"c:\python")5.检验给出的路径是否是一个文件:os.path.isfile()6.检验给出的路径是否是一个目录:os.path.isdir()7.判断是

  • Python csv文件的读写操作实例详解

    这篇文章主要介绍了Python csv文件的读写操作实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python内置了csv模块,用它可以方便的操作csv文件. 1.写文件 (1)写文件的方法一 import csv # open 打开文件有多种模式,下面是常见的4种 # r:读数据,默认模式 # w:写数据,如果已有数据则会先清空 # a:向文件末尾追加数据 # x : 写数据,如果文件已存在则失败 # 第2至4种模式如果第一个参数指

  • Python 迭代器与生成器实例详解

    Python 迭代器与生成器实例详解 一.如何实现可迭代对象和迭代器对象 1.由可迭代对象得到迭代器对象 例如l就是可迭代对象,iter(l)是迭代器对象 In [1]: l = [1,2,3,4] In [2]: l.__iter__ Out[2]: <method-wrapper '__iter__' of list object at 0x000000000426C7C8> In [3]: t = iter(l) In [4]: t.next() Out[4]: 1 In [5]: t.

  • Java中Properties类的操作实例详解

    Java中Properties类的操作实例详解 知识学而不用,就等于没用,到真正用到的时候还得重新再学.最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经好久没用了,而这些模拟器大多用Java来写,外加一些脚本语言Python,Perl之类的,不得已,又得重新拾起.本文通过看<Java编程思想>和一些网友的博客总结而来,只为简单介绍Properties类的相关操作.  一.Java Properties类 Java中有个比较重要的类Properti

  • python模块常用用法实例详解

    1.time模块(※※※※) import time #导入时间模块 print(time.time()) #返回当前时间的时间戳,可用于计算程序运行时间 print(time.localtime()) #返回当地时间的结构化时间格式,参数默认为时间戳 print(time.gmtime) #返回UTC时间的结构化时间格式 print(time.mktime(time.localtime())) #将结构化时间转换为时间戳 print(time.strftime("%Y-%m-%d %X&quo

  • python with (as)语句实例详解

    这篇文章主要介绍了python with (as)语句实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 with语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的"清理"操作,释放资源,比如文件使用后自动关闭.线程中锁的自动获取和释放等. 例1: url = 'http://www.weather.com.cn/' + province + '/index.shtml' with urlopen(url

  • Laravel框架中队列和工作(Queues、Jobs)操作实例详解

    在我们的web应用中,经常会遇到这样的情况: 用户在进行了某项操作后,我们需要在后台完成一个耗时且耗费资源的任务,以对应用户的操作. 通常来说,web应用中的操作都是同步的(synchronous),即用户的操作可以立即得到回馈. 但是在以上情况下,同步等待操作结果将是灾难性的.比如用户点击了申请密码重置邮件,倘若我们让用户一直停滞在等待页面,直至邮件发送成功,那么用户体验将非常地不好,因为有时候可能需要很长的时间才能将邮件发送完成. 从另一个角度来说,如果我们服务器处于高负荷的情况,当多个用户

  • Python 修改CSV文件实例详解

    目录 前言 Python 修改CSV文件 前言 由于 CSV 文件仅仅是简单的文本文件,因此更新 CSV 文件中内容的最佳方式是首先读取文件中的数据,并将它们处理为 Python 内部对象,进行更改,然后以相同的格式覆盖原始数据. Python 修改CSV文件 在本节中,我们将学习如何使用 Python 修改 CSV 文件中的数据. 假设在CSV文件中有以下数据,其中用户 '1' 对电影 'Star Wars' 的评分有误,其实际评分为 7.9,因此需要修改此文件. User name Movi

随机推荐