python自动发测试报告邮件功能

栏目: 编程工具 · 发布时间: 5年前

内容简介:自动化发邮件功能也是自动化测试项目中的重要需求之一。在自动化脚本运行完成之后,邮箱就可以收到最新的测试报告结果,把这种主动的且不及时的查看变成被动且及时的查收,就方便多了。首先我们需要一份漂亮且通俗易懂的测试报告来展示自动化测试成果,下载地址:

自动化发邮件功能也是自动化测试项目中的重要需求之一。在自动化脚本运行完成之后,邮箱就可以收到最新的测试报告结果,把这种主动的且不及时的查看变成被动且及时的查收,就方便多了。

首先我们需要一份漂亮且通俗易懂的测试报告来展示自动化测试成果, HTMLTestRunnerpython 标准库 unittest 单元测试框架的一个扩展,它生成易于使用的HTML测试报告。

下载地址: http://tungwaiyip.info/software/HTMLTestRunner.html

这个扩展非常简单,只有一个.py文件,选中后直接下载到本地即可。安装方法也很简单,将其复制到 python 的安装目录下即可。

windows:将下载的文件保存在../Python35/Lib目录下

Linux(ubuntu):以root身份将HTMLTestRunner.py复制到/usr/local/Python3.7/dist-packages/ 目录下

修改HTMLTestRunner

#第 94 行 import StringIo 修改为: import io
#第 539 行 self.outputBuffer=StringIO.StringIO() 修改为: self.outputBuffer=io.StringIO()
#第 631 行 print >>sys.stderr, 'nTime Elapsed: %s' % (self.stopTime-self.startTime) 修改为: print(sys.stderr, 'nTime Elapsed: %s' % (self.stopTime-self.startTime))
#第 642 行 if not rmap.has_key(cls): 修改为: if not cls in rmap:
#第 766 行 uo=o.decode('latin-1') 修改为: uo=o
#第 772 行 ue=e.decode('latin-1') 修改为: ue=e

生成HTML测试报告

from selenium import webdriver
import unittest
from HTMLTestRunner import HTMLTestRunner

class Baidu(unittest.TestCase):
    def setUp(self):
        self.driver=webdriver.Firefox()
        self.driver.implicitly_wait(10)
        self.base_url="https://www.baidu.com"
    
    def test_baidu_search(self):
        driver=self.driver
        driver.get(self.base_url)
        driver.find_element_by_id("kw").send_keys("HTMLTestRunner")
        driver.find_element_by_id("su").click()

    def tearDown(self):
        self.driver.quit()

if __name__=="__main__":

    testunit=unittest.TestSuite()
    testunit.addTest(Baidu("test_baidu_search"))

    #定义报告存放路径
    fp=open('./result.html','wb')
    #定义测试报告
    runner=HTMLTestRunner(
        stream=fp,
        title='百度搜索测试报告',
        description='用例执行情况:'
    )
    runner.run(testunit) # 运行测试用例
    fp.close() # 关闭报告文件

代码分析

首先,将HTMLTestRunner模块用import导入进来

其次,通过open()方法以二进制写模式打开当前目录下的result.html,如果没有,则自动创建该文件。

接着,调用HTMLTestRunner模块下的HTMLTestRunner类。stream指定测试报告文件,title用于定义测试报告的标题,description用于定义测试报告的副标题。

最后,通过HTMLTestRunner的run()方法来运行测试套件中所组装的测试用例。最后通过close()关闭测试报告文件。

python自动发测试报告邮件功能

自动发邮件

import smtplib
from email.mime.text import MIMEText
from email.header import Header
#发送邮箱服务器
smtpserver='smtp.**.com'
#发送邮箱用户/密码
user='********@**.com'
password='********'(授权码)
#发送邮箱
sender='********@**.com'
#接收邮箱
receiver='*******@**.com'
#发送邮件主题
subject='python email'
#编写html类型的邮件正文
msg=MIMEText('<HTML><H1>你好</H1></HTML>','html','utf8')
msg['Subject']=Header(subject,'utf-8')
#连接发送邮件
smtp=smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(user,password)
smtp.sendmail(sender,receiver,msg.as_string())
smtp.quit()

发送带附件的邮件

import smtplib
from email.mime.text import MIMEText
from email.header import Header
#发送邮箱服务器
smtpserver='smtp.**.com'
#发送邮箱用户/密码
user='********@**.com'
password='********'(授权码)
#发送邮箱
sender='********@**.com'
#接收邮箱
receiver='*******@**.com'
#发送邮件主题
subject='python email'

#发送的附件
sendfile=open('D:\\test.txt','rb').read()

att=MIMEText(sendfile,'base64','utf-8')
att["Content-Type"]='application/octet-stram'
att["content-Disposition"]='attachment;filename="test.txt"'

msgRoot=MIMEMultipart('related')
msgRoot['Subject']=subject
msgRoot.attach(att)

#连接发送邮件
smtp=smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(user,password)
smtp.sendmail(sender,receiver,msg.as_string())
smtp.quit()

整合自动发邮件功能

解决了前面的问题后,现在就可以将自动发邮件功能集成到自动化测试项目中了。

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.text import MIMEText
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("******.com")
    smtp.login(****@**.com,*******)
    smtp.sendmail(****@**.com,****@**.com,msg.as_string())
    smtp.quit()
    print('email has send out !')

#查找测试报告目录,找到最新生成的测试报告文件
def new_report(testreport):
    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_now

if __name__=='__main__':
    test_dir='D:\\testpro\\test_case'
    test_report='D:\\testpro\\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)

整个程序的执行过程可以分为三个步骤:

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

以上所述就是小编给大家介绍的《python自动发测试报告邮件功能》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

颠覆暴利

颠覆暴利

曾德超、张志前 / 2015-4-1 / 58

本书从金融人士的视角研究互联网时代的金融创新,全面系统地介绍了我国互联网金融的产生背景及原因,梳理了互联网金融的基本理论,分析了互联网金融的各种业态和运营模式,介绍了互联网企业和金融企业的应对策略。本书还对互联网金融存在的风险和监管进行了研究,对互联网金融未来的发展前景进行了展望。本书是学习研究互联网金融不可多得的一本参考书。一起来看看 《颠覆暴利》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具