pytest+yaml+allure接口自动化测试框架02.封装日志与缓存

前言

本章节介绍以下封装日志和缓存类。

在测试执行的过程中我们需要日志去输出关键信息,并能进行实时的查看。可以理解为我们需要监听我们的脚本在做什么,以及做到那一步。

缓存其实就是一个变量池,把我们不需要存储的一些临时信息存储起来,比如临时的变量,传递的参数等临时信息。

注意:鄙人用的编辑器是VScode。测试有问题,可以先换成和我一样试试。

封装日志

打开utils/logger.py文件,这个utils的意思是一个工具包的意思。在这个里面我们主要存放可以独立运行的工具模块。比如日志文件就是一个可以独立运行的。打开之后我们输入以下的内容:

# -*- coding: utf-8 -*-
__author__ = 'wxhou'
__email__ = '1084502012@qq.com'
"""
日志类
"""
import os
import logging
from logging.handlers import RotatingFileHandler


def init_logger():
    """初始化日志"""
    basedir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    debug_file = os.path.join(basedir, 'logs', 'server.log')

    logger_formatter = logging.Formatter(
        '%(levelname)s %(asctime)s [%(filename)s:%(lineno)s] %(thread)d %(message)s')

    # debug
    logger_debug = logging.getLogger('apitest')
    handler_debug = RotatingFileHandler(debug_file,
                                        encoding='utf-8',
                                        maxBytes=20 * 1024 * 1024,
                                        backupCount=10)
    handler_debug.setFormatter(logger_formatter)
    logger_debug.setLevel(logging.DEBUG)
    logger_debug.addHandler(handler_debug)
    return logger_debug


logger = init_logger()

if __name__ == '__main__':
    logger.debug("debug")
    logger.info("info")
    logger.warning('warning')
    logger.error("error")
    logger.critical('critical')

下面一些日志输入示例。我们来执行一下。

pytest+yaml+allure接口自动化测试框架02.封装日志与缓存

可以看到成功的在日志文件中写入了新的信息。

缓存

是的你没看错,我给它起的名字就叫缓存,其实内部组成本质就是一个python字典。而不是你想的redis这种。

打开common/cache.py文件,我们输入以下内容。

# -*- coding: utf-8 -*-
__author__ = 'wxhou'
__email__ = '1084502012@qq.com'
"""
缓存类
"""
from collections import UserDict


class CachePool(UserDict):
    """全局变量池"""

    def get(self, key, default=None):
        return self.data.get(key, default)

    def set(self, key, value = None):
        self.data.setdefault(key, value)

    def has(self, key):
        return key in self.data

    def __len__(self):
        return len(self.data)

    def __bool__(self):
        return bool(self.data)


cache = CachePool()

if __name__ == '__main__':
    cache.set('name', 'wxhou')
    print(len(cache))
    print(cache.get('name'))

我们执行测试一下:

pytest+yaml+allure接口自动化测试框架02.封装日志与缓存

可以看到没有问题。通过这个字典我们把一些临时的信息放在这个里面,因为只是示例项目,用redis显得有些麻烦,采用这种方式更为简便一些。

关于日志和缓存封装的章节就介绍到这里。

上一篇:pytest+allure基础知识


下一篇:pytest+yaml+allure接口自动化测试框架03.读取测试用例文件