【python3.x】发送自动化测试报告邮件

作者:神秘网友 发布时间:2021-02-28 12:50:06

【python3.x】发送自动化测试报告邮件

? SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

? python发邮件主要需要两个模块:smtplibemail,这两个模块是python自带的库,import即可使用。smtplib主要负责发送邮件,即一个发送邮件的动作,如连接邮箱服务器,登录邮箱,发送邮件。email主要负责构造邮件,指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。

发送邮件

? 涉及的部分参数说明:

  • 连接到smtp服务器:smtplib.SMTP_SSL(smtp服务器地址, 端口号)
  • 登录smtp服务器:smtp.login(smtp邮件地址, 登录smtp的授权码)
  • 构造邮件对象:MIMEMultipart()
  • 创建邮件内容:MIMEText(邮件内容, "plain", "utf8")两个参数文本类型,编码格式;如果要发送html格式的邮件内容,则把plain(默认)替换成html
  • 把相关内容添加到邮件:smg.attach(具体的内容),添加邮件内容
  • 设置邮件主题:smg["Subject"] = 主题内容
  • 设置邮件发件人:smg["From"] = 邮件地址
  • 设置邮件收件人:smg["To"] = 邮件地址
  • 发送邮件:smtp.send_message(邮件对象, from_addr=发件人邮件地址, to_addrs=收件人邮件地址)如果有多个收件人则用list格式传给to_addrs
  • 创建附件:MIMEApplication(附件内容)
  • 创建图片:MIMEImage(图片内容),与附件一样
  • 设置附件或图片等:file_msg.add_header(\_name, \_value, **\_params) :扩展标题设置,_name为要添加的标题字段,_value为标题的值。
    • msg.add_header('Content-ID', 'imgid') #设置图片ID
    • msg.add_header('Content-Disposition', 'attachment', filename='test.xlsx') #为附件添加一个标题
    • msg.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', '中文标题')) #添加非ASCII字符时需指定编码
import smtplib
from email.mime.text import MIMEText    # 创建文本内容的邮件内容
from email.mime.multipart import MIMEMultipart  # 创建带附件的实例
from email.mime.application import MIMEApplication  # 用于创建附件的
from email.mime.image import MIMEImage   # 用于创建图片,与添加附件一样的,下面不做举例


# 第一步: 连接到smtp服务器
smtp = smtplib.SMTP_SSL("smtp.qq.com", 465)
smtp.login("xxxxxx@qq.com","afajccbab")

# 第二步:构建邮件
smg = MIMEMultipart()
text_smg = MIMEText("这是邮件文本内容", "plain", "utf8")	# 邮件内容
smg.attach(text_smg)	# 添加到邮件

# 添加附件
file_msg = MIMEApplication(open(r"C:\project\test\reports\report.html","rb").read())
file_msg.add_header('content-disposition', 'attachment', filename='report.html')
smg.attach(file_msg)	# 添加到邮件

smg["Subject"] = "测试测试"	# 主题
smg["From"] = "aaaaaa@qq.com" # 邮件内显示的发件人
smg["To"] = "bbbbb@163.com" # 邮件内显示的收件人

# 第三步发送邮件
smtp.send_message(smg, from_addr="aaaaaa@qq.com", to_addrs="bbbbb@163.com")

? 还有更多的用法,有兴趣的可以再深入研究。

封装及应用

? 下面是一个简单的封装例子,可以根据自己的需要优化,甚至可以把邮件的主题、发件人、收件人以及smtp的登录邮箱授权密码等提取出来放到配置文件来维护。

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication


def send_email(file_path):

    smtp = smtplib.SMTP_SSL("smtp.qq.com",465)
    smtp.login("xxxxx@qq.com","smtp登录密码")

    smg = MIMEMultipart()
    text_smg = MIMEText("这是邮件文本内容", "plain", "utf8")
    smg.attach(text_smg)

    file_msg = MIMEApplication(open(file_path,"rb").read())
    file_msg.add_header('content-disposition', 'attachment', filename='report.html')
    smg.attach(file_msg)
    
    smg["Subject"] = "测试报告"
    smg["From"] = "aaaaaa@qq.com"
    smg["To"] = "bbbbbbb@163.com"
    smtp.send_message(smg,from_addr="aaaaaa@qq.com",to_addrs="bbbbbbb@163.com")

? 测试报告都是测试用例运行完之后才生成,那么我们就可以把发邮件这一步放到测试报告生成之后:

import unittest
import os
from common.contants import CASE_DIR, REPORT_DIR
from common.send_email import send_email

# 第一步:创建测试套件
suite = unittest.TestSuite()

# 第二步加载用例到套件
loader = unittest.TestLoader()
suite.addTest(loader.discover(CASE_DIR))

report_path = os.path.join(REPORT_DIR, "report.html")
with open(report_path, "wb") as f:
    runner = HTMLTestRunner(stream=f,
                            title="24期的测试报告",
                            description="测试报告的描述信息。。。。。",
                            tester="MuSen"
                            )
    # 运行测试套件
    runner.run(suite)

# 执行完代码之后,发送报告
send_email(report_path)

【python3.x】发送自动化测试报告邮件 相关文章

  1. web自动化快速入门

    1、什么是web自动化测试 定义:让程序代替人工自动验证web项目功能的过程(预期结果和实际结果的比较) 使用场景:需求稳定、周期长、有回归测试的需求 开始的是时机:功能测试完成(手工测试完成---黑盒测试) 2、selenium selenium套件: selenium IDE sel

  2. 使用TCP协议循环发送数据

    循环很简单,像这样就OK: TCPOfSend.java: 1 package com.hw.TCP0226; 2 3 import java.io.IOException; 4 import java.io.OutputStream; 5 import java.net.Socket; 6 import java.net.UnknownHostException; 7 import java.util.Scanner; 8 9 @SuppressWar

  3. 使用TCP协议开发发送端和接收端

    在TCP协议中,我们一般认为发送端为客户端,接收端为服务器端。 首先来开发客户端: TCPOfSend.java: 1 package com.hw.TCP0226; 2 3 import java.io.IOException; 4 import java.io.OutputStream; 5 import java.net.Socket; 6 import java.net.UnknownHost

  4. python邮件发送封装类

    import os import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from common.config import configs class EmaliUtils: def __init__(self,smtp_body, attch_path =None): self.smtp_server = 'smtp.qq.co

  5. 发送短信案例

    知识梳理 // 1 button 比较特殊 获取它的值不是value 而是innerHTML 核心逻辑 // 1 点击按钮后鼠标禁用// 2 按钮里面的内容有变化 button的内容用innerHTML获取// 3 里面的秒数有变化 需要用到定时器// 4 定义一个变量 在定时器里面 不断递减// 5 如果变量为

  6. django学习-31.发送邮件正文值为一个html页面的单个邮件

    1.写这篇博客的目的 主要记录如何通过django来实现这个功能:发送邮件正文值为一个html页面的单个邮件; 发送邮件正文值为一个html页面的单个邮件,可以使用该函数:send_mail(); 完整操作流程可以看接下来的内容; 2.完整操作流程 2.1.第一步:在【hellowo

  7. 「IRC」- 发送多行消息 @20210226

    问题描述 我们希望在 IRC 客户端中,可以发送多行消息(即单条消息有多行内容),因为我们使用“多行的单条消息”来描述某个问题。 但是,在经过查找之后,我们发现 IRC 并不支持多行消息: java - Linebreak IRC protocol - Stack Overflow Insert line bre

  8. Vue从子组件向父组件发送消息

    !DOCTYPE htmlhtml lang="en"head meta charset="UTF-8" meta name="viewport" content="width=device-width, initial-scale=1.0" titleDocument/title script src="./js/vue.js"/script/headbody div id="app" parent/parent /div script //子组件 Vue.comp

  9. Django项目部署到阿里云服务器无法发送邮件,发送邮件超时问题解决

    ## 为了您更好的阅读体验,请查看原文:https://www.whbwiki.com/1702.html 前言 今天, 博主将写了好久的一个Django小项目尝试在阿里云部署上线,由于项目中需要发送邮件,博主调用了163邮箱接口,在本地测试邮件功能正常,可是上线后,邮件功能一直超时崩溃

  10. 自动化SQL注入工具 sqlmap 中文使用手册

    查看原文:https://www.whbwiki.com/1760.html 0x00 简介 sqlmap是一个开源的渗透测试工具,它可以自动化检测和利用SQL注入漏洞并接管数据库服务器。它有一个强大的检测引擎,许多适合于终极渗透测试的良好特性和众多的操作选项,从数据库指纹、数据获取到访

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词