简介
前边几篇,已经教小伙伴们掌握了如何生成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'测试机 '%sender)
msg['To'] = Header(u'测试负责人 '%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测试报告通过邮件发出去——中(详解)
简介 上一篇,我们虽然已经将生成的最新的测试报告发出去了,但是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 里 ...
随机推荐
干货!IT小伙伴们实用的网站及工具大集合!持续更新!
1.Git 还在担心自己辛辛苦苦写的代码被误删了吗?还在担心自己改错了代码不能挽回吗?还在苦恼于多人开发合作找不到一个好的工具吗?那么用Git就对 了,Git是一个开源的分布式版本控制系统,用以有效. ...
webservice配置
服务端配置:第一步:引用jar包commons-httpclient.jarcommons-logging.jarjdom-10.jarwsdl4j-1.6.1.jarxbean-spring-2.8 ...
2016";百度之星"; - 初赛(Astar Round2B) 1006	中位数计数
思路:统计当前数左边比它小|大 i个人,相应右边就应该是比它大|小i个人 l数组表示左边i个人的方案 r表示右边i个人的方案 数组下标不可能是负数所以要加n //#pragma comment(lin ...
Micosoft.ReportViewer.WebForms v 11.0... 1.0.1
his dll is required for the use of Microsoft's forms based ReportViewer control. This version is to ...
ORA-00376:file x cannot be read at this time
之前出现过机房断电情况,重启数据库后发现出现ORA-00376的错误. 通过查询数据文件状态: SQL> select file_id,online_status from dba_data_f ...
Cocos2d-x 3.2 Lua演示样例 XMLHttpRequestTest(Http网络请求)
Cocos2d-x 3.2 Lua演示样例 XMLHttpRequestTest(Http网络请求) 本篇博客介绍Cocos2d-x 3.2Lua演示样例中的XMLHttpRequestTes ...
素数路(prime)
素数路(prime) 题目描述 已知一个四位的素数,要求每次修改其中的一位,并且要保证修改的结果还是一个素数,还不能出现前导零.你要找到一个修改数最少的方案,得到我们所需要的素数. 例如把1033变到 ...
Linux完全卸载Oracle的操作步骤
卸载步骤如下:1.运行$ORACLE_HOME/bin/localconfig delete2.rm -rf $ORACLE_BASE/*3.rm -f /etc/oraInst.loc etc/or ...
Linux环境下配置maven环境
1.下载安装包并解压 安装包直接去apache官网下载:https://maven.apache.org/download.cgi 将安装包放在自己指定的目录:/home/software/apach ...
Dagger2 单例
解锁Dagger2使用姿势(二) 之带你理解@Scope Dagger2从0基础使用,到单例注入的正确姿势 Android之dagger2的简单运用和详细解读(入门)