成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > Python接口自動(dòng)化淺析logging封裝及實(shí)戰(zhàn)操作

Python接口自動(dòng)化淺析logging封裝及實(shí)戰(zhàn)操作

熱門標(biāo)簽:西藏房產(chǎn)智能外呼系統(tǒng)要多少錢 地圖標(biāo)注審核表 宿遷星美防封電銷卡 外呼并發(fā)線路 湛江智能外呼系統(tǒng)廠家 ai電話機(jī)器人哪里好 ai電銷機(jī)器人源碼 長沙高頻外呼系統(tǒng)原理是什么 百度地圖標(biāo)注沒有了

在上一篇Python接口自動(dòng)化測(cè)試系列文章:Python接口自動(dòng)化淺析logging日志原理及模塊操作流程,主要介紹日志相關(guān)概念及l(fā)ogging日志模塊的操作流程。

而在此之前介紹過yaml封裝,數(shù)據(jù)驅(qū)動(dòng)、配置文件、日志文件等獨(dú)立的功能,我們將這些串聯(lián)起來,形成一個(gè)完整的接口測(cè)試流程。

以下主要介紹將logging常用配置放入yaml配置文件、logging日志封裝及結(jié)合登錄用例講解日志如何在接口測(cè)試中運(yùn)用。

一、yaml配置文件

將日志中的常用配置,比如日志器名稱、日志器等級(jí)及格式化放在配置文件中,在配置文件config.yaml中添加:

logger:
  name: ITester
  level: DEBUG
  format: '%(filename)s-%(lineno)d-%(asctime)s-%(levelname)s-%(message)s'

封裝logging類,讀取yaml中的日志配置。

二、讀取yaml

之前讀寫yaml配置文件的類已經(jīng)封裝好,愉快的拿來用即可,讀取yaml配置文件中的日志配置。

yaml_handler.py

import yaml
class YamlHandler:
    def __init__(self, file):
        self.file = file
    def read_yaml(self, encoding='utf-8'):
        """讀取yaml數(shù)據(jù)"""
        with open(self.file, encoding=encoding) as f:
            return yaml.load(f.read(), Loader=yaml.FullLoader)
    def write_yaml(self, data, encoding='utf-8'):
        """向yaml文件寫入數(shù)據(jù)"""
        with open(self.file, encoding=encoding, mode='w') as f:
            return yaml.dump(data, stream=f, allow_unicode=True)
yaml_data = YamlHandler('../config/config.yaml').read_yaml()

三、封裝logging類

在common目錄下新建文件logger_handler.py,用于存放封裝的logging類。

封裝思路:

  • 首先分析一下,logging中哪些數(shù)據(jù)可以作為參數(shù)?比如日志器名稱、日志等級(jí)、日志文件路徑、輸出格式,可以將這些放到__init__方法里,作為參數(shù)。
  • 其次,要判斷日志文件是否存在,存在就將日志輸出到日志文件中。
  • 最后,logging模塊已經(jīng)封裝好了Logger類,可以直接繼承,減少代碼量。

這里截取logging模塊中Logger類的部分源碼。

class Logger(Filterer):
    """
    Instances of the Logger class represent a single logging channel. A
    "logging channel" indicates an area of an application. Exactly how an
    "area" is defined is up to the application developer. Since an
    application can have any number of areas, logging channels are identified
    by a unique string. Application areas can be nested (e.g. an area
    of "input processing" might include sub-areas "read CSV files", "read
    XLS files" and "read Gnumeric files"). To cater for this natural nesting,
    channel names are organized into a namespace hierarchy where levels are
    separated by periods, much like the Java or Python package namespace. So
    in the instance given above, channel names might be "input" for the upper
    level, and "input.csv", "input.xls" and "input.gnu" for the sub-levels.
    There is no arbitrary limit to the depth of nesting.
    """
    def __init__(self, name, level=NOTSET):
        """
        Initialize the logger with a name and an optional level.
        """
        Filterer.__init__(self)
        self.name = name
        self.level = _checkLevel(level)
        self.parent = None
        self.propagate = True
        self.handlers = []
        self.disabled = False
    def setLevel(self, level):
        """
        Set the logging level of this logger.  level must be an int or a str.
        """
        self.level = _checkLevel(level)

接下來,我們開始封裝logging類。

logger_handler.py

import logging
from common.yaml_handler import yaml_data
class LoggerHandler(logging.Logger):
    # 繼承Logger類
    def __init__(self,
                 name='root',
                 level='DEBUG',
                 file=None,
                 format=None
                 ):
        # 設(shè)置收集器
        super().__init__(name)
        # 設(shè)置收集器級(jí)別
        self.setLevel(level)
        # 設(shè)置日志格式
        fmt = logging.Formatter(format)
        # 如果存在文件,就設(shè)置文件處理器,日志輸出到文件
        if file:
            file_handler = logging.FileHandler(file,encoding='utf-8')
            file_handler.setLevel(level)
            file_handler.setFormatter(fmt)
            self.addHandler(file_handler)
        # 設(shè)置StreamHandler,輸出日志到控制臺(tái)
        stream_handler = logging.StreamHandler()
        stream_handler.setLevel(level)
        stream_handler.setFormatter(fmt)
        self.addHandler(stream_handler)
# 從yaml配置文件中讀取logging相關(guān)配置
logger = LoggerHandler(name=yaml_data['logger']['name'],
                       level=yaml_data['logger']['level'],
                       file='../log/log.txt',
                       format=yaml_data['logger']['format'])

四、logging實(shí)戰(zhàn)

在登錄用例中運(yùn)用日志模塊,到底在登錄代碼的哪里使用日志?

  • 將讀取的用例數(shù)據(jù)寫入日志、用來檢查當(dāng)前的用例數(shù)據(jù)是否正確;
  • 將用例運(yùn)行的結(jié)果寫入日志,用來檢查用例運(yùn)行結(jié)果是否與預(yù)期一致;
  • 將斷言失敗的錯(cuò)誤信息寫入日志。

接下來直接上代碼,在登錄用例中添加日志。

test_login.py

import unittest
from common.requests_handler import RequestsHandler
from common.excel_handler import ExcelHandler
import ddt
import json
from common.logger_handler import logger
@ddt.ddt
class TestLogin(unittest.TestCase):
    # 讀取excel中的數(shù)據(jù)
    excel = ExcelHandler('../data/cases.xlsx')
    case_data = excel.read_excel('login')
    print(case_data)
    def setUp(self):
        # 請(qǐng)求類實(shí)例化
        self.req = RequestsHandler()
    def tearDown(self):
        # 關(guān)閉session管理器
        self.req.close_session()
    @ddt.data(*case_data)
    def test_login_success(self,items):
        logger.info('*'*88)
        logger.info('當(dāng)前是第{}條用例:{}'.format(items['case_id'],items['case_title']))
        logger.info('當(dāng)前用例的測(cè)試數(shù)據(jù):{}'.format(items))
        # 請(qǐng)求接口
        res = self.req.visit(method=items['method'],url=items['url'],json=json.loads(items['payload']),
                             headers=json.loads(items['headers']))
        try:
            # 斷言:預(yù)期結(jié)果與實(shí)際結(jié)果對(duì)比
            self.assertEqual(res['code'], items['expected_result'])
            logger.info(res)
            result = 'Pass'
        except AssertionError as e:
            logger.error('用例執(zhí)行失敗:{}'.format(e))
            result = 'Fail'
            raise e
        finally:
            # 將響應(yīng)的狀態(tài)碼,寫到excel的第9列,即寫入返回的狀態(tài)碼
            TestLogin.excel.write_excel("../data/cases.xlsx", 'login', items['case_id'] + 1, 9, res['code'])
            # 如果斷言成功,則在第10行(測(cè)試結(jié)果)寫入Pass,否則,寫入Fail
            TestLogin.excel.write_excel("../data/cases.xlsx", 'login', items['case_id'] + 1, 10, result)
if __name__ == '__main__':
    unittest.main()

控制臺(tái)日志輸出部分截圖:

日志文件輸出部分截圖:

以上就是Python接口自動(dòng)化淺析logging封裝及實(shí)戰(zhàn)操作的詳細(xì)內(nèi)容,更多關(guān)于Python接口自動(dòng)化logging封裝的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • Python日志模塊logging簡介
  • Python基礎(chǔ)之logging模塊知識(shí)總結(jié)
  • Python 解決logging功能使用過程中遇到的一個(gè)問題
  • Python的logging模塊基本用法
  • Python logging簡介詳解

標(biāo)簽:林芝 大同 寧夏 普洱 海南 漯河 盤錦 南平

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python接口自動(dòng)化淺析logging封裝及實(shí)戰(zhàn)操作》,本文關(guān)鍵詞  Python,接口,自動(dòng)化,淺析,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python接口自動(dòng)化淺析logging封裝及實(shí)戰(zhàn)操作》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python接口自動(dòng)化淺析logging封裝及實(shí)戰(zhàn)操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    日韩伦理在线| 久久国内精品自在自线400部| 性xxxx搡xxxxx搡欧美| 亚洲午夜久久久久久久久电影院| 一级做a爱片久久毛片| 欧美aaaaa成人免费观看视频| 国产精品777| 97在线视频人妻无码| 岛国毛片在线观看| 国产精品久久777777换脸| 一区二区三区欧美成人| 国产欧洲精品视频| av在线不卡顿| 久久久久久婷婷| 秋霞影院一区二区| 午夜久久黄色| 国产91免费看| 日本欧美视频| 黄色网页免费在线观看| 波多野洁衣一区| 一区二区三区区四区播放视频在线观看| 欧美成人精品福利在线视频| 日本一二三区在线视频| 女女调教被c哭捆绑喷水百合| 久久琪琪电影院| 欧美极品少妇xxxxⅹ免费视频| 亚洲天堂美女视频| 国产午夜精品一区二区三区视频| 亚洲综合首页| 午夜精品视频一区二区三区在线看| 99视频在线免费观看| 91美女精品| 国产亚洲成人av| 成人免费看片'免费看| 精品国产成人av在线免| 国产91精品久久久久久| 国产精品福利在线| 亚洲成熟丰满熟妇高潮xxxxx| 欧美一级淫片aaaaaaa视频| 国产精久久一区二区| 亚洲精品美国一| 欧美日韩一区二区在线免费观看| 97超碰成人在线| 亚洲免费视频一区二区| 91麻豆精品国产91久久久久久久久| 久久亚洲一区二区三区明星换脸| 无码人妻av免费一区二区三区| 国产高潮流白浆| 一级淫片免费看| 欧美va天堂| 亚洲欧洲日韩综合| 欧美日韩日本视频| 国产日韩欧美一区二区东京热| 无码中文字幕色专区| 欧美性猛交xxxx黑人猛交| 在线播放豆国产99亚洲| 国产一区在线观| 先锋影音在线播放av| eeuss鲁片一区二区三区在线观看| 一区二区三区欧美日| 精品免费av一区二区三区| 社区色欧美激情 | 亚洲精品一区中文字幕乱码| 黄色特一级视频| 亚洲自拍偷拍第一页| 成人av在线电影| 26uuu另类欧美亚洲曰本| 午夜精品久久久久久久爽| 亚洲精品国产系列| 久久久五月婷婷| 韩国中文字幕hd久久精品| 看一级黄色录像| 正义之心1992免费观看全集完整版| 亚洲免费不卡| 在线精品一区二区| 亚洲一区二区成人| 亚洲 国产 欧美一区| 一级在线免费观看| 永久免费看片直接| 天堂av一区二区三区| 成人动漫av| 涩涩视频在线观看下载| 亚洲成人电视网| 视频一区二区在线| 欧美日韩国产一中文字不卡| 日韩国产美国| 日产精品久久久| 欧美一区二区三区黄片| 一本久久综合亚洲鲁鲁五月天| 桃色一区二区| 久久成人综合| 桃子视频成人app| 国产精彩免费视频| 性色av一区二区| 色综合婷婷久久| 91视视频在线观看入口直接观看www| 亚洲国产精品精华液ab| 国产精品1024久久| 日本高清不卡中文字幕| 欧美精品偷拍| 日韩欧美四区| 在线免费高清一区二区三区| 欧美激情中文网| 超鹏97在线| 热99久久精品| 三级a三级三级三级a十八发禁止| 国产成人精品日本亚洲| 欧美日韩中字一区| 欧美日韩国产精品成人| 日韩av高清在线看片| 日韩亚洲欧美中文在线| 欧美一区二区三区成人精品| 熟女人妻在线视频| 拍真实国产伦偷精品| 99视频精品全国免费| 精品国产一区二区三区四区在线观看| 欧美成人一区二区三区片免费| 免费日韩在线观看| 亚洲一区第一页| 天堂网在线最新版www中文网| 日韩欧美中文字幕在线视频| 日韩三级在线观看视频| 国产7777| 国产极品久久久久久久久波多结野| 老司机aⅴ毛片免费观看| 亚洲高清在线不卡| 亚洲精品乱码久久久久久黑人| 欧美一级片黄色| 国模视频一区二区| 国产精品一区在线看| 国产精彩自拍| 午夜精品www| 欧美成人一区二免费视频软件| 日日夜夜网站| 精品国产黄a∨片高清在线| 欧美视频亚洲图片| 国产一二精品视频| 日韩免费观看一区二区| 国产97免费视频| 16—17女人毛片毛片| 男女污污视频在线观看| 蜜桃视频www网站在线观看| 日韩一级免费毛片| 亚洲an天堂an在线观看| 91嫩草国产在线观看| 国产成人精品日本亚洲11| 岛国成人毛片| 丰满肥臀噗嗤啊x99av| 亚洲色图制服丝袜| 日韩精品成人一区| 周于希免费高清在线观看| 欧美性猛交xxx| 无码人妻丰满熟妇区毛片18| 伊人网综合在线| jizzjizzjizz中国| 精品久久免费观看| 一二三在线视频| 精品无码三级在线观看视频| 国产艳俗歌舞表演hd| 欧美女同在线观看| 俄罗斯精品一区二区三区| 久久精品视频在线观看| 在线国产成人影院| 精品国产一区二区三区麻豆小说| 亚州av乱码久久精品蜜桃| 亚洲天堂av在线免费观看| 内射无码专区久久亚洲| 欧美激情一区二区三区久久久| 成人做爰视频网站| 国产日韩三级在线| 欧美一区二区三区红桃小说| 狠狠色噜噜狠狠狠狠888奇米| 夜间精品视频| 国产精品久久精品牛牛影视| 亚洲高潮女人毛茸茸| 欧美电影免费| 亚洲一卡二卡在线| 国产字幕在线看| 欧美成人剧情片在线观看| 日韩欧美在线观看| 亚洲少妇xxx| 自拍视频网站| 欧美精品一区二区三区在线| 日韩黄色免费观看| 欧美综合在线第二页| 亚洲最大激情中文字幕| 另类小说综合网| 91在线免费观看| 另类色图亚洲色图| 国产精品成人**免费视频| 很污很黄的网站| 成人免费在线一区二区三区| 国产精品资源在线看| 亚洲免费黄色网址| 国产精品久久a| 99精品一区二区三区的区别| 亚洲视频网站在线观看| 午夜私人影院久久久久| 日本成人xxx| 日韩精品综合一本久道在线视频| 一路向西2在线观看| 中文字幕在线免费播放| 在线看免费av| 六月丁香婷婷综合| 欧美三级理伦电影| 亚洲午夜久久久久中文字幕久| av在线日韩国产精品| 中文字幕制服丝袜在线| 精品成人在线观看| 亚洲一卡二卡三卡四卡无卡网站在线看| 九色91偷拍| 激情五月婷婷基地| 妞干网在线播放| 日本人成精品视频在线| 五月天激情开心网| 日本视频网址| 四虎4hutv紧急入口| 99久久综合99久久综合网站| 国产视频911| 精品欧美色视频网站在线观看| 成年人视频网站| 国产欧美日韩麻豆91| 亚洲日本中文字幕在线| 精品96久久久久久中文字幕无| 精品欠久久久中文字幕加勒比| 国产日本在线观看| 青草在线视频在线观看| 国产精品国产三级国产普通话99| 精品国产一区二区三区四区在线观看| 99亚洲伊人久久精品影院红桃| xxxx视频在线观看| 亚洲欧洲日韩在线| 无码日本精品xxxxxxxxx| 天天干天天色天天干| 夜夜嗨av一区二区三区网页| 91午夜视频在线观看| 好吊色免费视频| 五月天丁香社区| 99精品美女视频在线观看热舞| 亚洲大尺度美女在线| 日韩欧美在线一区| 永久免费av网站| 国产成人精品一区二区三区免费| 久久资源中文字幕| 天天色天天综合| **欧美日韩在线观看| 亚洲女优视频| 亚洲麻豆av| 亚洲欧美一级二级三级| 蜜桃视频在线观看www| 欧美亚洲一级二级| 日韩欧美区一区二| 五月天综合在线| 久久在线观看免费| 国产精品一区久久久久| 亚洲免费成人av电影| 天堂网视频在线观看| 最新天堂资源在线资源| 欧美羞羞免费网站| 一区二区三区高清视频在线观看| 四虎4hu影库永久地址| 91成人噜噜噜在线播放| 性农村xxxxx小树林| 国产精品一卡二卡在线观看| 视频精品在线观看| 电影一区二区三| 精精国产xxxx视频在线播放| 中文字幕资源网在线观看免费| 极度色播免费播放视频| 台湾十八成人网| 亚洲人成免费电影| 亚洲第一级黄色片| 亚洲精品福利在线观看| 亚洲精品久久7777| 91国产精品视频在线| 蜜桃国内精品久久久久软件9| 尤物影院在线播放| 91麻豆精品一二三区在线| 亚洲一区在线观看视频| 国产精品高清无码在线观看| 中文字幕第21页| 中文字幕不卡每日更新1区2区| 蜜桃视频在线观看网站| 欧美va在线播放| 一本一道波多野结衣一区二区| 日韩在线视频线视频免费网站| 国产高清在线精品| 欧美精品日韩| 中文字幕精品av| 日韩免费一区二区| 日日橹狠狠爱欧美超碰| 亚洲自拍一区在线观看| 国产成人精品亚洲线观看| 色婷婷综合缴情免费观看| 国产麻豆精品一区二区| 黄色网页在线免费观看| 一个人免费观看在线视频www| 2024最新电影在线免费观看| 色综合久久久久久中文网| 忘忧草精品久久久久久久高清| 日韩一级理论片| 99re6热只有精品免费观看| 国产永久免费视频| 亚洲女人毛茸茸高潮| 亚洲精品tv| 在线亚洲国产精品网| 中文字幕日韩一区二区| 欧洲大片精品免费永久看nba| 国产精品免费视频二三区| 成人在线视频免费看| youjizzjizz亚洲| 精品国产综合区久久久久久| 亚洲第一搞黄网站| 免费的av电影| 国产精品99久久久久久宅男| 国产精品一线天粉嫩av| 一区二区三区在线观看av| 成人小电影网站| 日韩av大片免费看| 日本成人在线播放| 欧美手机视频| 国产视频手机在线| 天天看片中文字幕| 韩国主播福利视频一区二区三区| 久久午夜无码鲁丝片午夜精品| 在线观看中文av| 国产精品任我爽爆在线播放| 一区二区三区四区精品|