• 邮件自动生成发送用例报告


    总结

    总结

    QQ邮箱自动发送测试allure用例报告

    先创建必要文件,这些文件,会在后面依次创建

    F:测试day77day77
    bauto_increat,所有操作都在 py_tests 目录内完成
        ├─scripts   
        │  ├─test_case.py
        │  └─__init__.py
        ├─conf    #主逻辑文件
        │  ├─test_case.py
        │  └─__init__.py
        ├─data      #存放数据文件
        │  └─__init__.py
        ├─logs 
        ├─report      #存放用例集的文件
        │  ├─report.html   # pytest-html生成的用例报告
        │  ├─assets  # allure的依赖目录
        │  ├─result  # allure生成的用例数据
        │  └─allure_html   # allure生成的用例报告目录
        |     └─index.html  # allure生成的最终的html类型的测试报告  
        ├─case_set.py #用例脚本文件
        ├─run.py   # 用例启动文件
        ├─pytest.ini  # 配置文件
        └─__init__.py 
    

    先在scripts中创建test_case.py,在脚本中写入简单用例,测试run.py文件是否运行成功

    run.py

    if __name__ == "__main__":
        import pytest
        pytest.main()
    

    test_case.py

    def test_case():
        assert 0
    

    如果通过之后,在测试test_case.py文件中写入遍历数据的代码测试

    import pytest
    

    li = [1,2,3,4,5]

    @pytest.mark.parametrize("data",li)
    def test_case(data):
    print(data)
    assert 1

    是否将数据成功打印,并且用例通过,然后通过建立data文件夹,将操作的excel表格放入文件夹下,在conf文件夹中建立setting.py配置文件,然后测试是否能够获取到excel中的数据

    setting.py

    import os
    

    --------------根目录-------------------

    base_dir = os.path.dirname(os.path.dirname(os.path.abspath(file)))

    os.path.abspath(file) 是获取当前文件的绝对路径

    os.path.dirname() 跳到参数文件的父级路径

    --------------文件相关操作--------------

    file_name = '接口测试示例.xlsx'
    file_path = os.path.join(base_dir,"data",file_name)

    if name == 'main':
    print(base_dir)
    print(file_path)

    然后建立utils文件夹,在文件夹中创建操作excel表格的py脚本

    ExcelHardler.py

    """
    关于Excel表格操作
    """
    import xlrd
    from conf import settings
    

    class Excel(object):

    def get_excel_data(self):
        book = xlrd.open_workbook(filename=settings.file_path)
        sheet = book.sheet_by_index(0)
        print(sheet.nrows)
    

    if name == 'main':
    excel_obj = Excel()
    excel_obj.get_excel_data()

    然后测试类方法是否可以操作excel,然后在ExcelHardler.py中获取到数据,设计数据类型为列表套字典,列表数据以返回值的方式返回给函数

    """
    关于Excel表格操作
    """
    import xlrd
    from conf import settings
    

    class Excel(object):

    def get_excel_data(self):
        book = xlrd.open_workbook(filename=settings.file_path)
        sheet = book.sheet_by_index(0)
        title = sheet.row_values(0)   #获取excel表格中表头
        li = list()
        #得到excel数据后,设计数据结构为列表套字典
        for row in range(1,sheet.nrows):
            li.append(dict(zip(title,sheet.row_values(row))))
        # print(li)  生成数据之后将数据作为返回值返回给函数,以便导包后使用方便
        return li
    

    if name == 'main':
    excel_obj = Excel()
    excel_obj.get_excel_data()

    然后在test_case.py中导入ExcelHardler.py的类方法获取数据,并且遍历测试

    test_case.py

    import pytest
    from utils.ExcelHandler import Excel
    

    @pytest.mark.parametrize("data",Excel().get_excel_data())
    def test_case(data):
    print(data)
    assert 1

    创建logs日志,方便打印查找错误,在utils文件中创建LogHardler.py

    LogHardler.py

    import logging
    from conf import settings
    

    class LoggerHandler:
    """ 日志操作 """
    _logger_level = {
    'debug': logging.DEBUG,
    'info': logging.INFO,
    'warning': logging.WARNING,
    'error': logging.ERROR,
    'critical': logging.CRITICAL
    }

    def __init__(self, log_name, file_name, logger_level, stream_level='info', file_level='warning'):
        self.log_name = log_name
        self.file_name = file_name
        self.logger_level = self._logger_level.get(logger_level, 'debug')
        self.stream_level = self._logger_level.get(stream_level, 'info')
        self.file_level = self._logger_level.get(file_level, 'warning')
        # 创建日志对象
        self.logger = logging.getLogger(self.log_name)
        # 设置日志级别
        self.logger.setLevel(self.logger_level)
        if not self.logger.handlers:
            # 设置日志输出流
            f_stream = logging.StreamHandler()
            f_file = logging.FileHandler(self.file_name)
            # 设置输出流级别
            f_stream.setLevel(self.stream_level)
            f_file.setLevel(self.file_level)
            # 设置日志输出格式
            formatter = logging.Formatter(
                "%(asctime)s %(name)s %(levelname)s %(message)s"
            )
            f_stream.setFormatter(formatter)
            f_file.setFormatter(formatter)
            self.logger.addHandler(f_stream)
            self.logger.addHandler(f_file)
    
    @property
    def get_logger(self):
        return self.logger
    

    def logger(log_name='接口测试'):
    return LoggerHandler(
    log_name=log_name,
    logger_level=settings.LOG_LEVEL,
    file_name=settings.LOG_FILE_NAME,
    stream_level=settings.LOG_STREAM_LEVEL,
    file_level=settings.LOG_FILE_LEVEL
    ).get_logger

    if name == 'main':
    logger().debug('aaaa')
    logger().info('aaaa')
    logger().warning('aaaa')

    然后在setting文件中配置日志参数

    setting.py

    import os
    import datetime
    

    --------------根目录-------------------

    base_dir = os.path.dirname(os.path.dirname(os.path.abspath(file)))

    --------------文件相关操作--------------

    file_name = '接口测试示例.xlsx'
    file_path = os.path.join(base_dir,"data",file_name)

    ---------------- 日志相关 --------------------

    日志级别

    LOG_LEVEL = 'debug'
    LOG_STREAM_LEVEL = 'debug' # 屏幕输出流
    LOG_FILE_LEVEL = 'info' # 文件输出流

    日志文件命名

    LOG_FILE_NAME = os.path.join(base_dir, 'logs', datetime.datetime.now().strftime('%Y-%m-%d') + '.log')

    if name == 'main':
    print(base_dir)
    print(file_path)

  • 相关阅读:
    python斐波那契数列
    Python 核心编程(第二版)第八章 练习完整答案[转载]
    MYSQL自动备份!
    PHP筛选法求质数。
    Python函数式编程指南(四):生成器(转载)
    试除法求质数的最快方法!
    Python函数式编程指南:目录和参考(转载)
    PHP冒泡算法
    maven默认web项目中的web.xml版本问题
    IDEA自动补全返回值类型的快捷键
  • 原文地址:https://www.cnblogs.com/g15009428458/p/12122124.html
Copyright © 2020-2023  润新知