zoukankan      html  css  js  c++  java
  • python+unittest日志和报告输出模块

    1、日志输出模块:

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # @Time    : 2019/11/21 17:41
     4 # @Site    : 
     5 # @File    : log.py
     6 # @Software: PyCharm
     7 
     8 import time
     9 import logging
    10 
    11 class LogOutput():
    12     def logOutput(self,log_dir,name_project):
    13         '''
    14         :param log_dir: 日志路径
    15         :param name_project: 项目名称=>用于日志命名
    16         :return:
    17         '''
    18         # sys.path.append(os.chdir('../log'))
    19         now = time.strftime("%Y_%m_%d %H_%M_%S")
    20         logging.basicConfig(level=logging.DEBUG,
    21                             format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    22                             datefmt='%a, %d %b %Y %H:%M:%S',
    23                             filename=log_dir+ now +'-'+name_project+'_test_log.log',
    24                             filemode='w')
    25         logger = logging.getLogger()
    26         logger.info(self)

    2、报告输出模块:

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # @Time    : 2019/11/21 17:44
     4 # @Site    : 
     5 # @File    : report.py
     6 # @Software: PyCharm
     7 
     8 import time
     9 import unittest
    10 from BSTestRunner import BSTestRunner
    11 
    12 class ReportOutput():
    13     def reportOutput(self,test_dir,report_dir,name_project):
    14         '''
    15         :param test_dir: 用例路径
    16         :param report_dir: 报告路径
    17         :param name_project: 项目名称=>用于报告命名及描述
    18         :return:
    19         '''
    20         now = time.strftime("%Y_%m_%d %H_%M_%S")
    21         discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')      #加载测试用例
    22         report_name = report_dir + now + '-'+ name_project+'_test_report.html'    #报告名称
    23         with open(report_name,'wb') as f:   ##运行用例生成测试报告
    24             runner = BSTestRunner(stream=f,
    25                                   title=name_project+' UIAuto_Regression Testing Report',
    26                                   description=(name_project+U"UI自动化功能回归测试"),
    27                                   verbosity=2)
    28             runner.run(discover)
    29             f.close()

    3、邮件发送报告模块:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2019/12/27 14:24
    # @Site    : 
    # @File    : send_email.py
    # @Software: PyCharm
    
    import os, sys
    import smtplib
    import time
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    
    # path = os.path.dirname(os.path.abspath('.'))
    # report_path =path+'\\report\\'
    
    class Send_email():
        def get_newreport(self,report_path):
            dirs = os.listdir(report_path)#获取路径下所有文件
            dirs.sort()#获取到的文件列表排序,reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)
            newreportname = dirs[-1]
            # print('The new report name: {0}'.format(newreportname))
            return newreportname  # 返回的是测试报告的名字
        def take_messages(self,report_path):#写邮件
            new_report = self.get_newreport(report_path)
            self.msg = MIMEMultipart()
            self.msg['Subject'] = 'BBA JIT自动化测试报告'  # 邮件的标题
            self.msg['date'] = time.strftime('%a, %d %b %Y %H:%M:%S %z')
    
            with open(os.path.join(report_path, new_report), 'rb') as f:
                mailbody = f.read()  # 读取测试报告的内容
            html = MIMEText(mailbody, _subtype='html', _charset='utf-8')  # 将测试报告的内容放在 邮件的正文当中
            self.msg.attach(html)  # 将html附加在msg里
    
            # html附件    下面是将测试报告放在附件中发送
            att1 = MIMEText(mailbody, 'base64', 'utf-8')
            att1["Content-Type"] = 'application/octet-stream'
    
            att1["Content-Disposition"] = 'attachment; filename="TestReport.html"'  # 这里的filename可以任意写,写什么名字,附件的名字就是什么
            self.msg.attach(att1)
    
        def send_email(self):
            # recipients = ['xxxx@xxxx.com', 'xxxx@qq.com', 'xxx@xxxxx.com']  # 发送给多个人
            recipients = ['recive@recive.com'] #发送给一个人
            self.take_messages()
            self.msg['from'] = 'from@from.com'  # 发送邮件的人,这种是公司邮箱转发
            #self.msg['to'] = recipients  # 收件人和发送人必须这里定义一下,执行才不会报错。
            toaddrs = recipients
    
            smtp = smtplib.SMTP()
            smtp.connect('smtp.from.com')
            smtp.ehlo()
            smtp.login('from@from.com', 'email_pwd')
            smtp.sendmail(self.msg['from'], toaddrs, self.msg.as_string())  # 发送邮件
            smtp.close()
            print('sendmail success')
    if __name__ == '__main__':
        sender = Send_email()
        sender.send_email()
        # print(sender.get_newreport(report_path))

    4、调用方法及输出文件:

    目录结构:

    调用方法:

    输出样式

    博客完全是为了把一些知识以文档形式记录下来,或许以后还用得着,转载的文章均不会用于商业用途!!!
  • 相关阅读:
    Jquery同步载入数据
    fireEvent方法
    条件判断问题,不太清楚有什么区别!
    Request.QueryString,Request.Form与JavaScript中模态窗口传参
    SQL求百分比
    event.srcElement
    判断输入信息为数值类型
    SQL 表变量,临时表
    读写二进制文件
    串口通信
  • 原文地址:https://www.cnblogs.com/determined/p/11987232.html
Copyright © 2011-2022 走看看