一点啰嗦:发送邮件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接口自动化测试:用例失败发送邮件的更多相关文章

  1. 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码

    引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...

  2. Python接口自动化测试框架实战 从设计到开发

    第1章 课程介绍(不要错过)本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用本章重点讲解如何抓app\web的htt ...

  3. 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 ...

  4. python接口自动化测试七:获取登录的Cookies

    python接口自动化测试七:获取登录的Cookies,并关联到下一个请求   获取登录的cookies:loginCookies = r.cookies 把获取到的cookies传入请求:cooki ...

  5. Jmeter+ant+Jenkins构建接口自动化测试时构建失败 提示:Fatal Error! 字符引用 "&#原因

    Jmeter+ant+Jenkins构建接口自动化测试时构建失败 提示:Fatal Error! 字符引用 "&#原因:接口响应数据中有&#

  6. 记录python接口自动化测试--利用unittest生成测试报告(第四目)

    前面介绍了是用unittest管理测试用例,这次看看如何生成html格式的测试报告 生成html格式的测试报告需要用到 HTMLTestRunner,在网上下载了一个HTMLTestRunner.py ...

  7. 记录python接口自动化测试--unittest框架基本应用(第二目)

    在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...

  8. Python接口自动化测试概念以及意义

    接口定义: 接口普遍有两种意思,一种是API(Application Program Interface),应用编程接口,它是一组定义.程序及协议的集合,通过API接口实现计算机软件之间的相互通信.而 ...

  9. python 接口自动化测试(三)

    1.WriteIni.py import ConfigParser cf = ConfigParser.ConfigParser() cf.add_section("PC_WSDL" ...

随机推荐

  1. iOS模拟弱网

    iOS平台: 首先需要苹果手机开启开发者选项,方法是手机连接到MacOS上启动Xcode. 通过自带的开发者选项 >Network Link Conditioner, 即可简单的模拟各种速度的网 ...

  2. Solution -「JOISC 2021」「LOJ #3495」聚会 2

    \(\mathcal{Description}\)   Link.   给定一棵含 \(n\) 个结点的树.称点集 \(S\) 到结点 \(u\) 的会合距离为 \(\sum_{v\in S}\ope ...

  3. tomcat的基本使用及项目部署

    tomcat介绍 我们在学习Javaweb的时候,最普遍使用的服务器j就是阿帕奇的tomcat,主要是用来处理jsp和servlet的请求以及响应 tomcat的启动和关闭 在我们安装完tomcat后 ...

  4. 请求XSS攻击原理

    起因 巨人的肩膀 一个神秘URL酿大祸,差点让我背锅! (qq.com)

  5. Python实例:贪吃蛇(简单贪吃蛇编写)🐍

    d=====( ̄▽ ̄*)b 叮~ Python -- 简易贪吃蛇实现 目录: 1.基本原理 2.需要学习的库 3.代码实现 1.基本原理 基本贪吃蛇所需要的东西其实很少,只需要有一块让蛇动的屏幕, 在 ...

  6. 学习Spring5必知必会(3)~Spring的核心 IoC 和 DI

    一.Spring的核心 IoC(基于XML) 1.IoC容器 (1)BeanFactory容器创建对象: //使用BeanFactory @Test void testBeanFactory() th ...

  7. Python 中 selenium 库

    目录 selenium 基础语法 一. 环境配置 1. 安装环境 2. 配置参数 3. 常用参数搭配 4. 分浏览器启动 二. 基本语法 1. 元素定位 2. 控制浏览器操作 3. 操作元素的方法 3 ...

  8. Hadoop - HDFS学习笔记(详细)

    第1章 HDFS概述 hdfs背景意义 hdfs是一个分布式文件系统 使用场景:适合一次写入,多次读出的场景,且不支持文件的修改. 优缺点 高容错性,适合处理大数据(数据PB级别,百万规模文件),可部 ...

  9. Oracle导出/导入数据方法--两种方法(pde格式/dmp格式)

    转至:https://www.cnblogs.com/houbxblogs/articles/13365557.html?ivk_sa=1024320u 1.导出数据方法一(pde格式) 工具→ 导出 ...

  10. 用RecyclerView实现根据位置不同显示不同界面

    在原来的基础上将LinearAdapter.java进行修改: 1 public class LinearAdapter extends RecyclerView.Adapter<Recycle ...