zoukankan      html  css  js  c++  java
  • python3+selenium框架设计10-发送邮件

    使用python3的email模块和smtplib模块可以实现发送邮件的动能。email模块用来生成email,smtplib模块用来发送邮件,接下来看如何在生成测试报告之后,并将报告放在邮件附件中并发送给项目组的人,在framework文件夹下新建my_email.py文件,项目结构如下。

    以qq邮箱为例,在使用qq邮箱的SMTP服务时,需要在qq邮箱-账户中先开启,并且生成授权码,然后密码那里填写授权码

    具体代码如下。

    #!/usr/bin/python3
    
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
    from email.mime.multipart import MIMEMultipart
    import getcwd
    import os
    from Logs.log import log1
    import time
    
    rq = time.strftime('%Y%m%d', time.localtime(time.time()))#获取本地时间 转换成日期
    sender = '2474xxx48@qq.com'  #发件人邮箱
    password = 'kfsxmczzlinbbifj'  #发件人邮箱密码
    addressed_eamil = '2474xxx48@qq.com' #收件人邮箱
    
    path = getcwd.get_cwd()
    file = os.path.join(path, 'report/xxxUI自动化测试报告.html')#测试报告地址
    
    def mail():
        try:
            # 创建一个带附件的实例
            message = MIMEMultipart()
            message['From']=formataddr(['发件人姓名',sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            log1.info('发件人邮箱:%s' % sender)
            message['To']= formataddr(['收件人姓名',addressed_eamil])    # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            log1.info('收件人邮箱:%s' % addressed_eamil)
            message['Subject']=rq+"xxxUI自动化测试报告"    # 邮件的主题,也可以说是标题
    
            # 邮件正文内容
            message.attach(MIMEText('附件为xxxUI自动化测试报告', 'plain', 'utf-8'))
    
            # 构造附件1
            att1 = MIMEText(open(file, 'rb').read(), 'base64', 'utf-8')
            log1.info('读取附件')
            att1["Content-Type"] = 'application/octet-stream'
            # filename是附件名,附件名称为中文时的写法
            att1.add_header("Content-Disposition", "attachment", filename=("gbk", "", "xxxUI自动化测试报告.html"))
            # 附件名称非中文时的写法
            # att["Content-Disposition"] = 'attachment; filename="test.html")'
            message.attach(att1)
            log1.info('添加附件')
    
            server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,一般端口是25
            log1.info('连接QQ邮箱smtp服务')
            server.login(sender,password)  # 括号中对应的是发件人邮箱账号、邮箱密码
            log1.info('连接成功')
            server.sendmail(sender, addressed_eamil, message.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
            log1.info("邮件发送成功")
        except Exception:
            log1.error("邮件发送失败",exc_info=1)
    
    mail()

    收件人和发件人可以都填自己的QQ邮箱,from是发件人那一栏的展示。to是收件人的展示。如果要显示多个收件人,需要使用‘,’.join(邮箱数组)。最下面sendmail中第二个传收件人邮箱,如果要发给多个人,传数组。

    email展示内容可以跟代码中对照着来看,更容易理解一点

    这样虽然实现了发邮件,但是也把邮件的收发人写死了,所以还是要完善。通过读取配置文件来确定收发人,在framework文件夹下Base_Page.py文件增加如下代码

    def config_options(self,section):
            '''读取配置文件某section下所有键'''
            config = configparser.ConfigParser()
            config.read(config_path,encoding="utf-8-sig")
            username = config.options(section)
            return username
    
    
        def get_addkey(self,user):
            '''遍历获得配置文件收件人email'''
            sum = 0
            L = []
            for i in user:
                if sum < len(user):
                    emails = self.config_get(i,'addressed')
                    L.append(emails)
                    sum += 1
            return L

    然后修改配置文件

    sender是设置发件人的,username是发件人的姓名,email是发件人邮箱,password是邮箱密码

    addressed是设置收件人的,之后随便往下加就行了。xxx = 邮箱就可以了。

    这样谁发邮件,哪些人收到邮件,都是可以配置的。

    将my_email.py文件代码修改成如下

    #!/usr/bin/python3
    
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
    from email.mime.multipart import MIMEMultipart
    import getcwd
    import os
    from Logs.log import log1
    from framework.Base_Page import BasePage
    import time
    
    rq = time.strftime('%Y%m%d', time.localtime(time.time()))#获取本地时间 转换成日期
    my_mail = BasePage(driver=1)
    sender = my_mail.config_get('email','sender')  # 发件人邮箱账号
    password = my_mail.config_get('password','sender')  # 发件人邮箱密码
    usernmae = my_mail.config_get('username','sender') #发件人姓名
    users = my_mail.config_options('addressed')     #收件人
    addressed_eamils = my_mail.get_addkey(users)  #收件人邮箱
    
    path = getcwd.get_cwd()
    file = os.path.join(path, 'report/xxxUI自动化测试报告.html')
    
    def mail():
        try:
            # 创建一个带附件的实例
            message = MIMEMultipart()
            message['From']=formataddr([usernmae,sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            log1.info('发件人姓名:%s' % usernmae)
            log1.info('发件人邮箱:%s' % sender)
            message['To']=';'.join(addressed_eamils)    # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            log1.info('收件人邮箱:' + ';'.join(addressed_eamils))
            message['Subject']=rq + "xxxUI自动化测试报告.html"    # 邮件的主题,也可以说是标题
    
            # 邮件正文内容
            message.attach(MIMEText('附件为xxxUI自动化测试报告.html', 'plain', 'utf-8'))
    
            # 构造附件1,传送当前目录下的 test.txt 文件
            att1 = MIMEText(open(file, 'rb').read(), 'base64', 'utf-8')
            log1.info('读取附件')
            att1["Content-Type"] = 'application/octet-stream'
            # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
            att1.add_header("Content-Disposition", "attachment", filename=("gbk", "", "xxxUI自动化测试报告.html"))
            # 附件名称非中文时的写法
            # att["Content-Disposition"] = 'attachment; filename="test.html")'
            message.attach(att1)
            log1.info('添加附件')
    
            server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25
            log1.info('连接QQ邮箱smtp服务')
            server.login(sender,password)  # 括号中对应的是发件人邮箱账号、邮箱密码
            log1.info('连接成功')
            server.sendmail(sender, addressed_eamils, message.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
            log1.info("邮件发送成功")
        except Exception:
            log1.error("邮件发送失败",exc_info=1)

    在entrance.py文件开头加上from framework.my_email import mail,在最后加上mail(),然后执行

    这样在执行完测试之后邮件就发送出去了,也可以在配置文件中加上开关,比如0发送邮件,1不发送邮件,方便调试代码。整个框架就写到这里,其实还有很多可以完善的。

  • 相关阅读:
    webDriver自动化操作(二)浏览器/页面信息属性操作
    webDriver自动化操作(一)元素定位和基础操作
    Selenium(一) Selenium和ChromeDriver的安装与配置
    Fiddler设置爬取app网页
    pycharm新建项目配置虚拟环境
    AIRTEST安装配置流程
    Jquery树插件zTree学习总结
    HTML中head标签内的使用标签详解
    Highcharts图表学习(二)
    noty-jQuery插件
  • 原文地址:https://www.cnblogs.com/myal/p/9415989.html
Copyright © 2011-2022 走看看