引入日志模块报错

文章介绍了如何在Python测试框架中封装日志方法和生成HTML测试报告。在`common.py`文件中,定义了获取日志和创建HTML报告的函数。当在测试用例中引入日志方法时,由于尝试写入的日志文件不存在,导致`FileNotFoundError`。问题出在日志文件路径未被正确创建或检查。
摘要由CSDN通过智能技术生成

一、封装日志方法和HTML报告方法:

common.py文件:

# encoding=utf-8
import os
import csv

base_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
log_path  = base_path + os.sep + 'report' + os.sep + 'logs'
report_html = base_path + os.sep + 'html'
read_xlrd = base_path + os.sep + 'data'

class Common():
#封装日志方法
    def get_logs(self,path = log_path):
        import logging,time
        #记录器:
        logs_pan=logging.getLogger('test_find')
        logs_pan.setLevel(logging.DEBUG)
        logsFileName=path+os.sep+time.strftime('%Y-%m-%d %H_%M_%S')+'.log'

        #处理器:
            #处理器1
        FileLogsHandler=logging.FileHandler(filename=logsFileName,mode='a',encoding='utf-8')
        FileLogsHandler.setLevel(logging.DEBUG)
             #处理器2
        ConsoleLogHandler=logging.StreamHandler()
        ConsoleLogHandler.setLevel(logging.DEBUG)

        #格式化器——输出内容:
            #1.格式
        inp_fmt="时间:%(asctime)s|日志级别:%(levelname)s|%(filename)-10s 日志信息%(message)s"
        datefmt='%Y-%m-%d %H:%M:%S'
            #2.两个格式化器
        fmt1=logging.Formatter(fmt=inp_fmt,datefmt=datefmt)
        fmt2=logging.Formatter(fmt=inp_fmt)

        #关联:
            #关联1:处理器进行格式化输出
        FileLogsHandler.setFormatter(fmt1)
        ConsoleLogHandler.setFormatter(fmt2)

            #关联2:记录器关联处理器,不然无法写入内容
        logs_pan.addHandler(FileLogsHandler)
        logs_pan.addHandler(ConsoleLogHandler)

        #返回结果
        return logs_pan


# 封装一个HTML报告方法
    def GetHtmlResult(self,suite,title,path = report_html):
        import HTMLTestRunner,time
        path = path + '/' + time.strftime('%Y-%m-%d-%H-%M-%S') + '.html'
        with open(path,'wb+') as f:
            run = HTMLTestRunner.HTMLTestRunner(
                stream=f,
                description='测试描述:用户相关接口测试报告',
                title = title
            )
            run.run(suite)

二、操作文件:

(一)情况一正常:没有引入日志文件

没有加上日志方法:正常运行
# encoding=utf-8
import json
import unittest
import ddt
import requests

#引入common
import py_unittest_ddt_request.commmon.common as common

# 拿到具体的文件数据
rd = [['北京'],['马克'],['华为']]
url='https://www.baidu.com/s'

@ddt.ddt  #导入ddt模块
class Test_Baidu(unittest.TestCase):
    @ddt.data(*rd)
    @ddt.unpack
    def test_find(self,wd):  # 用例方法名开头必须已test  pars参数为接收的表数据值
        my_header = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
                    }
        last_url=url+wd+f"{wd}"
        self.go_find=requests.get(url=url,headers=my_header)
        self.assertEqual(200,self.go_find.status_code)

if __name__ == '__main__':
    load=unittest.TestLoader().loadTestsFromTestCase(Test_Baidu)
    suite=unittest.TestSuite([load],)
    common.Common().GetHtmlResult(suite,'查找测试')

(二)情况二:引入日志文件后(报错

# encoding=utf-8
import json
import unittest
import ddt
import requests

import py_unittest_ddt_request.commmon.common as common

# 拿到具体的文件数据
rd = [['北京'],['马克'],['华为']]
url='https://www.baidu.com/s'

@ddt.ddt  #导入ddt模块
class Test_Baidu(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:  # setupclass类方法  全部用例开始前执行一次
        cls.logs = common.Common().get_logs() # 导入日志方法
        cls.logs.debug('开始写入接口自动化测试用例')
    @classmethod
    def tearDownClass(cls) -> None:
        cls.logs.debug('自动化接口用例结束')

    def setUp(self) -> None:
        self.logs.debug('开始本条接口用例')

    def tearDown(self) -> None:
        self.logs.debug('结束本条用例')

    @ddt.data(*rd)
    @ddt.unpack
    def test_find(self,wd):  # 用例方法名开头必须已test  pars参数为接收的表数据值
        my_header = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
                    }
        last_url=url+wd+f"{wd}"
        self.go_find=requests.get(url=url,headers=my_header)
        self.assertEqual(200,self.go_find.status_code)

if __name__ == '__main__':
    load=unittest.TestLoader().loadTestsFromTestCase(Test_Baidu)
    suite=unittest.TestSuite([load],)
    common.Common().GetHtmlResult(suite,'查找测试')

        报错内容:

Failure
Traceback (most recent call last):
  File "D:\python37\lib\unittest\suite.py", line 163, in _handleClassSetUp
    setUpClass()
  File "D:\py菜鸟\自动化\py_unittest_ddt_request\test_name.py", line 17, in setUpClass
    cls.logs = common.Common().get_logs() # 导入日志方法
  File "D:\py菜鸟\自动化\py_unittest_ddt_request\commmon\common.py", line 32, in get_logs
    FileLogsHandler=logging.FileHandler(filename=logsFileName,mode='a',encoding='utf-8')
  File "D:\python37\lib\logging\__init__.py", line 1087, in __init__
    StreamHandler.__init__(self, self._open())
  File "D:\python37\lib\logging\__init__.py", line 1116, in _open
    return open(self.baseFilename, self.mode, encoding=self.encoding)
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\py菜鸟\\自动化\\py_unittest_ddt_request\\report\\logs\\2023-03-15 11_43_41.log'

        【截图】:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值