zoukankan      html  css  js  c++  java
  • Web自动化测试:邮件发送测试报告

    在我们运行完整个项目后,已经生成了 测试报告,一般自动化会在本地或者公司服务器上运行,那如何获取自动化测试的运行结果呢,此时就需要把测试结果以邮件的形式发送到邮箱,这样就可以在测试完成的第一时间知道测试结果。

    所以我们需要来学习一下如果使用python第三方库来发送邮件。

    其实关于发送邮件的方法,复制粘贴过来,修改下参数、账号、密码后,直接使用就可以了,再把数据写到配置中参数化基本就搞定。

    一、发送邮件的步骤

    关于发送邮件,步骤有三步:定义配置信息、定义邮件内容、发送邮件

    第一步:定义配置信息

    这一步将所有需要用到的:邮箱服务器地址、邮箱端口、邮箱账号、密码等信息先列出来,可以在方法中直接赋值,也可以放到config配置文件中,读取后赋值。

    # 接收邮箱
    receiver = "***@****.com"
     
    # 发送邮件服务器
    smtp_server = "smtp.***.com"
    port = "25"
     
    # 发送邮箱账号和密码(或者授权码)
    username = "***@***.com"
    password = "****"

    第二步:定义邮件内容

    邮件内容,我通过文件路径来读取html格式的文件,从而获取到邮件的内容。然后设置邮件的标题、发送方、收件方、正文内容、附件格式、附件内容等。

    # 读取测试报告文件(report_file:测试报告文件路径)
    mail_body = open(report_file, "r", encoding="utf-8").read()
    # 定义邮件内容
    msg = MIMEMultipart()
    body = MIMEText(mail_body, _subtype='html', _charset='utf-8')
    msg['Subject'] = u"自动化测试报告"
    msg['from'] = username
    msg['to'] = receiver
    msg["date"] = time.strftime('%a, %d %b %Y %H:%M:%S %z')
    msg.attach(body)
    # 定义附件内容
    att = MIMEText(mail_body, "base64", "utf-8")
    att["Content-Type"] = "application/octet-stream"
    att["Content-Disposition"] = 'attachment; filename= "report.html"'
    msg.attach(att)

    第三步:发送邮件

    确定好邮件内容后,需要发送邮件了,不同的加密方式发送方法会有些不同,这个在下文具体探讨下。

    # 连接邮箱服务器
    smtp = smtplib.SMTP()
    smtp.connect(host=smtp_server, port=port)
    # tls加密方式
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
    # 登录邮箱
    smtp.login(username, password)
    # 发送邮件
    smtp.sendmail(username, receiver, msg.as_string())
    # 断开连接
    smtp.quit()

    二、发送邮件的注意事项

    我在研究了发送邮件后,发现不同情况下,发送邮件的方式也有不同之处,这里整理如下:

    2.1使用不同邮件发送方

    目前我尝试过使用163邮箱、qq邮箱、zimbra邮箱进行发送邮件,每个邮箱设置不同,每个邮箱也没有全面测试所支持的发送类型,这里大概讲下我对每个邮箱的感受吧,不作为参考。其中:

    163邮箱比较简单,我只设置了服务地址,在connect连接后直接可以登录发送(可能和我163邮箱设置有关)

    qq邮箱需要设置一个授权码,然后使用授权码来进行连接登录

    zimbra邮箱是公司部署的一个邮箱系统,没有授权码,但是需要加密进行登录。

    邮箱账户开启第三方发送功能:

    163邮箱:在设置菜单中,选择POP3/SMTP/IMAP选项,设置开启SMTP发送功能。

    Qq邮箱:在设置-账户中,设置开启SMTP发送功能

    2.2不同加密方式的登录

    这里我整理的几种加密方式,有明文不加密、ssl、tls这三种方式,不同的加密方式有不同的登录方法。

    明文不加密:

    默认使用smtp的端口(默认值25)具体端口值以邮箱设置为准。

    # 连接邮箱服务器
    smtp = smtplib.SMTP()
    smtp.connect(host=smtp_server, port='25')
    # 登录邮箱
    smtp.login(username, password)

    ssl加密方式:

    默认使用ssl端口(默认值465)具体端口值以邮箱设置为准。

    # 连接邮箱服务器
    smtp = smtplib.SMTP_SSL()
    smtp.connect(host=smtp_server, port='465')
    # 登录邮箱
    smtp.login(username, password)

    tls加密方式:

    默认使用smtp的端口(默认值25)具体端口值以邮箱设置为准。

    # 连接邮箱服务器
    smtp = smtplib.SMTP()
    smtp.connect(host=smtp_server, port='25')
    # tls加密
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
    # 登录邮箱
    smtp.login(username, password)

    2.3无法发送时如何检查

    当遇到无法发送邮件时,根据我踩过的坑,来给出几点建议吧。

    1.确定邮箱已经开启smtp功能,并且确定是否开启授权码登录,如果开启则需要使用授权码登录。

    2.确定邮箱端口port值是否正确,是465、587、25,或者邮箱系统定义的其他端口

    3.确定邮箱支持的加密方式,以及不同加密方式对应的端口值正确与否。

    三、代码实例

    这里根据项目,我创建了send_mail.py的文件,在里面除了发送邮件的方法,根据项目结构加入了一个查找report报告文件夹最后生成文件的方法,并且获取到文件路径后,作为要发送的内容:

    send_mail.py

    # -*- coding: UTF-8 -*-
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    import time
    import os
     
     
    def find_report_name():
        """查找最后生成的报告文件的路径"""
        result_dir = os.path.abspath('..') + "\report\"
        lists = os.listdir(result_dir)
        lists.sort(key=lambda fn: os.path.getmtime(result_dir + "\" + fn))
        file_name = os.path.join(result_dir, lists[-1])
        return file_name
     
     
    def send_email(report_file):
        """发送邮件方法"""
        try:
            # 配置邮件信息
            # 接收邮箱
            receiver = "***@***.com"
            # 发送邮件服务器
            smtp_server = "smtp.***.com"
            port = "25"
            # 发送邮箱账号和密码(授权码)
            username = "***@***.com"
            password = "***"
     
            # 读取测试报告文件
            mail_body = open(report_file, "r", encoding="utf-8").read()
            # 定义邮件内容
            msg = MIMEMultipart()
            body = MIMEText(mail_body, _subtype='html', _charset='utf-8')
            msg['Subject'] = u"自动化测试报告"
            msg['from'] = username
            msg['to'] = receiver
            msg["date"] = time.strftime('%a, %d %b %Y %H:%M:%S %z')
            msg.attach(body)
            # 定义附件内容
            att = MIMEText(mail_body, "base64", "utf-8")
            att["Content-Type"] = "application/octet-stream"
            att["Content-Disposition"] = 'attachment; filename= "report.html"' 
            msg.attach(att)
     
            # 连接邮箱服务器
            smtp = smtplib.SMTP()
            smtp.connect(host=smtp_server, port=port)
            # tls加密方式
            smtp.ehlo()
            smtp.starttls()
            smtp.ehlo()
            # 登录邮箱
            smtp.login(username, password)
            # 发送邮件
            smtp.sendmail(username, receiver, msg.as_string())
            # 断开连接
            smtp.quit()
            print("%s 发送成功,查收%s邮箱" % (username, receiver))
        except Exception as e:
            print(e)
     
     
    def send_report():
        """发送测试报告"""
        send_email(find_report_name())
    如果您看了本篇博客,觉得对您有所收获,请点击右下角的[推荐]. 如果您想转载本博客,请注明出处, 如果您对本文有意见或者建议,欢迎留言. 感谢您的阅读,请关注我的后续博客!
  • 相关阅读:
    vim 常用指令总结
    冥想、反思
    FM(Factorization Machines)模型详解
    机器学习性能指标(ROC、AUC、召回率)
    数据库常用操作(mysql)
    shell命令总结
    Window Function--the function of window function
    Python用Pillow(PIL)进行简单的图像操作
    Pyecharts : plot Graph, Line, Liquid, Parallel
    机器学习方法--分类、回归、聚类
  • 原文地址:https://www.cnblogs.com/chuansinfo/p/13468646.html
Copyright © 2011-2022 走看看