美文网首页前端与特效Python
『居善地』接口测试 — 26.logging日志模块的封装

『居善地』接口测试 — 26.logging日志模块的封装

作者: 繁华似锦Fighting | 来源:发表于2021-01-26 07:03 被阅读0次

    1、日志模块封装

    首先我们把之前学过的代码语句封装到模块的方法中。

    可以把该模块封装到commo目录中。

    """
    简单封装log方法
    
    我们之后也可以把一些常量提取的配置文件中。
    自己网上去学习。
    """
    
    import os
    import time
    import logging.handlers
    
    # 日志打印等级
    LEVELS = {
        'debug': logging.DEBUG,
        'info': logging.INFO,
        'warning': logging.WARNING,
        'error': logging.ERROR,
        'critical': logging.CRITICAL
    }
    
    # 创建一个日志
    logger = logging.getLogger()
    level = 'default'
    
    
    # 创建日志文件方法
    def create_file(filename):
        path = filename[0:filename.rfind('/')]
        if not os.path.isdir(path):
            os.makedirs(path)
        if not os.path.isfile(filename):
            fd = open(filename, mode='w', encoding='utf-8')
            fd.close()
        else:
            pass
    
    
    # 给logger添加handler 添加内容到日志处理器中
    def set_handler(levels):
        if levels == 'error':
            logger.addHandler(MyLog.err_handler)
        logger.addHandler(MyLog.handler)
    
    
    # 在记录日志之后移除日志处理器
    def remove_handler(levels):
        if levels == 'error':
            logger.removeHandler(MyLog.err_handler)
        logger.removeHandler(MyLog.handler)
    
    # 获取当前时间
    def get_current_time():
        return time.strftime(MyLog.date, time.localtime(time.time()))
    
    
    # 封装框架的log模块
    class MyLog:
        # 把日志输入到log目录中
        path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        log_file = path + '/Log/log.log'
        err_file = path + '/Log/err.log'
        logger.setLevel(LEVELS.get(level, logging.NOTSET))
        create_file(log_file)
        create_file(err_file)
        date = '%Y-%m-%d %H:%M:%S'
    
        # 创建一个handler,用于写入日志文件
        handler = logging.FileHandler(log_file, encoding='utf-8')
        err_handler = logging.FileHandler(err_file, encoding='utf-8')
    
        @staticmethod
        def debug(log_meg):
            set_handler('debug')
            # 文件中输出模式
            logger.debug("[DEBUG " + get_current_time() + "]" + log_meg)
            remove_handler('debug')
    
        @staticmethod
        def info(log_meg):
            set_handler('info')
            logger.info("[INFO " + get_current_time() + "]" + log_meg)
            remove_handler('info')
    
        @staticmethod
        def warning(log_meg):
            set_handler('warning')
            logger.warning("[WARNING " + get_current_time() + "]" + log_meg)
            remove_handler('warning')
    
        @staticmethod
        def error(log_meg):
            set_handler('error')
            logger.error("[ERROR " + get_current_time() + "]" + log_meg)
            remove_handler('error')
    
        @staticmethod
        def critical(log_meg):
            set_handler('critical')
            logger.error("[CRITICAL " + get_current_time() + "]" + log_meg)
            remove_handler('critical')
    
        # 设置控制台输出格式
        formatter = logging.Formatter(
            '[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S')
        # 再创建一个handler,用于输出到控制台
        console = logging.StreamHandler()
        console.setFormatter(formatter)
        logger.addHandler(console)
        console.setLevel(logging.NOTSET)
    
    
    if __name__ == "__main__":
        MyLog.debug("This is debug message")
        MyLog.info("This is info message")
        MyLog.warning("This is warning message")
        MyLog.error("This is error")
        MyLog.critical("This is critical message")
    
    

    运行结果如下:

    [2021-01-16 22:41:53] [DEBUG] [DEBUG 2021-01-16 22:41:53]This is debug message
    [2021-01-16 22:41:53] [INFO] [INFO 2021-01-16 22:41:53]This is info message
    [2021-01-16 22:41:53] [WARNING] [WARNING 2021-01-16 22:41:53]This is warning message
    [2021-01-16 22:41:53] [ERROR] [ERROR 2021-01-16 22:41:53]This is error
    [2021-01-16 22:41:53] [ERROR] [CRITICAL 2021-01-16 22:41:53]This is critical message
    

    2、日志模块的调用

    我们在写测试用例的时候,也就是在script目录编写测试用例。

    使用下面的方式进行日志模块的调用。

    """
    测试新增学院接口
    """
    
    # 测试用例是在unittest框架下编写
    import unittest
    from interface.add_departments import Add_department  # 导入新增学院接口
    from common.getKeyword_forResult import GetKeyword  # 返回值处理接口
    from common.common_log import MyLog
    
    
    # 测试添加和查询学院的关联型接口
    class Test_Add_Dep(unittest.TestCase):
        def setUp(self) -> None:
            self.url = "http://127.0.0.1:8000/api/departments/"
            # 实例化Add_department
            self.add_dep = Add_department(self.url)
    
        # 测试添加学院完整性实现
        def test_add_dep(self):
            """
            测试添加学院接口
            :return:
            """
    
            # 封装请求参数
            data = {
                "data": [
                    {
                        "dep_id": "T101",
                        "dep_name": "Test学院",
                        "master_name": "Test-Master",
                        "slogan": "Here is Slogan"
                    }
                ]
            }
    
            try:
                # 新增学院
                response = self.add_dep.add_dep(data)
                if GetKeyword.get_keyword(response["already_exist"], "count") == 0:
                    # 获取添加成功后的dep.id
                    res_dep_id = GetKeyword.get_keyword(response["create_success"], "dep_id")
                    # 1.输出添加学院成功日志信息
                    MyLog.info("添加学院成功!")
                else:
                    res_dep_id = GetKeyword.get_keyword(response["already_exist"], "dep_id")
                    # 2.输出添加学院已存在日志信息
                    MyLog.info("您添加的学院已存在!")
            except Exception as error:
                # 3.输出添加学院错误日志信息
                MyLog.error("添加学院参数错误!")
    
            expect = "T101"
            self.assertEqual(res_dep_id, expect)
    
    
    if __name__ == '__main__':
        unittest.main()
    
    

    说明:

    我们通过简单的例子,来模拟日志模块如何封装,在用例中如何使用。

    但是在实际的工作做会比上面复杂的多,

    所以在这里我们知道日志模块如何定义,如何使用就可以了。

    相关文章

      网友评论

        本文标题:『居善地』接口测试 — 26.logging日志模块的封装

        本文链接:https://www.haomeiwen.com/subject/pxktzktx.html