zoukankan      html  css  js  c++  java
  • 【python接口自动化】- 自动发送测试报告邮件

    如果想从头学起接口自动化测试,可以去看看这个系列的文章哦!

    https://www.cnblogs.com/miki-peng/category/1671261.html

    前言

    ​ SMTP(Simple Mail Transfer Protocol)也就是简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议。python的smtplib模块就提供了一种很方便的途径发送电子邮件,它对smtp协议进行了简单的封装。

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

    smtp授权

    ​ 上面已经说到发送邮件是基于smtp服务的,那么我们就需要一个可以登录smtp服务器的账号及授权码,这里以qq邮箱为例,登录qq邮箱后,在设置》账户这里就可以开启smtp,开启后发送短信获取授权码即可。

    发送邮件

    ​ 涉及的部分参数说明:

    • 连接到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	est
    eports
    eport.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)
    
  • 相关阅读:
    core--线程同步(用户模式)
    Android-Kotlin-Activity直接的跳转
    Android-Kotlin-枚举enum
    Android-Kotlin-单例模式
    Android-Kotlin-代理和委托
    Android-Kotlin-接口与多态的表现
    Android-Kotlin-set/get方法的使用
    Android-Kotlin-继承
    Android-Kotlin简单计算器功能
    CentOS 6.5 X64 U盘启动盘制作
  • 原文地址:https://www.cnblogs.com/miki-peng/p/14458849.html
Copyright © 2011-2022 走看看