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" ...
随机推荐
- iOS 如何监听用户在手机设置里改变了系统的时间?
如何监听用户未退出APP但通过Home键在手机设置里改变了系统的时间? 用户虽未退出APP,但是当它按Home键退到后台时 ,会调用该方法: - (void)applicationDidEnterBa ...
- 07.并发编程Threads
参考文档 https://www.cnblogs.com/springsnow/p/9409205.html#_label0 1. 基础概念 1.1 进程/线程/多线程 进程(Process) 计算机 ...
- [LeetCode]13.罗马数字转整数(Java)
原题地址: roman-to-integer 题目描述: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M ...
- 我们一起来学Shell - shell的数组
文章目录 什么是数组 数组中常用变量 数组的定义 小括号定义数组变量 小括号加键值对定义数组变量 分别定义数组变量 动态地定义数组变量 数组赋值的切片 遍历数组 关联数组 我们一起来学Shell - ...
- 练习推导一个最简单的BP神经网络训练过程【个人作业/数学推导】
写在前面 各式资料中关于BP神经网络的讲解已经足够全面详尽,故不在此过多赘述.本文重点在于由一个"最简单"的神经网络练习推导其训练过程,和大家一起在练习中一起更好理解神经网络训 ...
- 反射、反射机制、类加载、Class类专题复习
一.反射概念 1.反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息(比如成员变量,构造器,成员方法等等),并能操作对象的属性及方法.反射在设计模式和框架底层都会用到. 2. ...
- 【基础知识】CPU上下文切换(进程上下文切换 - 线程上下文切换 - 中断上下文切换)
CPU 上下文切换是什么 CPU 上下文切换,就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器 ...
- 通过Xshell或Xftp链接Windows10子系统Linux
1.打开linux系统 2.切换到root角色 sudo -i //切换到root 并输入密码 3.卸载安装ssh server sudo apt-get remove openssh-server ...
- CentOS8安装Geant4笔记(一):Geant4介绍、编译和安装
前言 在服务器CentOS8.2上安装geant4软件. GEANT4 介绍 Geant4 是一个用于模拟粒子穿过物质的工具包.其应用领域包括高能.核物理和加速器物理,以及医学和空间科学研 ...
- KETTLE使用中的错误集锦
1.违反唯一主键约束条件:问题是表中有俩个主键,将备用主键替换成真正的主 键或者是没有对数据做出处理加这句话and cft.DEL_FLAG!='1'或者要到的库有此数据 2.field 某列 is ...