VOL 124

15

2020-05

今天距2021年230天

这是ITester软件测试小栈第124次推文

点击上方蓝字“ITester软件测试小栈“关注我,每周一、三、五早上 07:30准时推送。

微信公众号后台回复“资源”、“测试工具包”领取测试资源,回复“21天打卡”一起学习成长,打怪升级。

本文5035字,阅读约需14分钟

在上一篇Python接口自动化测试系列文章:Python接口自动化之logging日志,主要介绍日志相关概念及logging日志模块的操作流程。

而在此之前介绍过yaml封装,数据驱动、配置文件、日志文件等独立的功能,我们将这些串联起来,形成一个完整的接口测试流程。

以下主要介绍将logging常用配置放入yaml配置文件、logging日志封装及结合登录用例讲解日志如何在接口测试中运用。

yaml配置文件

将日志中的常用配置,比如日志器名称日志器等级格式化放在配置文件中,在配置文件config.yaml中添加:

logger:name: ITesterlevel: DEBUGformat: '%(filename)s-%(lineno)d-%(asctime)s-%(levelname)s-%(message)s'

封装logging类,读取yaml中的日志配置。


读取yaml

之前读写yaml配置文件的类已经封装好,愉快的拿来用即可,读取yaml配置文件中的日志配置。

yaml_handler.py

import yaml
class YamlHandler:def __init__(self, file):self.file = filedef read_yaml(self, encoding='utf-8'):"""读取yaml数据"""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文件写入数据"""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中哪些数据可以作为参数?比如日志器名称、日志等级、日志文件路径、输出格式,可以将这些放到__init__方法里,作为参数。

  • 其次,要判断日志文件是否存在,存在就将日志输出到日志文件中。

  • 最后,logging模块已经封装好了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 anapplication can have any number of areas, logging channels are identifiedby a unique string. Application areas can be nested (e.g. an areaof "input processing" might include sub-areas "read CSV files", "readXLS files" and "read Gnumeric files"). To cater for this natural nesting,channel names are organized into a namespace hierarchy where levels areseparated by periods, much like the Java or Python package namespace. Soin the instance given above, channel names might be "input" for the upperlevel, 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 = nameself.level = _checkLevel(level)self.parent = Noneself.propagate = Trueself.handlers = []self.disabled = Falsedef 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):# 设置收集器super().__init__(name)# 设置收集器级别self.setLevel(level)# 设置日志格式fmt = logging.Formatter(format)# 如果存在文件,就设置文件处理器,日志输出到文件if file:file_handler = logging.FileHandler(file,encoding='utf-8')file_handler.setLevel(level)file_handler.setFormatter(fmt)self.addHandler(file_handler)# 设置StreamHandler,输出日志到控制台stream_handler = logging.StreamHandler()stream_handler.setLevel(level)stream_handler.setFormatter(fmt)self.addHandler(stream_handler)
# 从yaml配置文件中读取logging相关配置
logger = LoggerHandler(name=yaml_data['logger']['name'],level=yaml_data['logger']['level'],file='../log/log.txt',format=yaml_data['logger']['format'])

logging实战

在登录用例中运用日志模块,到底在登录代码的哪里使用日志?

①将读取的用例数据写入日志、用来检查当前的用例数据是否正确;

②将用例运行的结果写入日志,用来检查用例运行结果是否与预期一致;

③将断言失败的错误信息写入日志。

接下来直接上代码,在登录用例中添加日志。

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中的数据excel = ExcelHandler('../data/cases.xlsx')case_data = excel.read_excel('login')print(case_data)def setUp(self):# 请求类实例化self.req = RequestsHandler()def tearDown(self):# 关闭session管理器self.req.close_session()@ddt.data(*case_data)def test_login_success(self,items):logger.info('*'*88)logger.info('当前是第{}条用例:{}'.format(items['case_id'],items['case_title']))logger.info('当前用例的测试数据:{}'.format(items))# 请求接口res = self.req.visit(method=items['method'],url=items['url'],json=json.loads(items['payload']),headers=json.loads(items['headers']))try:# 断言:预期结果与实际结果对比self.assertEqual(res['code'], items['expected_result'])logger.info(res)result = 'Pass'except AssertionError as e:logger.error('用例执行失败:{}'.format(e))result = 'Fail'raise efinally:# 将响应的状态码,写到excel的第9列,即写入返回的状态码TestLogin.excel.write_excel("../data/cases.xlsx", 'login', items['case_id'] + 1, 9, res['code'])# 如果断言成功,则在第10行(测试结果)写入Pass,否则,写入FailTestLogin.excel.write_excel("../data/cases.xlsx", 'login', items['case_id'] + 1, 10, result)
if __name__ == '__main__':unittest.main()

控制台日志输出部分截图:

日志文件输出部分截图:

总结本文主要介绍将logging常用配置放入yaml配置文件、logging日志封装及结合登录用例讲解日志如何在接口测试中运用。

以上

That‘s all

更多系列文章

敬请期待

ITester软件测试小栈

往期内容宠幸

1.Python接口自动化-接口基础(一)


2.Python接口自动化-接口基础(二)


3.Python接口自动化-requests模块之get请求


4.Python接口自动化-requests模块之post请求


5.Python接口自动化之cookie、session应用


6.Python接口自动化之Token详解及应用


7.Python接口自动化之requests请求封装


8.Python接口自动化之yaml配置文件


9.Python接口自动化之pymysql数据库操作


10.Python接口自动化之logging日志

快来星标 置顶 关注我

<<  滑动查看下一张图片  >>

今日问题

目前为止,接口自动化框架已基本成型,你对Python接口自动化系列文章的有什么建议?或者下一系列文章想看哪方面的内容呢?

(欢迎在下方留言区发表你的看法)

后台 回复"资源"取干货

回复"21天打卡"一起打怪升级

测试交流Q群:727998947

点亮一下在看,你更好看

Python接口自动化之logging封装及实战相关推荐

  1. Python接口自动化之logging日志

    VOL 122 11 2020-05 今天距2021年234天 这是ITester软件测试小栈第122次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  2. python接口自动化学习笔记(封装获取测试数据方法)

    本篇文章是接于python接口自动化学习笔记(封装方法用于读取excel) 后的拓展,讲解在封装完成excel的数据读取代码后,如何在data层进行使用 首先,我准备了这样一个excel表格用以存储测 ...

  3. Python接口自动化之动态数据处理

    VOL 135 15 2020-06 今天距2021年199天 这是ITester软件测试小栈第135次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  4. Python接口自动化之接口依赖

    VOL 129 28 2020-05 今天距2021年216天 这是ITester软件测试小栈第129次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  5. python测试自动化封装_python接口自动化学习笔记(封装获取测试数据方法)

    本篇文章是接于python接口自动化学习笔记(封装方法用于读取excel) 后的拓展,讲解在封装完成excel的数据读取代码后,如何在data层进行使用 首先,我准备了这样一个excel表格用以存储测 ...

  6. python接口自动化实战(框架)_python接口自动化框架实战

    python接口测试的原理,就不解释了,百度一大堆. 先看目录,可能这个框架比较简单,但是麻雀虽小五脏俱全. 各个文件夹下的文件如下: 一.理清思路 我这个自动化框架要实现什么 1.从excel里面提 ...

  7. python 封装_python接口自动化学习笔记(封装方法用于读取excel)

    本文是为难得干货文章 (是位大佬所写哦) 大家好,我是测试君. 下面分享一波Python接口自动化文章: 本篇是使用xlrd实现的对excel的数据进行读取,xlrd网上demo很多,不做过多叙述,下 ...

  8. Python接口自动化之requests请求封装

    ------·今天距2021年253天·------ 这是ITester软件测试小栈第114次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化之Token详解及应用,介绍tok ...

  9. python 接口自动化unittest+DingtalkChatbot钉钉机器人消息封装

    python 接口自动化unittest+DingtalkChatbot机器人消息封装 安装DingtalkChatbot: pip install DingtalkChatbot 钉钉配置机器人: ...

最新文章

  1. python获取文本光标_python 文件的操作以及调整光标
  2. c语言 临时文件作用,c语言函数mktemp()产生唯一临时文件名实例源码介绍
  3. 通过电脑给继电器发送指令_三菱FX PLC学习之通信指令(上)
  4. delphi调用选择目录对话框
  5. 数据结构:四种排序的比较
  6. java ref 应用类型_Java中的四种引用类型比较
  7. iphone打字怎么换行_除了打字,iPhone的键盘还有这12个功能
  8. 三维重建 几何方法 深度学习_基于深度学习的视觉三维重建研究总结
  9. data的值 如何初始化vue_Vue原理解析(九):搞懂computed和watch原理,减少使用场景思考时间...
  10. 初学C语言没有项目练手怎么行,这17个小项目收下不谢
  11. PHP current() 函数
  12. FlashDevelop 遇到的Process not responding 问题
  13. [深度学习] 池化层函数及其逆过程函数
  14. C语言测试:想成为嵌入式程序员应知道的0x10个基本问题
  15. HTML教程笔记(菜鸟教程)
  16. 《图形编程技术学习》(三十五)Phong明暗处理
  17. 2017年工作回顾及2018年新展望
  18. 巧用Q盘搭建SVN服务器
  19. java 蒙特卡洛_java算法3_蒙特卡洛方法(Monte Carlo method)求PI和椭圆面积
  20. 黑客帝国神级影评,转至豆瓣。 — — 哲思。

热门文章

  1. 【转贴】gdb中的信号(signal)相关调试技巧
  2. 常用linux网络配置命令
  3. 随想录(找工作20问)
  4. java面试请你谈谈mysql_Java面试题之MySQL
  5. electronjs设置宽度_javascript – 如何使Electron WebView填充指定的大小?
  6. 设备描述符请求失败_如果用户发出过多请求 苹果将取消Apple ID帐户恢复
  7. 安装系统显示sql服务器未安装,mssqlserver服务未安装怎么办 mssqlserver怎么安装
  8. next.js 无法导出及导出图片无法加载等问题
  9. 10大PHP比特币开源项目
  10. 在SQL Server中通过PowerUpSQL获得Windows自动登录密码