9 邮件

1 邮件

  • 通过邮件途径展示测试工作结果
  • 邮件包括:
    • 测试执行简介
    • 测试图表展示
    • 测试细节列表
    • log 附件

2 配置文件

from utils.timeformat import dt_format
from config.conf_selenium import BROWSER

# 发件人
SENDER = 'aaa@xxx.com'
# 密码
PASSWORD = 'xxx'
# 收件人
RECEIVER = ['aaa@xxx.com', 'bbb@xxx.com']

# 用来发送邮件的 SMTP 服务器
SMTP_SERVER = 'smtp.mxhichina.com'
# 端口号
SMTP_PORT = 465

# 标题
SUBJECT = '' + BROWSER + ' UI 自动化测试报告】'+ dt_format(0)

3 邮件模板

class make_report():

    # 邮件标题
    title = ''

    # 基本信息
    test_time = ''
    tester = ''
    all_num = ''
    pass_num = ''
    fail_num = ''

    # table
    result_table = ''



    def get_title(self):
        return self.title

    def set_title(self, title):
        self.title = title

    def get_test_time(self):
        return self.test_time

    def set_test_time(self, test_time):
        self.test_time = test_time

    def get_tester(self):
        return self.tester

    def set_tester(self, tester):
        self.tester = tester

    def get_all_num(self):
        return self.all_num

    def set_all_num(self, all_num):
        self.all_num = all_num

    def get_pass_num(self):
        return self.pass_num

    def set_pass_num(self, pass_num):
        self.pass_num = pass_num

    def get_fail_num(self):
        return self.fail_num

    def set_fail_num(self, fail_num):
        self.fail_num = fail_num

    def get_result_table(self):
        return self.result_table

    def set_result_table(self, result_table):
        self.result_table = result_table

    def get_result_table(self):
        return self.result_table

    def set_result_table(self, id, flow_name, cases, flow_result):
        table_str = """
                            <tr>
                                <td style="text-align: center">
                                    """ + str(id) + """
                                </td>
                                <td style="text-align: center">
                                    """ + str(flow_name) + """
                                </td>
                                <td style="text-align: center">
                                    """ + str(cases) + """
                                </td>
                                <td style="text-align: center">
                                    """ + str(flow_result) + """
                                </td>
                            </tr>
                            """
        self.result_table += table_str

    def get_html_msg(self):
        # html
        html_msg = """
            <!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <title>Title</title>
            </head>
            <body>

                <!--标题开始-->
                <div style="border:1px; solid: #000; text-align: center;">
                    <h1>""" + self.get_title() + """</h1>
                </div>
                <!--标题结束-->

                <div style="width:100%; height: 50%">
                    <!--左侧开始 float:left; text-align:center; position:absolute; top:calc(25% - 25px)-->
                    <div style="width:40%; float:left; text-align:center">
                        <br />
                        <br />
                        <br />
                        <p></p>
                        <div style="width:60%; float:right; text-align:left">
                            <p>
                                <h>测试时间:</h>
                                <h>""" + self.get_test_time() + """</h>
                            </p>
                            <p>
                                <h>测试人员:</h>
                                <h>""" + self.get_tester() + """</h>
                            </p>
                            <p>
                                <h>用例总数:</h>
                                <h>""" + str(self.get_all_num()) + """</h>
                            </p>
                            <p>
                                <h>通过用例:</h>
                                <h>""" + str(self.get_pass_num()) + """</h>
                            </p>
                            <p>
                                <h>失败用例:</h>
                                <h>""" + str(self.get_fail_num()) + """</h>
                            </p>
                        </div>
                    </div>
                    <!--左侧结束-->

                    <!--img开始 float:right-->
                    <div style="width:60%; float:right">
                        <p>
                            <img src="cid:image1" style="width:50%; height:50%; display:table-cell; vertical-align:middle; text-align:center">
                        </p>
                    </div>
                    <!--img结束-->
                </div>

                <!--table开始-->
                <div style="width:100% !important; margin-right:10px">
                   <table style="width:100% !important;">
                        <tr>
                            <th style="font-size:1.1em; text-align:left; padding-top:5px; padding-bottom:4px; background-color:#A7C942; color:#ffffff; text-align: center">
                                ID
                            </th>
                            <th style="font-size:1.1em; text-align:left; padding-top:5px; padding-bottom:4px; background-color:#A7C942; color:#ffffff; text-align: center">
                                流程名
                            </th>
                            <th style="font-size:1.1em; text-align:left; padding-top:5px; padding-bottom:4px; background-color:#A7C942; color:#ffffff; text-align: center">
                                包含用例
                            </th>
                            <th style="font-size:1.1em; text-align:left; padding-top:5px; padding-bottom:4px; background-color:#A7C942; color:#ffffff; text-align: center">
                                执行结果
                            </th>
                        </tr>
                    """+ self.get_result_table() +"""
                    </table>
                </div>
                <!--table结束-->

            </body>
            </html>
                    """
        return html_msg

4 发送邮件配置

import smtplib
from email import encoders
from email.header import Header
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase


from config.conf_email import SMTP_SERVER
from config.conf_email import SMTP_PORT
from config.conf_email import PASSWORD
from config.conf_email import SENDER
from config.conf_email import RECEIVER
from config.conf_email import SUBJECT



def send_email(datetime, html_msg):

    # 发送内容
    message = MIMEMultipart()   # 对象代表邮件本身
    message['From'] = Header(SENDER, 'utf-8')      #发件人
    message['To'] = Header(','.join(RECEIVER), 'utf-8')      #收件人
    message['Subject'] = Header(SUBJECT, 'utf-8')  # 邮件标题

    # html 正文
    message.attach(MIMEText(html_msg, 'html', 'utf-8'))     # 添加邮件正文
    fp = open('../testreport/' + datetime + '.jpg', 'rb')       # 添加正文中的图片
    html_img = MIMEImage(fp.read())
    fp.close()
    html_img.add_header('Content-ID', '<image1>')       # 定义图片 ID,在 HTML 文本中引用
    message.attach(html_img)

    # 附件
    ctype = 'application/octet-stream'
    maintype, subtype = ctype.split('/', 1)
    # 附件-图片
    image = MIMEImage(open('../testreport/'+ datetime +'.jpg', 'rb').read(), _subtype=subtype)
    image.add_header('Content-Disposition', 'attachment', filename=datetime+'.jpg')
    message.attach(image)
    # 附件-文件
    file = MIMEBase(maintype, subtype)
    file.set_payload(open('../logs/log_'+ datetime +'.txt', 'rb').read())
    file.add_header('Content-Disposition', 'attachment', filename='log_'+ datetime +'.txt')
    encoders.encode_base64(file)
    message.attach(file)

    # 发送邮件
    try:
        server = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)   # 配置服务器
        server.login(SENDER, PASSWORD)      # 登录
        server.sendmail(SENDER, RECEIVER, message.as_string())
        print('邮件发送成功!')
    except Exception as e:
        print ('邮件发送失败!' + str(e))

    server.quit()


if __name__ == "__main__":
    send_email()

5 邮件展示

 

posted @ 2021-02-09 21:17  栗子测试开发  阅读(78)  评论(0)    收藏  举报