unittest+HtmlTestRunner+python接口自动化测试:用例失败发送邮件
一点啰嗦:发送邮件python中有另一个支持的第三方库yagmail更轻量级,代码参考可移步至此:https://www.cnblogs.com/princessironfan/p/13220601.html
1.封装邮件发送模块,如下:
emailUtil.py
'''
email模块负责构造邮件内容
smtplib模块负责发送邮件
'''
import datetime
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
from email.header import Header from common.logger_handler import file_logger class sendEmail():
MAILHOST = "smtp.qq.com"
MAILUSER = "XXXX@qq.com"
MAILPWD = "授权码" def __init__(self, subject, content, reveiver, attachPath=""):
"""
:param subject: 邮件主题
:param content: 邮件正文
:param reveiver: 收件人
:param attachPath: 测试报告的路径
"""
self.subject = subject
self.content = content
self.receiver = reveiver
self.attachPath = attachPath # 写邮件,返回msg.as_string()
def writeEmail(self):
msg = MIMEMultipart()
# 邮件正文
msg.attach(MIMEText(self.content, 'plain', 'utf8'))
receiverName = ",".join(self.receiver)
msg['from'] = Header(self.MAILUSER, 'utf-8')
# msg['to'] = Header(",".join(self.receiver)).encode()
msg['to'] = Header(receiverName).encode()
# 邮件主题
msg['Subject'] = Header(self.subject, 'utf-8').encode()
# print("msg is:",msg)
# attachPath不为空则添加附件到邮件中
if self.attachPath != "":
with open(self.attachPath, 'rb') as f:
attach1 = MIMEText(f.read(), 'base64', 'utf-8')
attach1["Content-Type"] = 'application/octet-stream'
# filename自己命名
now_time = datetime.datetime.now().strftime('%Y_%m_%d %H_%M_%S')
attach1["Content-Disposition"] = 'attachment; filename="apiReport_{}.html"'.format(now_time)
msg.attach(attach1) return msg.as_string() # 发送邮件
def sendEmail(self):
receiver = ";".join(self.receiver)
try:
# 连接邮件服务器
server = smtplib.SMTP()
server.connect(self.MAILHOST, 25)
# 打开debug模式可以看到握手过程
# server.set_debuglevel(1)
# 登录,MAILPWD为邮件的授权码
server.login(self.MAILUSER, self.MAILPWD)
# 发送邮件
server.sendmail(self.MAILUSER, receiver, self.writeEmail())
server.quit()
file_logger.warning("Email send sucess.")
except Exception as e:
file_logger.warning("Email send fail.")
file_logger.warning(e)
2. 运行测试用例模块代码:
run_test.py
from common.config_path import config_path
from libs import HTMLTestRunnerNew
import unittest def all_ceses_suite():
test_loader = unittest.TestLoader() # 初始化
suite = test_loader.discover(config_path.cases_data) # 测试用例加载
return suite class SendEmail:
def __init__(self, module, email="null"):
self.module = module
self.email = email def send_to(self):
now_time = datetime.datetime.now().strftime('%Y_%m_%d %H_%M_%S') # 获取当前时间
file_path = os.path.join(config_path.report_path, "ApiReport_{}.html".format(now_time)) # 存放测试报告的文件夹
with open(file_path, "wb") as f:
runner = HTMLTestRunnerNew.HTMLTestRunner(f, verbosity=2,
title="接口自动化测试报告")
result = runner.run(self.module) totalNums = self.module.countTestCases()
passedNums = result.success_count
failedNums = result.failure_count
errorNums = result.error_count
skippedNums = len(result.skipped)
# 通过率,保留两位小数
passRate = round(passedNums * 100 / totalNums) print("本次构建一共运行:{}个用例,通过{}个,失败{}个,错误{}个,跳过{}个。通过率:{}%".format(totalNums, passedNums, failedNums, errorNums,
skippedNums, passRate))
if passRate != 100:
get_receiver=['xxxx@qq.com','xxxx@qq.com']
emailBody = "\n \t本次构建一共运行:{totalNums}个用例,通过{passedNums}个,失败{failedNums}个,错误{errorNums}个,跳过{skippedNums}个。通过率:{" \
"passRate}%.\n \t详细信息请查看附件。 "
content = emailBody.format(totalNums=totalNums, passedNums=passedNums, failedNums=failedNums,
errorNums=errorNums,
skippedNums=skippedNums, passRate=passRate)
subject = "接口测试" # 发送邮件 if len(get_receiver) > 0:
for i in get_receiver:
receiver = [i]
e = sendEmail(subject, content, receiver, attachPath=file_path)
e.sendEmail() if __name__ == '__main__':
# 所有用例
all = SendEmail(all_ceses_suite())
all.send_to()
做一棵小草,谁也撼动不了………
unittest+HtmlTestRunner+python接口自动化测试:用例失败发送邮件的更多相关文章
- 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...
- Python接口自动化测试框架实战 从设计到开发
第1章 课程介绍(不要错过)本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用本章重点讲解如何抓app\web的htt ...
- python接口自动化测试二十七:密码MD5加密 ''' MD5加密 ''' # 由于MD5模块在python3中被移除 # 在python3中使用hashlib模块进行md5操作 import hashlib # 待加密信息 str = 'asdas89799,.//plrmf' # 创建md5对象 hl = hashlib.md5() # Tips # 此处必须声明encode # 若写法为
python接口自动化测试二十七:密码MD5加密 ''' MD5加密 '''# 由于MD5模块在python3中被移除# 在python3中使用hashlib模块进行md5操作import has ...
- python接口自动化测试七:获取登录的Cookies
python接口自动化测试七:获取登录的Cookies,并关联到下一个请求 获取登录的cookies:loginCookies = r.cookies 把获取到的cookies传入请求:cooki ...
- Jmeter+ant+Jenkins构建接口自动化测试时构建失败 提示:Fatal Error! 字符引用 "&#原因
Jmeter+ant+Jenkins构建接口自动化测试时构建失败 提示:Fatal Error! 字符引用 "&#原因:接口响应数据中有&#
- 记录python接口自动化测试--利用unittest生成测试报告(第四目)
前面介绍了是用unittest管理测试用例,这次看看如何生成html格式的测试报告 生成html格式的测试报告需要用到 HTMLTestRunner,在网上下载了一个HTMLTestRunner.py ...
- 记录python接口自动化测试--unittest框架基本应用(第二目)
在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...
- Python接口自动化测试概念以及意义
接口定义: 接口普遍有两种意思,一种是API(Application Program Interface),应用编程接口,它是一组定义.程序及协议的集合,通过API接口实现计算机软件之间的相互通信.而 ...
- python 接口自动化测试(三)
1.WriteIni.py import ConfigParser cf = ConfigParser.ConfigParser() cf.add_section("PC_WSDL" ...
随机推荐
- Lesson11——NumPy 位运算
NumPy 教程目录 Lesson11--NumPy 位运算 NumPy "bitwise_" 开头的函数是位运算函数. NumPy 位运算包括以下几个函数: 函数 描述 bitw ...
- 帆软报表(finereport)单元格函数,OP参数
单元格模型:单元格数据和引用:数据类型.实际值与显示值.单元格支持的操作单元格样式:行高列宽.隐藏行列.自动换行.上下标.文字竖排.大文本字段分页时断开.标识说明.格式刷单元格Web属性:web显示. ...
- 04.python语法入门--基本数据类型
# python是一门解释型的.强类型的.动态语言# 一:数字类型# 1.1 整型int:记录人的年龄.等级.号码.个数# age = 18# print(type(age))# 1.2 浮点数 ...
- 在这个插件帮助下,终于用上免费的Https协议外链的图床了
前天,强哥发了一篇推文,讲述了应该如何免费且快速的生成自己的博客网站: 期间也有提到一点就是我们在写博客的时候,因为使用的是Markdown格式的文件,而如果想要Markdown格式的文件在图片上传 ...
- 【曹工杂谈】Mysql-Connector-Java时区问题的一点理解--写入数据库的时间总是晚13小时问题
背景 去年写了一篇"[曹工杂谈]Mysql客户端上,时间为啥和本地差了整整13个小时,就离谱",结果最近还真就用上了. 不是我用上,是组内一位同事,他也是这样:有个服务往数据库in ...
- nginx域名转发
场景1:因服务器限制,所以只对外开放了一个端口,但是需要请求不同的外网环境,所以在中转服务器上用nginx做了一次转发 实现: server { listen 8051; server_name lo ...
- RFC2889错误帧过滤测试----网络测试仪实操
一.简介 RFC 2889为LAN交换设备的基准测试提供了方法学,它将RFC 2544中为网络互联设备基准测试所定义的方法学扩展到了交换设备,提供了交换机转发性能(Forwarding Perform ...
- 国产BI报表工具中低调的优秀“模范生”——思迈特软件Smartbi
首先简单来介绍一下这位低调且优秀的模范生--思迈特软件Smartbi.思迈特Smartbi是企业级商业智能BI和大数据分析品牌,满足用户在企业级报表.数据可视化分析.自助分析平台.数据挖掘建模.AI智 ...
- 如何在github上准确的搜索 项目
1.按名字搜索:in:name 1. 2.in:name wpf stars:>100 2.按 in:readme wpf stars:>100 3.按描述搜索 in:descripti ...
- 【C#程序集】为何.NET Core控制台项目发布后是一个dll文件,而不是exe文件?
因为 .NET Core 的控制台应用默认是生成 dll 文件,而没有对应的 exe 文件.如下图所示,是在VS中编译后生成的结果 图中看到的TestVisualizer.exe 只是一个快捷方式, ...