一、前言

之前在做appium自动化的时候,已经提到过unittest框架的基本概念、用例执行,以及BeautifulReport测试报告的简单使用了(地址:https://www.cnblogs.com/Chilam007/p/12857102.html--强烈建议先看此文章哈,不然下面直接贴的代码估计会有点懵),这里就不再赘述了,本文主要讲下yagmail发送邮件功能,当前前面已经讲了po模式,所以是直接基于po模式的代码框架讲的,包括后面的功能演练也都是基于po模式。

二、Yagmail发送邮件

yagmail是python的一个第三方库,yagmail库极大地简化了发送邮件的代码,通过pip命令安装(pip install yagmail),发送邮件示例

import yagmail

# 连接邮箱服务器
yag = yagmail.SMTP(user="123@qq.com",password="12345",host='smtp.qq.com') # 邮件正文
contents = ["这是测试邮件发送功能的邮件"] # 发送邮件:如果想给多个用户发,只需要把收件人放在一个list中即可;如果想发送带附件的邮件,只需要指定本地附件的路径即可,也可以通过list指定多个附件
yag.send(['1234@qq.com','455@qq.com'],'subject',contents,["E://report.html"])

说明,邮件发送需要准备以下几个内容:

发送人的账号(如xxxxxxxx@qq.com)、授权码(如yyyyyyyyyy),服务器host(如qq邮箱的smtp.qq.com)
收件人账号
邮件标题(可不要)
邮件内容(可不要)
邮件附件(可不要,提供附件的路径即可)
注:

1. 发送人的授权码如何获取?以QQ邮件为例(其他邮箱类似)

【qq邮箱——设置——账户——POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务——IMAP/SMTP服务——开启】

2. 公共邮箱:添加端口号与smtp的属性即可(详细请百度解决)

三、自动发送邮件功能集成自动化测试

上面说明了如何发送邮件,现在演练下如何将自动化测试生成的报告发送邮件,因为是基于前面讲的po模式代码框架,所以这里只讲执行文件。

整个程序的执行过程可以分为两部分:

1、定义测试报告文件,并赋值给变量html_report,通过BeautifulReport.report运行测试用例

2、调用send_mail()函数,并传入html_report文件,在send_mail函数中,将测试报告作为邮件的附件发送到指定邮件

项目目录

excute_cases.py

import unittest
from BeautifulReport import BeautifulReport
import datetime
import yagmail # 把测试报告作为附件发送到指定邮箱
def send_mail(report):
yag = yagmail.SMTP(user="31696@qq.com", password="fuhhddjj", host='smtp.qq.com')
subject = "自动化测试报告"
contents = "自动化用例已执行完毕,详细报告请查看附件"
yag.send('13789@163.com',subject,contents,report)
print("邮件已经发送成功!") if __name__ == '__main__':
# 加载测试用例:指定E:\\08PyCharmProject\\Case1\\test_case目录,“test*.py”匹配指定目录下所有test开头的.py文件
test_suite = unittest.defaultTestLoader.discover('E:\\UI test\\UnittestProject\\TestCases', pattern='test*.py')
# 获取当前时间,用于命名测试报告标题
now = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S')
# 将用例加到对象中
result = BeautifulReport(test_suite)
# report方法实现了用例的执行、用例执行结束的结果统计、生成测试报告等操作
# :filename -> 测试报告名称, 如果不指定默认文件名为report.html,description -> 测试报告用例名称展示,report_dir-> 报告文件写入路径
result.report(filename='测试报告'+str(now), description='自动化测试', report_dir='E:\\UI test\\UnittestProject\\Report')
html_report = './Report/测试报告'+str(now)+'.html' # 这个要注意要带目录路径,如果直接附文件名,程序会找不到路径
send_mail(html_report)

Unittest单元测试框架——BeautifulReport测试报告和Yagmail自动发送邮件的更多相关文章

  1. Selenium(十八):unittest单元测试框架(四) HTML测试报告

    1. HTML测试报告 对测试人员来而言,测试的产出很难衡量.换句话说,测试人员的价值比较难以量化和评估,相信这一点对软件测试人员来说深有体会.我们花费了很多时间与精力所做的自动化测试也是如此.所以, ...

  2. 四. 引入unittest单元测试框架

    1.   安装 SeleniumIDE(firefox) (1)下载地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ (2 ...

  3. unittest单元测试框架总结

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

  4. unittest单元测试框架详解

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

  5. Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型

    1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  6. unittest单元测试框架

    unittest单元测试框架 概述: 单元测试框架主要用来完成以下三件事: 提供用例组织与执行:当测试用例只有几条时,可以不必考虑用例的组织,但是当用例达到成百上千条时,大量的用例堆砌在一起,就产生了 ...

  7. unittest单元测试框架简单说明

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

  8. unittest单元测试框架总结(转载)

    转载:https://www.cnblogs.com/yufeihlf/p/5707929.html unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该 ...

  9. unittest 单元测试框架

    引入 unittest 框架 相想使用unittest 框架,首先要引入unittest 包 import unittest class Baidu(unittest.TestCase): Baidu ...

随机推荐

  1. 解决vue 绑定事件会覆盖默认参数的问题

    解决vue 绑定事件会覆盖默认参数的问题 在使用一些ui框架的时候,某些组件的框架中的事件所规定的参数不能满足实际开发的需要,但是直接传入参数会把默认的参数覆盖掉 解决方法:将参数放入箭头函数中,传递 ...

  2. 细说MySQL连接查询:内连、左连和右连

    转: 细说MySQL连接查询:内连.左连和右连 简介: MySQL 的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接.首先,要确定一个主表作为结果集,然后将 ...

  3. Java 多线程 02

    多线程·线程间通信 和 GUI 单例设计模式 * A:单例设计模式 * 保证类在内存中只有一个对象 * B:如何保证 * a:控制类的创建,不让其他类来创建泵类的对象,私有化构造方法 * b:在本类中 ...

  4. Tomcat8弱口令+后台getshell

    漏洞原因 用户权限在conf/tomcat-users.xml文件中配置: <?xml version="1.0" encoding="UTF-8"?&g ...

  5. python3 获取博彩网站页面下所有域名(批量)

    已有的域名信息 详细实现过程如下 #!/usr/bin/env python # -*- coding:utf-8 -*- import requests from bs4 import Beauti ...

  6. Activiti工作流学习笔记(三)——自动生成28张数据库表的底层原理分析

    原创/朱季谦 我接触工作流引擎Activiti已有两年之久,但一直都只限于熟悉其各类API的使用,对底层的实现,则存在较大的盲区. Activiti这个开源框架在设计上,其实存在不少值得学习和思考的地 ...

  7. 2019.2-2019.3 TO-DO LIST

    DP P2723 丑数 Humble Numbers(完成时间:2019.3.1) P2725 邮票 Stamps(完成时间:2019.3.1) P1021 邮票面值设计(完成时间:2019.3.1) ...

  8. 死磕生菜 -- lettuce 间歇性发生 RedisCommandTimeoutException 的深层原理及解决方案

    0x00 起源 项目的一些微服务集成了 Spring Data Redis,而底层的 Redis 客户端是 lettuce,这也是默认的客户端.微服务在某些环境中运行很正常,但在另一些环境中运行就会间 ...

  9. Reactive Spring实战 -- 响应式Redis交互

    本文分享Spring中如何实现Redis响应式交互模式. 本文将模拟一个用户服务,并使用Redis作为数据存储服务器. 本文涉及两个java bean,用户与权益 public class User ...

  10. for-in 语句

    for-in 语句循环专门用于遍历范围,列表,元素和字典等可迭代对象. 循环中的变量的值受for-in循环控制,该变量将会在每次循环开始时自动被赋值,因此程序不应该在循环中对该变量进行赋值 for-i ...