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" ...
随机推荐
- Java读写文件常用方法
一.字符流:读写纯文本(txt,csv等), 1 字符流写文件主要用:FileWriter,BufferedWriter,PrintWriter 1.1 测试 FileWriter 写入 privat ...
- MindSpore多元自动微分
技术背景 当前主流的深度学习框架,除了能够便捷高效的搭建机器学习的模型之外,其自动并行和自动微分等功能还为其他领域的科学计算带来了模式的变革.本文我们将探索如何用MindSpore去实现一个多维的自动 ...
- Solution -「多校联训」查拉图斯特拉如是说
\(\mathcal{Description}\) Link. 给定 \(n\) 和 \(m\) 次多项式 \(f(x)\),求 \[\sum_{i=0}^n\binom{n}{i}f(i)\ ...
- Solution -「JOISC 2021」古老的机器
\(\mathcal{Description}\) Link. 这是一道通信题. 对于长度为一个 \(n\),仅包含字符 X, Y, Z 的字符串 \(s\),将其中 \(n\) 个字符按 ...
- 如何看懂时序图,以DHT21为例
有很多传感器手册给了我们时序图,我们只要按照时序图操作就行了,还有一些是标准接口,例如SPI,IIC,UART,这些可以利用硬件提供的收发器通信,还有一些我们没有足够的接口,或者没有对应的接口与之通信 ...
- Python基础—基础数据类型list(Day4)
基础数据类型 四.list列表 存放大量数据,大量的数据在列表中便于操作,列表示有序的,有索引值,可切片,方便取值. 1.list的增 1).append('元素') 在列表后面按元素添加 ...
- Aluminum: An Asynchronous, GPU-Aware Communication Library Optimized for Large-Scale Training of Deep Neural Networks on HPC Systems
本文发表在MLHPC 2018上,主要介绍了一个名为Aluminum通信库,这个库针对Allreduce做了一些关于计算通信重叠以及针对延迟的优化,以加速分布式深度学习训练过程. 分布式训练的通信需求 ...
- Burp intruder暴力攻击web口令
实验目的 利用Burp intruder功能爆破出后台登陆密码admin. 实验原理 1)Burp Suite是Web应用程序测试的最佳工具之一,其多种功能可以帮我们执行各种任务.请求的拦截和修改,扫 ...
- vue2项目,踩坑Jest单元测试
目前的项目已经维护了挺久,由于客户要求,我们要为项目加上单元测试,挑选一番后选择了Jest(配置简便,开箱即用),下面记录了此次为项目添加Jest作为单元测试的经历. 安装Jest 1. 在项目目录下 ...
- 安装Android studio 并成功运行
之前是在idea上弄得发现有些问题就下载了Android studio教程(4条消息) Android Studio安装及环境配置教程_xuw_xy的博客-CSDN博客_androidstudio安装 ...