python接口自动化(二十九)--html测试报告通过邮件发出去——上(详解)
简介
前边几篇,已经教小伙伴们掌握了如何生成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测试报告通过邮件发出去——上(详解)的更多相关文章
- python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)
简介 上一篇,我们虽然已经将生成的最新的测试报告发出去了,但是MIMEText 只能发送正文,无法带附件,因此我还需要继续改造我们的代码,实现可以发送带有附件的邮件.发送带附件的需要导入另外一个模块 ...
- python接口自动化(十九)--Json 数据处理---实战(详解)
简介 上一篇说了关于json数据处理,是为了断言方便,这篇就带各位小伙伴实战一下.首先捋一下思路,然后根据思路一步一步的去实现和实战,不要一开始就盲目的动手和无头苍蝇一样到处乱撞,撞得头破血流后而放弃 ...
- python接口自动化测试二十九:yaml配置文件的写和读
# 先安装ruamel.yaml模块 写入配置文件: import os# 先安装ruamel.yaml模块from ruamel import yaml # 将字典写入到yamldict = { ' ...
- “全栈2019”Java第六十九章:内部类访问外部类成员详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- python接口自动化(十)--post请求四种传送正文方式(详解)
简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...
- python接口自动化测试二十五:执行所有用例,并生成HTML测试报告
import requestsimport unittest class TestQQ(unittest.TestCase): '''测试QQ号接口''' # 此注释将展示到测 ...
- Jmeter(二十) - 从入门到精通 - JMeter监听器 -下篇(详解教程)
1.简介 监听器用来监听及显示JMeter取样器测试结果,能够以树.表及图形形式显示测试结果,也可以以文件方式保存测试结果,JMeter测试结果文件格式多样,比如XML格式.CSV格式.默认情况下,测 ...
- python接口自动化(十二)--https请求(SSL)(详解)
简介 本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会 报:requests.exceptions.SSLError: [ ...
- python接口自动化(二十六)--批量执行用例 discover(详解)
简介 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到 unittest 里面的 discover 方法来加载用例了.加载用例后,用 unittest 里 ...
随机推荐
- Delphi跨平台Socket通讯库
盒子中的souledge大侠发布了新的Socket库,以下为原文: 我之前写过一个iocp的框架,放到googlecode上了. 由于当时的delphi版本尚无法跨平台,所以该框架只能运行在Windo ...
- 动态lambda 构建
var param = Expression.Parameter(typeof(T)); var datetime1 = Expression.Constant(dt1); var datetime2 ...
- UwpDesktop!WPF也能开发Surface Dial
原文:UwpDesktop!WPF也能开发Surface Dial 前段时间巨硬发布了一款新的输入设备Surface Dial,配合Surface Studio使用简直炫酷到没朋友. 本人由于公司业务 ...
- Qt程序打包发布方法(使用官方提供的windeployqt工具)
Qt程序打包发布方法(使用官方提供的windeployqt工具) 转自:http://tieba.baidu.com/p/3730103947?qq-pf-to=pcqq.group Qt 官方开发环 ...
- Python标准库(3.x): itertools库扫盲
itertools functions accumulate() compress() groupby() starmap() chain() count() islice() takewhile() ...
- 【Git】生成Patch和使用Patch
1.生成Patch(俗称快照) 先来看看repo manifest 的用法 <1>cd /工作目录/项目目录/.repo/manifests <2>repo manifest ...
- EPPlus导出两千万行记录到xlsx的c#代码
private void button5_Click(object sender, EventArgs e) { Stopwatch watch = new Stopwatch(); Backgrou ...
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0” 解决方法
今日写一个浏览Excel文件的代码,忽然发现提示如下错误,表示很惊讶,因为我的另外一台电脑不会,但是这台就包这个异常. 解决方法: 去http://download.microsoft.com/dow ...
- android 录屏
录屏,google了一下,记录下来,以免FQ android 4.4 录屏可通过adb:adb shell screenrecord /sdcard/video.mp4 (未测试) android 5 ...
- Android零基础入门第20节:CheckBox和RadioButton使用大全
原文:Android零基础入门第20节:CheckBox和RadioButton使用大全 本期先来学习Button的两个子控件,无论是单选还是复选,在实际开发中都是使用的较多的控件,相信通过本期的学习 ...