探索框架(九)--在框架驱动程序中加上发送邮件的功能

导语

        之前已经画好了原型(探索框架(八)),接下来需要去完成发送bug报告的功能。

一、发邮件技术实验

        基于此前驱动程序代码已经比较多了,对于新手而言,不熟悉的技术还是先做个小试验,在成功后再去原驱动程序中加以糅合,先尝试发送一个有标题、有正文的邮件,代码如下:

# 导入发邮件相关类库包
# 邮件的标题
from email.header import Header
# 邮件的正文
from email.mime.text import MIMEText
# 邮箱的服务器
import smtplib


class testframe_email():
    def send_email(self):
        # 设置邮箱服务器
        smtp = smtplib.SMTP("smtp.163.com")
        # 登录邮箱
        smtp.login("这里是邮箱账号", "这里是邮箱密码")
        # 设置邮件内容
        email = MIMEText("这是邮件正文内容", "html", "utf-8")
        # 设置邮件标题
        email["subject"] = Header("这是邮件的标题")
        # 设置邮件发送人
        email["from"] = "这里就是登录的邮箱账号"
        # 设置邮件收件人
        email["to"] = "这里是收件人的邮箱账号"
        # 发送邮件
        smtp.sendmail(email["from"], email["to"], email.as_string())
        # 关闭邮箱服务器
        smtp.close()


if __name__ == '__main__':
    objemail = testframe_email()
    objemail.send_email()

        以上每句均有注释,就不多做解释了,还可以在发邮件时发送附件,代码如下:

# 导入发邮件相关类库包
# 邮件的标题
from email.header import Header
# 邮件的正文
from email.mime.text import MIMEText
# 邮箱的服务器
import smtplib
# 邮件附件
from email.mime.multipart import MIMEMultipart


class testframe_email():
    def send_email(self):
        # 设置邮箱服务器
        smtp = smtplib.SMTP("smtp.163.com")
        # 登录邮箱
        smtp.login("这里是邮箱账号", "这里是邮箱密码")
        # 已只读方式打开附件,生成文件指针
        file = open("这里是文件具体路径\\bugfile.csv","r").read()
        # 设置附件的属性
        annex = MIMEText(file, "utf-8")
        # 设置发送类型
        annex["content-type"] = "application/octet-stream"
        # 附件信息的描述
        annex["content-disposition"] = "attachment;filename='bugfile.csv'"        
        # 设置邮件发送对象
        email = MIMEMultipart()
        # 设置邮件内容
        email.attach(MIMEText("这是邮件正文内容", "html", "utf-8"))
        # 设置邮件标题
        email["subject"] = Header("这是邮件的标题")
        # 设置邮件发送人
        email["from"] = "这里是发件人邮箱账号"
        # 设置邮件收件人
        email["to"] = "这里是收件人邮箱账号"
        # 添加附件对象
        email.attach(annex)
        # 发送邮件
        smtp.sendmail(email["from"], email["to"], email.as_string())
        # 关闭邮箱服务器
        smtp.close()


if __name__ == '__main__':
    objemail = testframe_email()
    objemail.send_email()

        以上均有注释,就不多描述了,上面是以bugfile.csv这个文件作为附件为例,如果文件名中有中文,发送以后,附件名就会乱码,这个时候需要修改一下附件信息的描述那里的代码,有几种改写方式均可,代码如下:

# 附件信息的描述
# 这是原来的写法,适用于文件名为英文
annex["content-disposition"] = "attachment;filename='bugfile.csv'"
# 这里是适用于文件名为中文的第一种用法
annex.add_header("content-disposition", "attachment",filename=("utf-8", "", "bug报告.csv"))
# 这里是适用于文件名为中文的第二种用法
annex.add_header("content-disposition", "attachment", filename=Header("bug报告.csv", "utf-8").encode())

        以上均可以解决乱码的问题,这样一来技术实验算是做好了,只需要加入原驱动程序中即可。

二、在原框架驱动程序中加入发送邮件功能

        以上定义的类和方法可以直接cp到原驱动程序中,只需要关注几个参数即可。其中邮件的正文可以为bug报告中的失败用例内容,可以是变量参数,而收件人则可以从配置文件中读取,也可以作为一个参数,在原先的配置文件中多加一列,如下图所示(图一):

图1 修改配置文件

         还可以在配置文件中加入其他说明列,比如说功能备注,写明此用例时完成哪项功能,还可以加上此用例的关联人员,可以是测试或者开发,等等。

        接下来就需要去梳理在哪里进行发送邮件的调用即可。可以回顾界面,是在勾选了“发送bug报告”的情况下,才可能需要去调用发送邮件的方法,那么在原先run_driver方法中加入一个判断(具体之前的程序可以参考以前的总结),代码如下:

    # 定义运行方法
    def run_driver(self, event):
        ......
       
        # 实例化测试驱动类
        objdriver = testframe_driver()
        # 根据单选按钮的选项,调用测试驱动类中的不同的执行方法
        if self.csv_radiobut.GetValue() == 1:
            # 如果选中了“生成bug报告”,则给一个信号,creatbug = 1
            if self.bug_checkbox.GetValue() == 1:
                creatbug = 1
                # 如果选中了“发送bug报告”,则给一个信号
                if self.email_checkbox.GetValue() == 1:
                    sendemail = 1
                else:
                    sendemail = 0
            else:
                creatbug = 0
            # 调用测试驱动程序 
            objdriver.run_configfile_csv(self.configfile, creatbug, sendemail)
        elif self.html_radiobut.GetValue() == 1:
            objdriver.run_configfile_html(self.configfile)

        这里需要多传一个参数sendmail,这样再去修改run_configfile_csv方法,这个方法完整的代码如下:

    # 定义执行配置文件生成csv报告方法
    def run_configfile_csv(self, configfile, creatbug, sendemail):
        # 实例化bug报告类
        objbug = testframe_bugfile()
        # 实例化发送邮件类
        objemail = testframe_email()
        # 如果勾选了生成bug报告,就调用创建bug报告相关方法
        if creatbug == 1:
            objbug.create_bugfile()
            objbug.write_bugtitle()
        # 实例化测试报告类
        objreport = testframe_report()
        # 调用创建并打开文件方法
        objreport.open_report()
        # 读取配置文件内容
        file = open(configfile, "r")
        table = csv.reader(file)
        # 调用写入报告标题方法
        objreport.write_title()
        sucnum = 0
        errnum = 0
        starttime = datetime.datetime.now()
        # 跳过第一行
        next(table)
        for ele in table:
            casename = ele[1]
            stros = ('python ' + casename)
            if ele[2] == "yes":
                # 执行脚本
                os.system(stros)
                # 调用读取临时文件方法,获取测试用例执行结果
                objreport.read_tmp()
                # 调用写入测试结果方法
                objreport.write_result(ele[0], ele[1], ele[2], objreport.result)
                sucnum = sucnum + int(objreport.sucnum)
                errnum = errnum + int(objreport.errnum)
                # 如果有失败数,则读取bug临时文件,并写入bug报告中
                if errnum > 0:
                    bugcontent = objbug.read_bugtmp()
                    objbug.write_bugcontent(ele[0], ele[1], ele[2], bugcontent)
                    # 如果选中了“发送bug报告”,则调用发送邮件方法
                    if sendemail == 1:
                        objemail.send_email(bugcontent, ele[3])
        endtime = datetime.datetime.now()
        totaltime = (endtime-starttime).seconds
        # 调用写入统计方法
        objreport.write_count(sucnum, errnum, totaltime)

        以上就可以完成发送邮件的功能了,当然这里设定的是只有存在用例执行失败的情况,且同时需要发送邮件才可以。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值