首页 > 编程语言 > 详细

unittest+HtmlTestRunner+python接口自动化测试:用例失败发送邮件

时间:2020-07-01 17:05:17      阅读:85      评论:0      收藏:0      [点我收藏+]

1.封装邮件发送模块,如下:

 emailUtil.py

‘‘‘
email模块负责构造邮件内容
smtplib模块负责发送邮件
‘‘‘
import datetime
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
from email.header import Header

from common.logger_handler import file_logger


class sendEmail():
    MAILHOST = "smtp.qq.com"
    MAILUSER = "XXXX@qq.com"
    MAILPWD = "授权码"

    def __init__(self, subject, content, reveiver, attachPath=""):
        """
        :param subject: 邮件主题
        :param content: 邮件正文
        :param reveiver: 收件人
        :param attachPath: 测试报告的路径
        """
        self.subject = subject
        self.content = content
        self.receiver = reveiver
        self.attachPath = attachPath

    # 写邮件,返回msg.as_string()
    def writeEmail(self):
        msg = MIMEMultipart()
        # 邮件正文
        msg.attach(MIMEText(self.content, plain, utf8))
        receiverName = ",".join(self.receiver)
        msg[from] = Header(self.MAILUSER, utf-8)
        # msg[‘to‘] =  Header(",".join(self.receiver)).encode()
        msg[to] = Header(receiverName).encode()
        # 邮件主题
        msg[Subject] = Header(self.subject, utf-8).encode()
        # print("msg is:",msg)
        # attachPath不为空则添加附件到邮件中
        if self.attachPath != "":
            with open(self.attachPath, rb) as f:
                attach1 = MIMEText(f.read(), base64, utf-8)
                attach1["Content-Type"] = application/octet-stream
                # filename自己命名
                now_time = datetime.datetime.now().strftime(%Y_%m_%d %H_%M_%S)
                attach1["Content-Disposition"] = attachment; filename="apiReport_{}.html".format(now_time)
                msg.attach(attach1)

        return msg.as_string()

    # 发送邮件
    def sendEmail(self):
        receiver = ";".join(self.receiver)
        try:
            # 连接邮件服务器
            server = smtplib.SMTP()
            server.connect(self.MAILHOST, 25)
            # 打开debug模式可以看到握手过程
            # server.set_debuglevel(1)
            # 登录,MAILPWD为邮件的授权码
            server.login(self.MAILUSER, self.MAILPWD)
            # 发送邮件
            server.sendmail(self.MAILUSER, receiver, self.writeEmail())
            server.quit()
            file_logger.warning("Email send sucess.")
        except Exception as e:
            file_logger.warning("Email send fail.")
            file_logger.warning(e)

2. 运行测试用例模块代码:

run_test.py

from common.config_path import config_path
from libs import HTMLTestRunnerNew
import unittest

def all_ceses_suite():
    test_loader = unittest.TestLoader()  # 初始化
    suite = test_loader.discover(config_path.cases_data)  # 测试用例加载
    return suite


class SendEmail:
    def __init__(self, module, email="null"):
        self.module = module
        self.email = email

    def send_to(self):
        now_time = datetime.datetime.now().strftime(%Y_%m_%d %H_%M_%S)  # 获取当前时间
        file_path = os.path.join(config_path.report_path, "ApiReport_{}.html".format(now_time))  # 存放测试报告的文件夹
        with open(file_path, "wb") as f:
            runner = HTMLTestRunnerNew.HTMLTestRunner(f, verbosity=2,
                                                      title="接口自动化测试报告")
            result = runner.run(self.module)

            totalNums = self.module.countTestCases()
            passedNums = result.success_count
            failedNums = result.failure_count
            errorNums = result.error_count
            skippedNums = len(result.skipped)
            # 通过率,保留两位小数
            passRate = round(passedNums * 100 / totalNums)

            print("本次构建一共运行:{}个用例,通过{}个,失败{}个,错误{}个,跳过{}个。通过率:{}%".format(totalNums, passedNums, failedNums, errorNums,
                                                                          skippedNums, passRate))
            if passRate != 100:
            get_receiver=[xxxx@qq.com,xxxx@qq.com]
            emailBody = "\n \t本次构建一共运行:{totalNums}个用例,通过{passedNums}个,失败{failedNums}个,错误{errorNums}个,跳过{skippedNums}个。通过率:{"                         "passRate}%.\n \t详细信息请查看附件。 "
            content = emailBody.format(totalNums=totalNums, passedNums=passedNums, failedNums=failedNums,
                                       errorNums=errorNums,
                                       skippedNums=skippedNums, passRate=passRate)
            subject = "接口测试"

            # 发送邮件

            if len(get_receiver) > 0:
                for i in get_receiver:
                    receiver = [i]
                    e = sendEmail(subject, content, receiver, attachPath=file_path)
                    e.sendEmail()


if __name__ == __main__:
    # 所有用例
    all = SendEmail(all_ceses_suite())
    all.send_to()        

 

unittest+HtmlTestRunner+python接口自动化测试:用例失败发送邮件

原文:https://www.cnblogs.com/princessironfan/p/13187751.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!