简介

  前边几篇,已经教小伙伴们掌握了如何生成HTML的测试报告,那么生成测试报告,我们也不能放在那里不管了,这样即使你报告在漂亮,领导也看不到。因此如果想向领导汇报工作,不仅需要提供更直观的测试报告。而是我们需要将生

成测试报告发个相关的负责人,需要他们看一下测试结果,把控一下项目的接口有风险,会不会影响项目进度等等一些事吧。

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

大致思路流程

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

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

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

4、第一步,前边几篇,我们都详细介绍了,所以这篇就不在赘述了,直接从第二步、第三步开始讲解。

查找最新测试报告

定义发送邮件

1、查看一下,源码如下:

2、仿照源码进行改造

参考代码

# coding=utf-
#.先设置编码,utf-8可支持中英文,如上,一般放在第一行 #.注释:包括记录创建时间,创建人,项目名称。
'''
Created on --
@author: 北京-宏哥
Project:学习和使用将测试报告通过邮件发出去
'''
#.导入unittest模块
import unittest
import os
from email.mime.text import MIMEText
from email.header import Header
import smtplib
#.编写测试用例和断言
def all_case():
# 待执行用例的目录
#case_dir = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\case"
case_dir = os.path.join(os.getcwd(), "case")
testcase = unittest.TestSuite()
discover = unittest.defaultTestLoader.discover(case_dir,
pattern="test*.py",
top_level_dir=None)
# #discover方法筛选出用例,循环添加到测试套件中
# for test_suit in discover:
# for test_case in test_suit:
# #添加用力到testcase
# testcase.addTests(test_case)
# print(testcase) testcase.addTests(discover) # 直接加载 discover 可以兼容python2和3
print(testcase)
return testcase # ==============定义发送邮件==========
def send_mail(file_new):
f = open(file_new, 'rb')
mail_body = f.read()
f.close() username = 'nXXply@ceXXx.cn' #发件箱用户名
password = 'XXX@@123' #发件箱密码
sender = 'noXXy@ceXXx.cn' #发件人邮箱
receiver = ['hongge@XXX.cn'] #收件人邮箱
# 邮件正文是MIMEText
msg = MIMEText(mail_body, 'html', 'utf-8')
# 邮件对象
msg['Subject'] = Header("自动化测试报告", 'utf-8').encode()
msg['From'] = Header(u'测试机 <%s>'%sender)
msg['To'] = Header(u'测试负责人 <%s>'%receiver)
msg['date'] = time.strftime("%a,%d %b %Y %H:%M:%S %z")
#发送邮件
smtp = smtplib.SMTP()
smtp.connect('smtp.mxhichina.com') # 邮箱服务器
smtp.login(username, password) # 登录邮箱
smtp.sendmail(sender, receiver, 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[-]) # 获取最新的文件保存到file_new
print(file_new)
return file_new if __name__ == "__main__":
# 返回实例
runner = unittest.TextTestRunner()
#导入第三方模块HTMLTestRunner
import HTMLTestReportCN
import time
# 获取当前时间,这样便于下面的使用。
now = time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time()))
#保存生成报告的路径
report_path = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\"+now+"_result.html"
fp = open(report_path,'wb')
runner = HTMLTestReportCN.HTMLTestRunner(stream=fp,
title=u"这是我的自动化测试用例",
description=u"用例执行情况",
verbosity =
)
# run 所有用例
runner.run(all_case())
#关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄数。
fp.close()
#测试报告文件夹
test_path = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\"
new_report = new_report(test_path)
send_mail(new_report) # 发送测试报告

小结

1、遇到的问题及解决方法

(1)将生成的测试报告的保存路径和查找测试报告的路径混淆会报如下错误

(2)解决方法

a、我们先来分析一下原因,刚开始我查了资料还觉得是不是数组越界,后来感觉不对,就复制粘贴到我的电脑报如下错误,确实找不到

b、接着Ctrl+R复制进去,运行出现如下这是才知道查找最新的测试报告遍历的根本不是一个目录而是一个文件

c、解决办法不是文件夹修改成测试报告的文件夹是不是就可以,做如下简单地修改就可以了

d、完了把test_path拷贝在我电脑和运行处,两个界面一样分别定位到测试报告。这样就可以遍历,这是不用试 一定可以成功分别如下:

我的电脑

运行

e、代码运行结果

f、到收件箱可以看到测试报告

2、发送的邮件看不到发件人和收件人,如图

a、解决办法:

加两行代码即可

b、再次运行收到邮件

python接口自动化(二十九)--html测试报告通过邮件发出去——上(详解)的更多相关文章

  1. python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)

    简介 上一篇,我们虽然已经将生成的最新的测试报告发出去了,但是MIMEText 只能发送正文,无法带附件,因此我还需要继续改造我们的代码,实现可以发送带有附件的邮件.发送带附件的需要导入另外一个模块 ...

  2. python接口自动化(十九)--Json 数据处理---实战(详解)

    简介 上一篇说了关于json数据处理,是为了断言方便,这篇就带各位小伙伴实战一下.首先捋一下思路,然后根据思路一步一步的去实现和实战,不要一开始就盲目的动手和无头苍蝇一样到处乱撞,撞得头破血流后而放弃 ...

  3. python接口自动化测试二十九:yaml配置文件的写和读

    # 先安装ruamel.yaml模块 写入配置文件: import os# 先安装ruamel.yaml模块from ruamel import yaml # 将字典写入到yamldict = { ' ...

  4. “全栈2019”Java第六十九章:内部类访问外部类成员详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...

  6. python接口自动化测试二十五:执行所有用例,并生成HTML测试报告

        import requestsimport unittest class TestQQ(unittest.TestCase):    '''测试QQ号接口'''      # 此注释将展示到测 ...

  7. Jmeter(二十) - 从入门到精通 - JMeter监听器 -下篇(详解教程)

    1.简介 监听器用来监听及显示JMeter取样器测试结果,能够以树.表及图形形式显示测试结果,也可以以文件方式保存测试结果,JMeter测试结果文件格式多样,比如XML格式.CSV格式.默认情况下,测 ...

  8. python接口自动化(十二)--https请求(SSL)(详解)

    简介 本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会 报:requests.exceptions.SSLError: [ ...

  9. python接口自动化(二十六)--批量执行用例 discover(详解)

    简介 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到 unittest 里面的 discover 方法来加载用例了.加载用例后,用 unittest 里 ...

随机推荐

  1. 自定义LISTBOX内子项为checkbox或者radio时,关于IsChecked绑定

    IsChecked="{Binding IsSelected, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}&q ...

  2. Selenium 获取动态js的网页

    Selenium基于webkit实现爬虫功能 http://www.cnblogs.com/luxiaojun/p/6144748.html https://www.cnblogs.com/chenq ...

  3. Resolve conflict using "MERGE_HEAD (origin/HEAD)"

    Git进行同步的时候,经常会出现冲突,有时候冲突的选项会有图示中的三种选项: 1.Resolved:直接把文件标识为冲突已经解决,一般是自己手动查看并解决完冲突以后使用. 2.Resolve conf ...

  4. Android零基础入门第30节:两分钟掌握FrameLayout帧布局

    原文:Android零基础入门第30节:两分钟掌握FrameLayout帧布局 前面学习了线性布局.相对布局.表格布局,那么本期来学习第四种布局--FrameLayout帧布局. 一.认识FrameL ...

  5. WPF应用程序如何重启当前的Application

    // Restart current process Method 1 System.Windows.Forms.Application.Restart(); Application.Current. ...

  6. 动态链接库(Dynamic Link Library)学习笔记(附PE文件分析)

    转载:http://www.cnblogs.com/yxin1322/archive/2008/03/08/donamiclinklibrary.html 作者:EricYou 转载请注明出处   注 ...

  7. Layui 是一款采用自身模块规范编写的国产前端UI框架(5600个Star)

    采用自身模块规范编写的前端UI框架,遵循原生HTML/CSS/JS的书写形式,极低门槛,拿来即用. http://www.layui.com Layui 是一款采用自身模块规范编写的国产前端UI框架, ...

  8. .net core 2.0 dbfirst 报 dotnet ef 未找到与命令“dotnet-ef”匹配的可执行文件的解决办法

    问题描述: 最近研究了一段时间.netcore dbfirst,新建类库用来生成实体模型,执行命令总是提示 未找到与命令“dotnet-ef”匹配的可执行文件,根据网上的解决办法引用 Microsof ...

  9. Nio编程模型总结

    终于,这两天的考试熬过去了, 兴致冲冲的来整理笔记来, 这篇博客是我近几天的NIO印象笔记汇总,记录了对Selector及Selector的重要参数的理解,对Channel的理解,常见的Channel ...

  10. Netty源码分析--创建Channel(三)

    恩~,没错,其实这一篇才是真正的开始分析源码,你打我呀~. 先看一下我Netty的启动类 private void start() throws Exception { EventLoopGroup ...