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())

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容